Halcon开启多线程
并行运算(提升检测时间)
支持主线程中的子线程并行执行程序和调用算子。 一旦启动,子线程由线程 ID 标识,该线程 ID 是一个取决于操作系统的整数进程号。 子线程的执行独立于它们启动的线程。 因此,无法预测子线程执行结束确切时间点。 如果要访问一组线程返回的数据,则需要显式等待相应的线程完成。
HDevelop 默认将线程数限制为 20。 如果需要,可以在首选项中修改此数字。 完全限制并发线程数的主要原因是为了防止用户由于编程错误而无意中生成大量线程。 在这种情况下,系统负载和内存消耗可能会增长得如此之高,以至于可能会变得无响应。

启动线程 par_start<UserThreadID> : 算子/方法
par_start 不是实际的算子,而只是修改调用行为的限定符。 因此,无法在操作员窗口中选择 par_start。如果启动新的子线程会超过配置的最大线程数,则会引发异常。
等待子线程结束 par_join (UserThreadID)
实例:
count_seconds(t0)
read_image (Image880720666518444692, 'E:/图片/880720666518444692.jpg')
rgb1_to_gray(Image880720666518444692, GrayImage)
get_image_size(GrayImage, Width, Height)
count_seconds(t1)
*-------------生成区域参数配置
l1:=305.789
l2:=237.636
*----左上卡尺
ROI_up_l_r:=1869.6
ROI_up_l_c:=2894.94
ROI_up_l_a:=rad(-0)
par_start<ThreadID> : C_L_U (GrayImage, Cross_c_l_up, ROI_up_l_r, ROI_up_l_c, ROI_up_l_a, l1, l2, Width, Height, MeasureHandle, RowEdge_c_l_up, ColumnEdge_c_l_up, Amplitude, Distance)*-----左下卡尺
par_start<ThreadID1> : C_L_D (GrayImage, Cross_c_l_down, l1, l2, Width, Height, ROI_down_l_r, ROI_down_l_c, ROI_down_l_a, MeasureHandle1, RowEdge_c_l_down, ColumnEdge_c_l_down, Amplitude1, Distance1)*-----右下卡尺
par_start<ThreadID2> : C_R_D (GrayImage, Cross_c_r_down, l1, l2, Width, Height, ROI_down_r_r, ROI_down_r_c, ROI_down_r_a, MeasureHandle2, RowEdge_c_r_down, ColumnEdge_c_r_down, Amplitude2, Distance2)*------右上卡尺
par_start<ThreadID3> : C_R_U (GrayImage, Cross_c_r_up, l1, l2, Width, Height, ROI_up_r_r, ROI_up_r_c, ROI_up_r_a, MeasureHandle3, RowEdge_c_r_up, ColumnEdge_c_r_up, Amplitude3, Distance3)
*--------找上方直线
*--------上直线由下到上检测
par_start<ThreadID4> : L_UP (GrayImage, Contours2, Contour3, Contour_line_up, Width, Height, linepr_up, MetrologyHandle, Index, Row2, Column2, RowBegin_line_up, ColBegin_line_up, RowEnd_line_up, ColEnd_line_up, Nr, Nc, Dist)
*-------------找下方直线
*--------下直线由上到下检测
par_start<ThreadID5> : L_DOWN (GrayImage, Contours4, Contour5, Contour_line_down, Width, Height, linepr_down, MetrologyHandle1, Index1, Row3, Column3, RowBegin_line_down, ColBegin_line_down, RowEnd_line_down, ColEnd_line_down, Nr1, Nc1, Dist1)
par_join([ThreadID,ThreadID1,ThreadID2,ThreadID3,ThreadID4,ThreadID5])
count_seconds(t2)
detectiontime1:=t2-t1
dev_set_color('green')
dev_display (GrayImage)
dev_display (Contour5)
dev_display (Contour3)
dev_display (Cross_c_l_up)
dev_display (Cross_c_l_down)
dev_display (Cross_c_r_up)
dev_display (Cross_c_r_down)
dev_get_window (WindowHandle)
set_tposition(WindowHandle, 1000, 1000)
write_string(WindowHandle, '检测时间:'+detectiontime1)stop ()

