欢迎光临
我们一直在努力

Halcon小案例--->一维条形码识别、识别图像中E开头的字符信息

一维条形码识别:

编写代码

•创建一维条形码识别模型:create_bar_code_model ()
•设置一维条形码识别模型的参数:set_bar_code_param()
•在图像中查找并识别一维条形码:find_bar_code()
•获取一维条形码识别的详细结果:get_bar_code_result()

*// 一维条形码识别
*// 获取窗体句柄
dev_get_window (WindowHandle)

*// 1.创建一维条形码识别模型
create_bar_code_model ([], [], BarCodeHandle)

*// 2.给一维条形码模型添加参数
*// 设置识别框的宽高
set_bar_code_param (BarCodeHandle, 'barcode_width_min', 300)
set_bar_code_param (BarCodeHandle, 'barcode_height_min', 60)
*// 设置区域填充模式
dev_set_draw ('margin')
*// 设置字体样式
set_display_font (WindowHandle, 16, 'mono', 'true', 'false')

*// 3.加载识别图像
list_files ('D:/ChuanDingZN/全部学习记录/新/Halcon/day09/一维条形码', ['files','follow_links'], ImageFiles)
tuple_regexp_select (ImageFiles, ['\\\\.(tif|tiff|gif|bmp|jpg|jpeg|jp2|png|pcx|pgm|ppm|pbm|xwd|ima|hobj)$','ignore_case'], ImageFiles)
for Index := 0 to |ImageFiles| – 1 by 1
read_image (Image, ImageFiles[Index])
*// 4.识别一维条形码
find_bar_code (Image, SymbolRegions, BarCodeHandle, 'auto', DecodedDataStrings)
*// 5.显示一维条形码的结果
get_bar_code_result (BarCodeHandle, 'all', 'decoded_types', BarCodeResults)
*// 6.展示
*// 获取区域中心坐标
area_center (SymbolRegions, Area, Row, Column)
*// 文本
disp_message (WindowHandle, '内容: '+DecodedDataStrings+',类型: '+BarCodeResults, 'image', Row+60, Column-19, 'green','false')
*// 停止
stop ()
endfor
*// 7.清除一维条形码句柄
clear_bar_code_model (BarCodeHandle)

效果演示

一维条形码识别-02:

编写代码

•查询图形窗口支持的字体列表:query_font()
•设置图形窗口的字体样式:set_font()
•清除一维条形码句柄:clear_bar_code_model()

*// 一维条形码识别-02
*// 获取窗体句柄
dev_get_window (WindowHandle)

*// 1.创建一维条形码识别模型
create_bar_code_model ([], [], BarCodeHandle)

*// 2.给一维条形码模型添加参数
*// 设置识别框的宽高
set_bar_code_param (BarCodeHandle, 'barcode_width_min', 400)
set_bar_code_param (BarCodeHandle, 'barcode_height_min', 20)
*// 设置字体样式
query_font (WindowHandle, Font)
set_font (WindowHandle, Font[0]+'-Bold-18')
*set_display_font (WindowHandle, 16, 'mono', 'true', 'false')
*// 设置区域填充模式
dev_set_draw ('margin')

*// 3.加载识别图像

* Image Acquisition 01: Code generated by Image Acquisition 01
list_files ('D:/ChuanDingZN/全部学习记录/新/Halcon/day09/一维条形码2', ['files','follow_links'], ImageFiles)
tuple_regexp_select (ImageFiles, ['\\\\.(tif|tiff|gif|bmp|jpg|jpeg|jp2|png|pcx|pgm|ppm|pbm|xwd|ima|hobj)$','ignore_case'], ImageFiles)
for Index := 0 to |ImageFiles| – 1 by 1
read_image (Image, ImageFiles[Index])
*// 4.识别一维条形码
find_bar_code (Image, SymbolRegions, BarCodeHandle, 'auto', DecodedDataStrings)
*// 5.显示一维条形码的结果
get_bar_code_result (BarCodeHandle, 'all', 'decoded_types', BarCodeResults)
*// 6.展示
*// 获取区域中心坐标
area_center (SymbolRegions, Area, Row, Column)
*// 文本
disp_message (WindowHandle,'内容: '+ DecodedDataStrings+',类型: '+BarCodeResults, 'image', Row+40, Column-210, 'green', 'false')
*// 停止
stop ()
endfor
*// 7.清除一维条形码句柄
clear_bar_code_model (BarCodeHandle)

效果演示

识别图像中E开头的字符信息:

编写代码

•关闭开发窗口自动更新:dev_update_off ()
•读取基于多层感知器(MLP)的 OCR 分类器:read_ocr_class_mlp()
•对多个字符区域执OCR 分类识别:do_ocr_multi_class_mlp ()
•释放字符识别句柄:clear_ocr_class_mlp()

