当前位置: 首页 > news >正文

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开启多线程

并行运算&#xff08;提升检测时间&#xff09; 支持主线程中的子线程并行执行程序和调用算子。 一旦启动&#xff0c;子线程由线程 ID 标识&#xff0c;该线程 ID 是一个取决于操作系统的整数进程号。 子线程的执行独立于它们启动的线程。 因此&#xff0c;无法预测子线程执行…...

Echarts 点击事件无法使用 this 或者 this绑定的数据无法获取

这里写自定义目录标题 现象解决方案 现象 给echarts绑定自定义点击事件时&#xff0c;无法使用this&#xff0c;并且无法获取到this绑定的数据。 解决方案 增加&#xff1a;const _this this; 代码块如下&#xff1a; const _this this; let myChart echarts.init(docum…...

PCL 基于距离阈值去除错误对应关系(永久免费版)

目录 一、概述1.1 原理1.2 实现步骤1.3应用场景 二、关键函数2.1 获取初始点对2.2 基于距离的对应关系筛选函数2.3 可视化 三、完整代码四、结果展示 即日起&#xff0c;付费专栏所有内容将以永久免费形式陆续进行发表&#xff01;&#xff01;&#xff01; 一、概述 在3D点云的…...

DirectX 11 和 Direct3D 11 的关系

以下是对两者的详细比较&#xff1a; DirectX 11 DirectX 11是微软的一项技术&#xff0c;为高性能游戏和复杂图形程序制定了标准。它是DirectX系列的一个版本&#xff0c;引入了多项创新功能&#xff0c;如硬件加速的Tessellation&#xff08;细分曲面技术&#xff09;、多线…...

什么是SCRM?为什么企业要做SCRM?

很多人都知道CRM是客户关系管理系统&#xff0c;而SCRM又是什么呢&#xff1f; 今天我就给大家用一文讲清SCRM的那些事&#xff0c;本文包括&#xff1a;SCRM 的定义与内涵&#xff0c;与传统 CRM 的区别&#xff1b;通过案例阐述其重要性及作用&#xff0c;如适应消费模式转变…...

类间方差,分割地物

类间方差&#xff08;Inter-class Variance&#xff09;是用于图像分割中的一种统计量&#xff0c;特别是在使用Otsu方法进行阈值选择时。它衡量的是分割后两个类别&#xff08;通常是前景和背景&#xff09;之间的分离程度。类间方差越大&#xff0c;说明两个类别之间的差异越…...

基于微博评论的自然语言处理情感分析

目录 一、项目概述 二、需要解决的问题 三、数据预处理 1、词汇表构建&#xff08;vocab_creat.py&#xff09; 2、数据集加载&#xff08;load_dataset.py&#xff09; 四、模型构建&#xff08;TextRNN.py&#xff09; 1、嵌入层&#xff08;Embedding Layer&#xff…...

MFEM( Modular Finite Element Methods)是一个灵活的、可扩展的、开源的有限元库

MFEM( Modular Finite Element Methods )是一个灵活的、可扩展的、开源的有限元库,主要用于求解偏微分方程(PDE)问题。MFEM的目标是通过模块化设计和强大的抽象能力,简化有限元方法的使用,并支持高效的并行计算,尤其是在复杂的几何形状和自适应网格细化的情况下。 核…...

在VMware上创建虚拟机以及安装Linux操作系统,使用ssh进行远程连接VMware安装注意点 (包含 v1,v8两张网卡如果没有的解决办法)

一&#xff0c;VMware上创建虚拟机 1.VMware下载 1&#xff09;点击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组件中更改数据可以同步更改父组件中的数据&#xff1a; 1 父组件&#xff1a; <User v-model"userInfo" v-model:gender"gender">&…...

【STM32项目_2_基于STM32的宠物喂食系统】

摘要&#xff1a;本文介绍一款基于 STM32 的宠物喂食系统资源。该系统以 STM32 为核心&#xff0c;集成多种传感器与设备&#xff0c;涵盖 DHT11、HX711、减速马达及 ESP8266 模块&#xff0c;具备环境监测、精准喂食、网络连接及数据存储功能。 &#x1f51c;&#x1f51c;&am…...

商场楼宇室内导航系统

商场楼宇室内导航系统 本文所涉及所有资源均在传知代码平台可获取 文章目录 商场楼宇室内导航系统效果图导航效果图查看信息数据加载加载模型模型选型处理楼层模型绑定店铺创建店铺名称动态显示隐藏2d元素空气墙查看信息楼梯导航效果图 导航效果图 查看信息 数据加载 因为是一…...

2025全网最全计算机毕业设计选题推荐:计算机毕设选题指导及避坑指南√

博主介绍&#xff1a;✌全网粉丝50W,csdn特邀作者、博客专家、CSDN新星计划导师、Java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和学生毕业项目实战,高校老师/讲师/同行前辈交流✌ 技术范围&#xff1a;SpringBoot、Vue、SSM、HLM…...

Vision China 2024 | 移远通信以一体化的AI训练及部署能力,引领3C电子制造智能升级

10月14日&#xff0c;由机器视觉产业联盟(CMVU)主办的中国机器视觉展(Vision China)在深圳国际会展中心盛大开幕。作为全球领先的物联网整体解决方案供应商&#xff0c;移远通信应邀参加展会首日举办的“智造引领数质并进”3C电子制造自动化与数字化论坛。 论坛上&#xff0c;移…...

浏览器播放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下查看指定文件大小 方法一&#xff1a;查看指定文件夹的总大小方法二&#xff1a;查看文件夹内各个子文件夹的大小方法三&#xff1a;查看指定深度的子文件夹大小方法四&#xff1a;使用ls命令查看单个文件的大小注意事项 在Ubuntu中查看指定文件夹的大小&#xff0c;你…...

