Halcon学习笔记之多线程并行读取QR二维码

Halcon中的多线程使用方法

    par_start<Thread_1> : Method_1()
    par_start<Thread_2> : Method_2()
    par_start<Thread_3> : Method_3()
    ...
   par_start<Thread_n> : Method_n()
    * 等待n个线程执行完成
    par_join ([Method_1,Method_2,Method_3....Method_n])

多线程并行读取QR二维码

**************************************************************************1.初始化**************************************************** 
*测量次数
Loops := 3

*关闭程序计数器,图形窗口更新,图像变量更新
dev_update_off ()

*关闭已经打开的窗口
dev_close_window ()

*读取一张图像
read_image (Image, 'barcode/mixed/barcodes_datacodes_mixed_01')

*创建一个窗口,图像可以自适应该窗口
dev_open_window_fit_image (Image, 0, 0, -1, -1, WindowHandle)

*设置字体显示信息:字体大小:16;字体类型:mono;粗体,斜体;
set_display_font (WindowHandle, 16, 'mono', 'true', 'false')

*显示图像
dev_display (Image)


**************************************************************************1.多线程来对多个二维码进行解码**************************************************** 

*创建一个QR Code类型的二维码模版
create_data_code_2d_model ('QR Code', [], [], QrCodeModel)

*创建一个Data Matrix ECC 200类型的二维码模版
create_data_code_2d_model ('Data Matrix ECC 200', 'default_parameters', 'maximum_recognition', Ecc200Model)

*创建一个一维码模版
create_bar_code_model ([], [], BarCodeModel)

* 训练Qr二维码模版
find_data_code_2d (Image, QrCodeXldsSeq, QrCodeModel, ['stop_after_result_num','train'], [2,'all'], QrCodeHandlesSeq, QrCodeStringsSeq)
* 训练Ecc200二维码模版
find_data_code_2d (Image, Ecc200XldsSeq, Ecc200Model, ['stop_after_result_num','train'], [2,'all'], Ecc200HandlesSeq, Ecc200StringsSeq)
* 训练EAN-13一维码模版
find_bar_code (Image, BarCodeRegionsSeq, BarCodeModel, ['EAN-13','Code 128'], BarCodeStringsSeq)



* 串行识别二维码信息,循环识别3次
count_seconds (T1)
for L := 1 to Loops by 1
    find_qr_codes (Image, QrCodeXldsSeq, QrCodeModel, QrCodeHandlesSeq, QrCodeStringsSeq)
    find_ecc200_codes (Image, Ecc200Xlds, Ecc200Model, Ecc200Handles, Ecc200Strings)
    find_bar_codes (Image, BarCodeRegions, BarCodeModel, BarCodeStrings)
endfor
count_seconds (T2)
*串行操作花费的时间
TimeSeq := 1000.0 * (T2 - T1) / Loops
 

* 并行识别二维码信息,循环识别3次
count_seconds (T1)
for L := 1 to Loops by 1
    par_start<ThreadQRCode> : find_qr_codes (Image, QrCodeXlds, QrCodeModel, QrCodeHandlesSeq, QrCodeStringsSeq)
    par_start<ThreadECC200> : find_ecc200_codes (Image, Ecc200Xlds, Ecc200Model, Ecc200Handles, Ecc200Strings)
    par_start<ThreadBarcode> : find_bar_codes (Image, BarCodeRegions, BarCodeModel, BarCodeStrings)
    * 等待3个线程执行完成
    par_join ([ThreadQRCode,ThreadECC200,ThreadBarcode])
endfor
count_seconds (T2)
*并行操作花费的时间
TimePar := 1000.0 * (T2 - T1) / Loops



* 计算并行相对串行速度提升了多少
Speedup := 100 * ((TimeSeq / TimePar) - 1)

* 显示识别到的二维码区域
dev_set_draw ('margin')
dev_set_line_width (4)
dev_set_color ('yellow')
dev_display (QrCodeXlds)
dev_set_color ('green')
dev_display (Ecc200Xlds)
dev_set_color ('cyan')
dev_display (BarCodeRegions)
Color := ['forest green','red']
disp_message (WindowHandle, 'Multithreading speedup: ' + Speedup$'.2f' + '%', 'window', 42, 12, Color[Speedup < 1], 'true')