*// 识别图像中E开头的字符信息
*// 关闭开发窗口自动更新
dev_update_off ()
*// 加载模板图像
read_image (Image, 'D:/ChuanDingZN/全部学习记录/新/Halcon/day09/字符提取/字符读取/1.bmp')
*// 显示图像
dev_display (Image)
*// 获取图像大小
get_image_size (Image, Width, Height)
*// 获取窗体句柄
dev_get_window (WindowHandle)
*// 填充方式
dev_set_draw ('margin')
*// 设置展示颜色
dev_set_color ('green')

*********************模板匹配初始化
*// 先绘制ROI
draw_rectangle2 (WindowHandle, Row, Column, Phi, Length1, Length2)
*// 显示ROI
gen_rectangle2 (Rectangle, Row, Column, Phi, Length1, Length2)
*// 抠图
reduce_domain (Image, Rectangle, ImageReduced)
*// 创建刚性模板
create_shape_model (ImageReduced, 'auto',rad(0), rad(360), 0.0175, 'auto', 'use_polarity', 'auto', 'auto', ModelID)
*// 获取模板轮廓
get_shape_model_contours (ModelContours, ModelID, 1)
*// 查找模板–原图
find_shape_model (Image, ModelID, rad(0), rad(360), 0.8, 1, 0.5, 'least_squares', 0, 0.9, Row1, Column1, Angle, Score)
*// 仿射变换–计算仿射变换矩阵–只能对单个值起作用
vector_angle_to_rigid (0, 0, 0, Row1, Column1, Angle, HomMat2D)
*// 执行仿射变换–仿射变换的是边缘轮廓
affine_trans_contour_xld (ModelContours, ContoursAffineTrans, HomMat2D)
*// 绘制一个跟随矩形–识别字符矩形框
draw_rectangle2 (WindowHandle, Row2, Column2, Phi1, Length11, Length21)
*// 显示ROI
gen_rectangle2 (Rectangle1, Row2, Column2, Phi1, Length11, Length21)
*// 停止显示
stop ()
*// 抠图
reduce_domain (Image, Rectangle1, ImageReduced1)
*// 展示区域结果
dev_display (ImageReduced1)
dev_display (ModelContours)
dev_display (Rectangle1)

*********************添加所有的检测图像
*// 添加所有的检测图像
list_files ('D:/ChuanDingZN/全部学习记录/新/Halcon/day09/字符提取/字符读取', ['files','follow_links'], ImageFiles)
tuple_regexp_select (ImageFiles, ['\\\\.(tif|tiff|gif|bmp|jpg|jpeg|jp2|png|pcx|pgm|ppm|pbm|xwd|ima|hobj)$','ignore_case'], ImageFiles)
for Index := 0 to |ImageFiles| – 1 by 1
read_image (TestImage, ImageFiles[Index])
*// 查找模板
find_shape_model (TestImage, ModelID, rad(0), rad(360), 0.8, 0, 0.5, 'least_squares', 0, 0.9, Row3, Column3, Angle1, Score1)
*// 判断是否匹配到对应的模板
if (|Row3|>0)
*// 至少匹配到一个模板,匹配到几个特征就循环几次
for r := 0 to |Row3|-1 by 1
*// 计算仿射变换矩阵
vector_angle_to_rigid (Row1, Column1, Angle, Row3[r], Column3[r], Angle1[r], HomMat2D1)
*// 执行仿射变换矩阵 Rectangle1跟随的矩形框
affine_trans_region (Rectangle1, RegionAffineTrans, HomMat2D1, 'nearest_neighbor')
*// 抠图
reduce_domain (TestImage, RegionAffineTrans, ImageReduced2)
*// 识别字符
*// 通过阈值分割
binary_threshold (ImageReduced2, OCR_Region, 'max_separability', 'dark', UsedThreshold)
*// 连通性分析
connection (OCR_Region, ConnectedRegions)
*// 排序
sort_region (ConnectedRegions, SortedRegions, 'character', 'true', 'row')
*// 读取基于多层感知器(MLP)的 OCR 分类器
read_ocr_class_mlp ('Industrial_0-9A-Z_NoRej.omc', OCRHandle)
*// 执行字符识别
do_ocr_multi_class_mlp (SortedRegions, ImageReduced2, OCRHandle, Class, Confidence)
*// 释放字符识别句柄
clear_ocr_class_mlp (OCRHandle)
*// 显示字符内容
*// 形状转换
shape_trans (SortedRegions, RegionTrans, 'rectangle1')
*// 获取面积和中心点
area_center (RegionTrans, Area, Row4, Column4)
*// 文本显示
disp_message (WindowHandle, Class, 'image', Row4+40, Column4, 'red', 'false')
endfor
endif
endfor

效果演示

希望对大家有所帮助, 感谢大家的关注和点赞。

赞(0)
未经允许不得转载:171主机测评 » Halcon小案例--->一维条形码识别、识别图像中E开头的字符信息
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址