【南开X上海交大】OPUS:效率显著提升的OCC网络

1. 摘要 占据预测任务旨在预测体素化的3D环境中的占据状态&#xff0c;在自动驾驶领域中迅速获得了关注。主流的占据预测方法首先将3D环境离散化为体素网格&#xff0c;然后在这些密集网格上执行分类。然而&#xff0c;样本数据分析显示&#xff0c;大多数体素实际上是未占据的…...

SqlUtils 使用

一、前言 随着 Solon 3.0 版本发布&#xff0c;新添加的 SqlUtils 接口&#xff0c;用于操作数据库&#xff0c;SqlUtils 是对 Jdbc 原始接口的封装。适合 SQL 极少或较复杂&#xff0c;或者 ORM 不适合的场景使用。 二、SqlUtils 使用 1、引入依赖 <dependency><…...

平面声波——一维Helmhotz波动方程

平面声波的一维Helmholtz波动方程是一种简化的声波传播模型&#xff0c;适用于在一维空间中传播的声波。 声波的基本物理过程---傅里叶变换---Helmholtz方程 一、声波的基本波动方程 在无源、无耗散、均匀介质中的一维声波的波动方程为&#xff1a; 其中&#xff1a; 表示位…...

深度学习 简易环境安装(不含Anaconda)

在Windows上安装深度学习环境而不使用Anaconda&#xff0c;下面是一个基于pip的安装指南&#xff1a; 1. 安装Python 确保你已经安装了Python。可以从Python官网下载Python&#xff0c;并在安装时勾选“Add Python to PATH”选项。 注意&#xff0c;Python 不要安装最新版的…...

利用最小二乘法找圆心和半径

#include <iostream> #include <vector> #include <cmath> #include <Eigen/Dense> // 需安装Eigen库用于矩阵运算 // 定义点结构 struct Point { double x, y; Point(double x_, double y_) : x(x_), y(y_) {} }; // 最小二乘法求圆心和半径 …...

Cursor实现用excel数据填充word模版的方法

cursor主页&#xff1a;https://www.cursor.com/ 任务目标&#xff1a;把excel格式的数据里的单元格&#xff0c;按照某一个固定模版填充到word中 文章目录 注意事项逐步生成程序1. 确定格式2. 调试程序 注意事项 直接给一个excel文件和最终呈现的word文件的示例&#xff0c;…...

三维GIS开发cesium智慧地铁教程(5)Cesium相机控制

一、环境搭建 <script src"../cesium1.99/Build/Cesium/Cesium.js"></script> <link rel"stylesheet" href"../cesium1.99/Build/Cesium/Widgets/widgets.css"> 关键配置点&#xff1a; 路径验证&#xff1a;确保相对路径.…...

蓝桥杯 2024 15届国赛 A组 儿童节快乐

P10576 [蓝桥杯 2024 国 A] 儿童节快乐 题目描述 五彩斑斓的气球在蓝天下悠然飘荡&#xff0c;轻快的音乐在耳边持续回荡&#xff0c;小朋友们手牵着手一同畅快欢笑。在这样一片安乐祥和的氛围下&#xff0c;六一来了。 今天是六一儿童节&#xff0c;小蓝老师为了让大家在节…...

Auto-Coder使用GPT-4o完成:在用TabPFN这个模型构建一个预测未来3天涨跌的分类任务

通过akshare库&#xff0c;获取股票数据&#xff0c;并生成TabPFN这个模型 可以识别、处理的格式&#xff0c;写一个完整的预处理示例&#xff0c;并构建一个预测未来 3 天股价涨跌的分类任务 用TabPFN这个模型构建一个预测未来 3 天股价涨跌的分类任务&#xff0c;进行预测并输…...

高危文件识别的常用算法:原理、应用与企业场景

高危文件识别的常用算法&#xff1a;原理、应用与企业场景 高危文件识别旨在检测可能导致安全威胁的文件&#xff0c;如包含恶意代码、敏感数据或欺诈内容的文档&#xff0c;在企业协同办公环境中&#xff08;如Teams、Google Workspace&#xff09;尤为重要。结合大模型技术&…...

JVM暂停(Stop-The-World,STW)的原因分类及对应排查方案

JVM暂停(Stop-The-World,STW)的完整原因分类及对应排查方案,结合JVM运行机制和常见故障场景整理而成: 一、GC相关暂停​​ 1. ​​安全点(Safepoint)阻塞​​ ​​现象​​:JVM暂停但无GC日志,日志显示No GCs detected。​​原因​​:JVM等待所有线程进入安全点(如…...

Device Mapper 机制

Device Mapper 机制详解 Device Mapper&#xff08;简称 DM&#xff09;是 Linux 内核中的一套通用块设备映射框架&#xff0c;为 LVM、加密磁盘、RAID 等提供底层支持。本文将详细介绍 Device Mapper 的原理、实现、内核配置、常用工具、操作测试流程&#xff0c;并配以详细的…...

html-<abbr> 缩写或首字母缩略词

定义与作用 <abbr> 标签用于表示缩写或首字母缩略词&#xff0c;它可以帮助用户更好地理解缩写的含义&#xff0c;尤其是对于那些不熟悉该缩写的用户。 title 属性的内容提供了缩写的详细说明。当用户将鼠标悬停在缩写上时&#xff0c;会显示一个提示框。 示例&#x…...

安卓基础(Java 和 Gradle 版本)

1. 设置项目的 JDK 版本 方法1&#xff1a;通过 Project Structure File → Project Structure... (或按 CtrlAltShiftS) 左侧选择 SDK Location 在 Gradle Settings 部分&#xff0c;设置 Gradle JDK 方法2&#xff1a;通过 Settings File → Settings... (或 CtrlAltS)…...