一维码、二维码在生活中经常看到,如下图:
现在就开始用halcon做个实时采集识别吧!
- 一维码识别
点击助手打开新的Image Acquisition,然后检查相机连接设备和设置参数后插入代码,代码如下:
open_framegrabber ('DirectShow', 1, 1, 0, 0, 0, 0, 'default', 8, 'rgb', -1, 'false', 'default', '[1] ', 0, -1, AcqHandle)
grab_image_start (AcqHandle, -1)
while (true)
grab_image_async (Image, AcqHandle, -1)
endwhile
close_framegrabber (AcqHandle)
上述是图像实时采集代码,接下来做的是创建一维码模型、识别模型、显示识别结果。第一步,创建一维码模型,即在启动图像采集代码(grab_image_start (AcqHandle, -1))下插入。代码如下:
create_bar_code_model ([], [], BarCodeHandle)
dev_close_window ()
dev_open_window (0, 0, 512, 512, 'black', WindowHandle)
dev_set_draw ('margin') //设置区域填充模式为边缘
dev_set_line_width (1) //定义区域轮廓输出的线宽。
create_bar_code_model算子为创建一维码模型,最后一个参数为模型句柄,在识别模型时用到该模型句柄,不然就找不到创建的模型。dev_set_draw 算子和dev_set_line_width算子是设置一个矩形框,这样就能将采集到的一维码框起来。
第二步,识别一维码模型,即在循环代码中插入代码。代码如下:
set_bar_code_param (BarCodeHandle, 'element_size_min', 8)
find_bar_code (Image, SymbolRegions, BarCodeHandle, 'auto', DecodedDataStrings)
set_bar_code_param算子为设置一维码模型参数,这里设置为element_size_min,即基本条形码元素的最小尺寸,此设置激活参数’element_size_min的训练模式,低于该值=8,将检测不到一维码模型。
find_bar_code算子为查找一维码模型,参数auto为自动检测模型。
第三步,显示结果,在识别模型下插入代码,代码如下:
dev_set_color ('green')
dev_display (Image)
disp_message (WindowHandle, DecodedDataStrings, 'window', 12, 12, 'black', 'true')
dev_set_color算子为设置输出颜色,这里设置为绿色。 dev_display 算子为显示采集图像。 disp_message算子为显示文本消息,参数DecodedDataStrings为解码的内容,在查找模型算子里已经解码,参数black为显示文本的颜色,设置为黑色。
最后一步,清空模型,在程序的最后插入代码,代码如下:
clear_bar_code_model (BarCodeHandle)
至此完成实时识别一维码的要求。
- 二维码识别
其步骤与一维码类似,这里就不重复。不同的是创建二维码模型的算子create_data_code_2d_model与查找二维码模型的算子 find_data_code_2d,完整代码如下:
open_framegrabber ('DirectShow', 1, 1, 0, 0, 0, 0, 'default', 8, 'rgb', -1, 'false', 'default', '[1] ', 0, -1, AcqHandle)
grab_image_start (AcqHandle, -1)
*创建二维码模型
create_data_code_2d_model ('Data Matrix ECC 200', [], [], DataCodeHandle)
dev_close_window ()
dev_open_window (0, 0, 512, 512, 'black', WindowHandle)
dev_set_draw ('margin') //设置边缘
dev_set_line_width (1) //设置线宽
while (true)
grab_image_async (Image, AcqHandle, -1)
*寻找模型
find_data_code_2d (Image, SymbolXLDs, DataCodeHandle, [], [], ResultHandles, DecodedDataStrings)
get_image_size (Image, Width, Height)
*显示
dev_set_color ('blue')
dev_display (Image)
disp_message (WindowHandle, DecodedDataStrings, 'window', 12, 12, 'black', 'true')
endwhile
close_framegrabber (AcqHandle)
clear_data_code_2d_model (DataCodeHandle)