*删除各自条码模版并释放分配内存
clear_bar_code_model (BarCodeModel)
clear_data_code_2d_model (Ecc200Model)
clear_data_code_2d_model (QrCodeModel)

运行速度提升88.5%
在这里插入图片描述

  • 3
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: Halcon可以通过多线程并行读取QR二维码QR二维码是一种常用的图像编码标准,用于存储大量数据,而Halcon是一款强大的图像处理软件,可以对图片中的QR二维码进行识别。 在Halcon中,可以通过使用多线程的方法提高对图片中QR二维码的识别速度。多线程是指同时运行多个线程,每个线程都可以独立执行任务,从而实现并行处理。在读取QR二维码的过程中,可以将图像划分为多个区域,每个线程负责处理一个区域的图像,从而实现并行读取的效果。 具体实现多线程并行读取QR二维码的方法如下: 1. 载入图像并将其分为多个区域。可以根据需要将图像切割成不同大小的区域,每个区域由一个线程进行处理。 2. 使用Halcon提供的QR二维码识别函数对每个区域的图像进行识别,获取二维码的信息。 3. 将每个线程读取到的二维码信息进行整合,得到最终的结果。 通过多线程并行读取,可以充分利用计算机的多核心处理能力,提高QR二维码的识别速度,从而提高整体的处理效率。同时,根据不同的系统和硬件环境,可以调整并行读取的线程数量,以达到最佳的读取速度和效果。 总结起来,Halcon可以通过多线程并行读取QR二维码,以提高识别速度和处理效率。这种方法可以将图像划分为多个区域,每个线程独立处理一个区域的图像,最后将结果整合得到最终的二维码信息。 ### 回答2: Halcon是一款图像处理软件,支持多线程并行处理。要实现多线程并行读取QR二维码,可以按照以下步骤进行: 1. 导入Halcon库:首先,将Halcon库导入到你的项目中。你可以在Halcon官方网站下载并安装该软件,并将其集成到你的开发环境中。 2. 多线程管理:使用多线程库或框架,比如C++的标准线程库,来管理多线程并行读取QR二维码的任务。你可以创建多个线程来同时处理多个图像或图像序列。 3. 图像读取:通过编程语言提供的图像读取接口,将需要读取QR二维码的图像加载到内存中。 4. 并行处理:将每个线程分配到不同的图像,使其同时读取QR二维码。可以使用Halcon提供的QR二维码识别算法,对图像进行处理。 5. 结果汇总:每个线程完成QR二维码读取后,将结果汇总到一起。你可以选择将结果保存到文件中、输出到屏幕上或通过其他方式展示。 需要注意的是,多线程并行读取QR二维码可能会导致性能上的提升,但也可能会带来一些线程同步和资源竞争的问题。因此,在实现多线程并行读取QR二维码时,要注意线程之间的同步和互斥,确保数据的一致性和正确性。 总之,通过利用Halcon多线程支持和QR二维码识别算法,你可以实现高效并行读取QR二维码的任务。 ### 回答3: Halcon作为一款图像处理的软件,可以用于读取二维码。在多线程并行读取二维码方面,可以使用Halcon提供的多线程支持来实现。 首先,我们需要创建多个线程,每个线程都负责读取一个二维码,以实现并行读取的效果。可以使用Halcon提供的接口函数来创建线程,并分配每个线程需要处理的二维码图像。 在每个线程中,我们可以使用Halcon提供的二维码读取函数来读取二维码信息。这些函数可以解码二维码图像,并提取出二维码的内容。 读取完成后,可以将二维码的内容保存到一个共享的数据结构中,以供其他线程使用或者进行后续处理。在保存数据的过程中,需要注意线程之间的数据同步和互斥,以防止数据错误或冲突。 当所有线程完成二维码读取后,我们可以对读取到的二维码内容进行后续的处理,比如进行数据库的查询或者其他操作。 需要注意的是,在多线程并行读取二维码的过程中,需要合理地控制线程的数量,避免过多线程造成资源的浪费或者性能下降。同时,也需要进行线程安全的设计,保证数据的正确性和一致性。 总结来说,利用Halcon多线程支持,我们可以实现多线程并行读取二维码的功能。通过合理的线程设计和数据同步机制,可以提高读取速度和效率,以满足实际应用的需求。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值