无并行运算时间对比
dev_clear_window ()
dev_display (GrayImage)count_seconds(t3)
ROI_up_l_r:=1869.6
ROI_up_l_c:=2894.94
ROI_up_l_a:=rad(-0)
gen_measure_rectangle2(ROI_up_l_r, ROI_up_l_c, ROI_up_l_a, l1, l2, Width, Height, 'nearest_neighbor', MeasureHandle)
measure_pos(GrayImage,MeasureHandle, 1, 30, 'positive', 'first', RowEdge_c_l_up, ColumnEdge_c_l_up, Amplitude, Distance)
gen_cross_contour_xld(Cross_c_l_up, RowEdge_c_l_up, ColumnEdge_c_l_up, 600, 0.785398)
ROI_down_l_r:=9838.89
ROI_down_l_c:=2894.94
ROI_down_l_a:=rad(-0)
gen_measure_rectangle2(ROI_down_l_r, ROI_down_l_c,ROI_down_l_a, l1, l2, Width, Height, 'nearest_neighbor', MeasureHandle1)
measure_pos(GrayImage, MeasureHandle1, 1, 30, 'positive', 'first', RowEdge_c_l_down, ColumnEdge_c_l_down, Amplitude1, Distance1)
gen_cross_contour_xld(Cross_c_l_down, RowEdge_c_l_down, ColumnEdge_c_l_down, 600, 0.785398)
ROI_down_r_r:=9838.89
ROI_down_r_c:=5774.45
ROI_down_r_a:=rad(-178.8)
gen_measure_rectangle2(ROI_down_r_r, ROI_down_r_c, ROI_down_r_a,l1, l2, Width, Height, 'nearest_neighbor', MeasureHandle2)
measure_pos(GrayImage, MeasureHandle2, 1, 30, 'positive', 'first', RowEdge_c_r_down, ColumnEdge_c_r_down, Amplitude2, Distance2)
gen_cross_contour_xld(Cross_c_r_down, RowEdge_c_r_down, ColumnEdge_c_r_down, 600, 0.785398)
ROI_up_r_r:=1869.6
ROI_up_r_c:=5774.45
ROI_up_r_a:=rad(-178.8)
gen_measure_rectangle2(ROI_up_r_r, ROI_up_r_c,ROI_up_r_a, l1, l2, Width, Height, 'nearest_neighbor', MeasureHandle3)
measure_pos(GrayImage, MeasureHandle3, 1, 30, 'positive', 'first', RowEdge_c_r_up, ColumnEdge_c_r_up, Amplitude3, Distance3)
gen_cross_contour_xld(Cross_c_r_up, RowEdge_c_r_up, ColumnEdge_c_r_up, 600, 0.785398)
linepr_up:=[1423.49,5063.6 ,1428.49, 3444.44]
create_metrology_model(MetrologyHandle)
set_metrology_model_image_size(MetrologyHandle, Width, Height)
add_metrology_object_generic(MetrologyHandle, 'line', linepr_up, 100, 20, 1, 20, [], [], Index)
set_metrology_object_param(MetrologyHandle, 'all', 'measure_transition', 'positive')
set_metrology_object_param(MetrologyHandle, 'all', 'measure_select', 'first')
apply_metrology_model(GrayImage, MetrologyHandle)
get_metrology_object_measures(Contours2, MetrologyHandle, 'all', 'all', Row2, Column2)
gen_contour_polygon_xld(Contour3, Row2, Column2)
fit_line_contour_xld(Contour3, 'tukey', -1, 0, 5, 2, RowBegin_line_up, ColBegin_line_up, RowEnd_line_up, ColEnd_line_up, Nr, Nc, Dist)
gen_contour_polygon_xld(Contour_line_up, [RowBegin_line_up,RowEnd_line_up], [ColBegin_line_up, ColEnd_line_up])
linepr_down:=[10587.2, 3495.74,10598.2, 5276.52]
create_metrology_model(MetrologyHandle1)
set_metrology_model_image_size(MetrologyHandle1, Width, Height)
add_metrology_object_generic(MetrologyHandle1, 'line', linepr_down, 100, 20, 1, 30, [], [], Index1)
set_metrology_object_param(MetrologyHandle1, 'all', 'measure_transition', 'positive')
set_metrology_object_param(MetrologyHandle1, 'all', 'measure_select', 'first')
apply_metrology_model(GrayImage, MetrologyHandle1)
get_metrology_object_measures(Contours4, MetrologyHandle1, 'all', 'all', Row3, Column3)
gen_contour_polygon_xld(Contour5, Row3, Column3)
fit_line_contour_xld(Contour5, 'tukey', -1, 0, 5, 2, RowBegin_line_down, ColBegin_line_down, RowEnd_line_down, ColEnd_line_down, Nr1, Nc1, Dist1)
gen_contour_polygon_xld(Contour_line_down, [RowBegin_line_down,RowEnd_line_down], [ColBegin_line_down,ColEnd_line_down])
count_seconds(t4)detectiontime2:=t4-t3
dev_set_color('red')
dev_display (GrayImage)
dev_display (Contour5)
dev_display (Contour3)
dev_display (Cross_c_l_up)
dev_display (Cross_c_l_down)
dev_display (Cross_c_r_up)
dev_display (Cross_c_r_down)
set_tposition(WindowHandle, 1300, 1000)
write_string(WindowHandle, '检测时间:'+detectiontime2)

