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 不要安装最新版的…...

Java缓存技术(java内置缓存,redis,Ehcache,Caffeine的基本使用方法及其介绍)
目录 摘要 1. Java缓存技术概述 1.1定义 1.2 优势 1.3 应用场景 2. Java中的内置缓存实现 2.1 通过通过HashMap和ConcurrentHashMap实现缓存 3. Java缓存框架 3.1 Redis 3.1.1 redis的简介 3.1.4 Redis的工作原理 3.1.5 总结 3.2 Ehcache 3.2.1 Eh…...

YoloV9改进策略:主干网络改进|DeBiFormer,可变形双级路由注意力|全网首发
摘要 在目标检测领域,YoloV9以其高效和准确的性能而闻名。然而,为了进一步提升其检测能力,我们引入了DeBiFormer作为YoloV9的主干网络。这个主干网络的计算量比较大,不过,上篇双级路由注意力的论文受到很大的关注,所以我也将这篇论文中的主干网络用来改进YoloV9,卡多的…...

【力扣 | SQL题 | 每日3题】力扣2988,569,1132,1158
1 hard 3mid,难度不是特别大。 1. 力扣2988:最大部门的经理 1.1 题目: 表: Employees ---------------------- | Column Name | Type | ---------------------- | emp_id | int | | emp_name | varchar | | de…...

移动网络知识
一、3G网络 TD-SCDMA(时分同步码分多址接入)、WCDMA(宽带码分多址)和CDMA2000三种不同的3G移动通信标准 TD-SCDMA(时分同步码分多址接入):中国自主开发的一种3G标准主要用于国内市场ÿ…...

CentOS系统Nginx的安装部署
CentOS系统Nginx的安装部署 安装包准备 在服务器上准备好nginx的安装包 nginx安装包下载地址为:https://nginx.org/en/download.html 解压 tar -zxvf nginx-1.26.1.tar.gz执行命令安装 # 第一步 cd nginx-1.26.1# 第二步 ./configure# 第三步 make# 第四步 mak…...

Leetcode 最长公共前缀
java solution class Solution {public String longestCommonPrefix(String[] strs) {if(strs null || strs.length 0) {return "";}//用第一个字符串作为模板,利用indexOf()方法匹配,由右至左逐渐缩短第一个字符串的长度String prefix strs[0];for(int i 1; i …...

[C#][winform]基于yolov5的驾驶员抽烟打电话安全带检测系统C#源码+onnx模型+评估指标曲线+精美GUI界面
【重要说明】 该系统以opencvsharp作图像处理,onnxruntime做推理引擎,使用CPU进行推理,适合有显卡或者没有显卡windows x64系统均可,不支持macOS和Linux系统,不支持x86的windows操作系统。由于采用CPU推理,要比GPU慢。…...

【Flutter】基础入门:开发环境搭建
Flutter 是一个强大的跨平台框架,支持在 Android、iOS、Windows、Linux、Web 等多种平台上开发应用。下面将详细介绍如何在各个平台上构建 Flutter 开发环境,并使用相同的项目代码构建出一个可以在多个平台运行的跨平台 Demo。 Flutter 环境配置&#x…...

AI学习指南深度学习篇-对比学习(Contrastive Learning)简介
AI学习指南深度学习篇 - 对比学习(Contrastive Learning)简介 目录 引言对比学习的背景对比学习的定义对比学习在深度学习中的应用 无监督学习表示学习 详细示例 基本示例先进示例 对比学习的优缺点总结与展望 1. 引言 随着人工智能(AI&am…...

【蓝队技能】【规则开发1】Suricata-C2Webshell隧道
蓝队技能 Suricata-C2&Webshell&隧道 蓝队技能总结前言一、C2规则开发1.1 Sliver1.2 CS 二、内网隧道1.1 frps1.2 nps 三、webshell3.1 蚁剑3.2 冰蝎3.3 哥斯拉 总结 前言 本文聚焦于Suricata规则开发,提供针对Sliver、Cobalt Strike(CS…...