相关文章:
Halcon开启多线程
并行运算(提升检测时间) 支持主线程中的子线程并行执行程序和调用算子。 一旦启动,子线程由线程 ID 标识,该线程 ID 是一个取决于操作系统的整数进程号。 子线程的执行独立于它们启动的线程。 因此,无法预测子线程执行…...
Echarts 点击事件无法使用 this 或者 this绑定的数据无法获取
这里写自定义目录标题 现象解决方案 现象 给echarts绑定自定义点击事件时,无法使用this,并且无法获取到this绑定的数据。 解决方案 增加:const _this this; 代码块如下: const _this this; let myChart echarts.init(docum…...
PCL 基于距离阈值去除错误对应关系(永久免费版)
目录 一、概述1.1 原理1.2 实现步骤1.3应用场景 二、关键函数2.1 获取初始点对2.2 基于距离的对应关系筛选函数2.3 可视化 三、完整代码四、结果展示 即日起,付费专栏所有内容将以永久免费形式陆续进行发表!!! 一、概述 在3D点云的…...
DirectX 11 和 Direct3D 11 的关系
以下是对两者的详细比较: DirectX 11 DirectX 11是微软的一项技术,为高性能游戏和复杂图形程序制定了标准。它是DirectX系列的一个版本,引入了多项创新功能,如硬件加速的Tessellation(细分曲面技术)、多线…...
什么是SCRM?为什么企业要做SCRM?
很多人都知道CRM是客户关系管理系统,而SCRM又是什么呢? 今天我就给大家用一文讲清SCRM的那些事,本文包括:SCRM 的定义与内涵,与传统 CRM 的区别;通过案例阐述其重要性及作用,如适应消费模式转变…...
类间方差,分割地物
类间方差(Inter-class Variance)是用于图像分割中的一种统计量,特别是在使用Otsu方法进行阈值选择时。它衡量的是分割后两个类别(通常是前景和背景)之间的分离程度。类间方差越大,说明两个类别之间的差异越…...
基于微博评论的自然语言处理情感分析
目录 一、项目概述 二、需要解决的问题 三、数据预处理 1、词汇表构建(vocab_creat.py) 2、数据集加载(load_dataset.py) 四、模型构建(TextRNN.py) 1、嵌入层(Embedding Layerÿ…...
MFEM( Modular Finite Element Methods)是一个灵活的、可扩展的、开源的有限元库
MFEM( Modular Finite Element Methods )是一个灵活的、可扩展的、开源的有限元库,主要用于求解偏微分方程(PDE)问题。MFEM的目标是通过模块化设计和强大的抽象能力,简化有限元方法的使用,并支持高效的并行计算,尤其是在复杂的几何形状和自适应网格细化的情况下。 核…...
在VMware上创建虚拟机以及安装Linux操作系统,使用ssh进行远程连接VMware安装注意点 (包含 v1,v8两张网卡如果没有的解决办法)
一,VMware上创建虚拟机 1.VMware下载 1)点击VMware官网进入官网 网址:VMware by Broadcom - Cloud Computing for the EnterpriseOptimize cloud infrastructure with VMware for app platforms, private cloud, edge, networking, and security.https…...
关于vue3中如何实现多个v-model的自定义组件
实现自定义组件<User v-model"userInfo" v-model:gender"gender"></User> User组件中更改数据可以同步更改父组件中的数据: 1 父组件: <User v-model"userInfo" v-model:gender"gender">&…...
【STM32项目_2_基于STM32的宠物喂食系统】
摘要:本文介绍一款基于 STM32 的宠物喂食系统资源。该系统以 STM32 为核心,集成多种传感器与设备,涵盖 DHT11、HX711、减速马达及 ESP8266 模块,具备环境监测、精准喂食、网络连接及数据存储功能。 🔜🔜&am…...
商场楼宇室内导航系统
商场楼宇室内导航系统 本文所涉及所有资源均在传知代码平台可获取 文章目录 商场楼宇室内导航系统效果图导航效果图查看信息数据加载加载模型模型选型处理楼层模型绑定店铺创建店铺名称动态显示隐藏2d元素空气墙查看信息楼梯导航效果图 导航效果图 查看信息 数据加载 因为是一…...
2025全网最全计算机毕业设计选题推荐:计算机毕设选题指导及避坑指南√
博主介绍:✌全网粉丝50W,csdn特邀作者、博客专家、CSDN新星计划导师、Java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和学生毕业项目实战,高校老师/讲师/同行前辈交流✌ 技术范围:SpringBoot、Vue、SSM、HLM…...
Vision China 2024 | 移远通信以一体化的AI训练及部署能力,引领3C电子制造智能升级
10月14日,由机器视觉产业联盟(CMVU)主办的中国机器视觉展(Vision China)在深圳国际会展中心盛大开幕。作为全球领先的物联网整体解决方案供应商,移远通信应邀参加展会首日举办的“智造引领数质并进”3C电子制造自动化与数字化论坛。 论坛上,移…...
浏览器播放rtsp视频流解决方案
方案一: html5 websocket_rtsp_proxy 实现视频流直播 实现原理 实现步骤 服务器安装streamedian服务器 客户端通过video标签播放 <video id"test_video" controls autoplay></video><script src"free.player.1.8.4.js"></script&g…...
Ubuntu下查看指定文件大小
Ubuntu下查看指定文件大小 方法一:查看指定文件夹的总大小方法二:查看文件夹内各个子文件夹的大小方法三:查看指定深度的子文件夹大小方法四:使用ls命令查看单个文件的大小注意事项 在Ubuntu中查看指定文件夹的大小,你…...
【南开X上海交大】OPUS:效率显著提升的OCC网络
1. 摘要 占据预测任务旨在预测体素化的3D环境中的占据状态,在自动驾驶领域中迅速获得了关注。主流的占据预测方法首先将3D环境离散化为体素网格,然后在这些密集网格上执行分类。然而,样本数据分析显示,大多数体素实际上是未占据的…...
SqlUtils 使用
一、前言 随着 Solon 3.0 版本发布,新添加的 SqlUtils 接口,用于操作数据库,SqlUtils 是对 Jdbc 原始接口的封装。适合 SQL 极少或较复杂,或者 ORM 不适合的场景使用。 二、SqlUtils 使用 1、引入依赖 <dependency><…...
平面声波——一维Helmhotz波动方程
平面声波的一维Helmholtz波动方程是一种简化的声波传播模型,适用于在一维空间中传播的声波。 声波的基本物理过程---傅里叶变换---Helmholtz方程 一、声波的基本波动方程 在无源、无耗散、均匀介质中的一维声波的波动方程为: 其中: 表示位…...
深度学习 简易环境安装(不含Anaconda)
在Windows上安装深度学习环境而不使用Anaconda,下面是一个基于pip的安装指南: 1. 安装Python 确保你已经安装了Python。可以从Python官网下载Python,并在安装时勾选“Add Python to PATH”选项。 注意,Python 不要安装最新版的…...
解决Matlab硬件支持包安装失败:手把手教你手动部署Autosar工具链
解决Matlab硬件支持包安装失败:手把手教你手动部署Autosar工具链 当你在Matlab Add-On管理器中反复尝试安装Autosar支持包却遭遇网络超时、许可证报错或进度条卡死时,手动部署方案往往能成为突破困境的终极手段。不同于常规的图形化安装流程,…...
使用 TaoToken CLI 工具为团队统一配置开发环境中的模型端点
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 使用 TaoToken CLI 工具为团队统一配置开发环境中的模型端点 基础教程类,面向团队技术负责人,介绍如何通过…...
如何快速下载Fansly内容:完整Fansly Downloader使用指南
如何快速下载Fansly内容:完整Fansly Downloader使用指南 【免费下载链接】fansly-downloader Easy to use fansly.com content downloading tool. Written in python, but ships as a standalone Executable App for Windows too. Enjoy your Fansly content offlin…...
【依赖冲突实战】Java NoSuchFieldError:从版本地狱到优雅解决
1. 当Java程序突然崩溃:NoSuchFieldError的典型症状 那天下午我正在调试一个微服务项目,突然控制台抛出个鲜红的异常: java.lang.NoSuchFieldError: MAX_RETRY_COUNT这个错误看似简单,却让我花了三小时才找到根源。项目里明明有MA…...
知识竞赛选手排位抽签系统使用全解析
🎲 知识竞赛选手排位抽签系统使用全解析公平 透明 高效 让每一场竞赛从起点就值得信赖🎯 引言:为何需要专业的抽签系统在知识竞赛活动中,选手的排位与分组抽签是确保竞赛公平、公正的起点。传统的人工抽签方式不仅效率低下&…...
JUCE框架移植MDA经典音频插件:从VST2到现代跨平台开发实践
1. 项目概述:JUCE框架下的MDA插件遗产如果你在音频插件开发领域摸爬滚打过一段时间,尤其是对开源社区有所关注,那么“mda-plugins-juce”这个名字大概率会唤起你的一些记忆。这个由hollance维护的GitHub仓库,本质上是一个“移植”…...
Postman便携版:打造零污染的API测试工作环境终极指南
Postman便携版:打造零污染的API测试工作环境终极指南 【免费下载链接】postman-portable 🚀 Postman portable for Windows 项目地址: https://gitcode.com/gh_mirrors/po/postman-portable Postman便携版是一款专为Windows平台设计的绿色免安装A…...
LizzieYzy深度解析:专业围棋AI分析平台的实战进阶手册
LizzieYzy深度解析:专业围棋AI分析平台的实战进阶手册 【免费下载链接】lizzieyzy LizzieYzy - GUI for Game of Go 项目地址: https://gitcode.com/gh_mirrors/li/lizzieyzy 在围棋AI技术日新月异的今天,如何将强大的计算能力转化为实用的分析工…...
Adobe-GenP完整指南:5步轻松激活Adobe全系列软件
Adobe-GenP完整指南:5步轻松激活Adobe全系列软件 【免费下载链接】Adobe-GenP Adobe CC 2019/2020/2021/2022/2023 GenP Universal Patch 3.0 项目地址: https://gitcode.com/gh_mirrors/ad/Adobe-GenP Adobe-GenP是一款专为Adobe Creative Cloud用户设计的通…...
基于MCP协议的本地代码历史管理工具:无感备份与即时回溯
1. 项目概述:一个为开发者打造的“时光机”如果你是一名开发者,大概率经历过这样的场景:在调试一个复杂功能时,你反复修改了一段代码,运行、测试、再修改……几个小时后,你突然意识到,两个小时前…...
