halcon字符识别---英文或数字

本文介绍了使用Halcon进行OCR字符识别的方法,包括白纸黑字、黑纸白字反置及非水平字符旋转场景。重点强调了模型选择、图像预处理和背景要求,提供了解决常见识别错误的策略。对于汉字和其他特殊字符,需要自行训练模型。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、白纸黑字直接识别

  halcon中有字符识别的案例,是可以直接读取本地模型进行ocr识别的,需要注意的是模型的选择以及识别的条件。这里我直接精简一个简单的demo写在下边,代码可以直接调用,需要注意的事,这里的模型我选择的是数字’Industrial_0-9_NoRej.omc,一般在用的这么多情况下,Industrial_我感觉是最好用的,这里只用到数字,所以选择0_9。
输入的图片

dev_close_window ()
dev_open_window (0, 0, 512, 512, 'black', WindowHandle)

*读取图片
read_image (Image, '125.bmp')
*彩色转灰度图
rgb1_to_gray (Image, GrayImage)
threshold (GrayImage, Region, 0, 100)

*连通域处理
connection (Region, ConnectedRegions)

*排序 按照列
sort_region (ConnectedRegions, SortedRegions, 'first_point', 'true', 'column')

*读取ocr模型 内置训练好的
read_ocr_class_mlp ('Industrial_0-9_NoRej.omc', OCRHandle)

*字符识别
do_ocr_multi_class_mlp (SortedRegions, GrayImage, OCRHandle, Class, Confidence)

*显示结果
disp_message (WindowHandle, Class, 'window', 12, 12, 'black', 'true')

  在以上例子中需要注意几点,第一点就是halcon的这个ocr字符识别,他是针对区域而言的,也就是需要先进行阈值分割,有了区域,再配上图片,那就能够识别;第二点就是这个图片,很多同学在自己做的时候,发现识别错误,这种情况下往往是图片的问题,halcon中的训练是白纸黑字形成的,如果你的背景图是白色,字符是黑色,那用上边的直接去做自然没有问题,但是如果是黑纸白字,这个时候就会出现问题?遇到这种情况怎么办呢?我们可以自己将图片反置。

2、黑纸白字反置识别

黑纸白字

dev_close_window ()
dev_open_window (0, 0, 512, 512, 'black', WindowHandle)

*读取图片
read_image (Image, '125_hei.bmp')
*彩色转灰度图
rgb1_to_gray (Image, GrayImage)

*加上图像取反
invert_image (GrayImage, GrayImage)

threshold (GrayImage, Region, 0, 100)

*连通域处理
connection (Region, ConnectedRegions)

*排序 按照列
sort_region (ConnectedRegions, SortedRegions, 'first_point', 'true', 'column')

*读取ocr模型 内置训练好的
read_ocr_class_mlp ('Industrial_0-9_NoRej.omc', OCRHandle)

*字符识别
do_ocr_multi_class_mlp (SortedRegions, GrayImage, OCRHandle, Class, Confidence)

*显示结果
disp_message (WindowHandle, Class, 'window', 12, 12, 'black', 'true')

  除此之外,halcon有背景颜色的要求外,还要求字符是水平的,也就是如果你的字符是弯曲的情况下,也是会识别错误的,遇到这种情况,需要对背景图以及字符进行旋转。

3、非水平字符旋转识别

旋转字符

dev_close_window ()
dev_open_window (0, 0, 512, 512, 'black', WindowHandle)

*读取图片
read_image (Image, '125_affine.bmp')
*彩色转灰度图
rgb1_to_gray (Image, GrayImage)

*阈值分割
threshold (GrayImage, Region, 0, 100)

*获取整体外接矩形 角度
smallest_rectangle2 (Region, Row, Column, Phi, Length1, Length2)

*计算将该角度转到水平的旋转矩阵
vector_angle_to_rigid (Row, Column, -Phi, Row, Column, 0, HomMat2D)

*对图像执行旋转
affine_trans_image (GrayImage, ImageAffineTrans, HomMat2D, 'constant', 'false')

*对区域执行旋转
affine_trans_region (Region, RegionAffineTrans, HomMat2D, 'nearest_neighbor')

*连通域处理
connection (RegionAffineTrans, ConnectedRegions)

*排序 按照列
sort_region (ConnectedRegions, SortedRegions, 'first_point', 'true', 'column')

*读取ocr模型 内置训练好的
read_ocr_class_mlp ('Industrial_0-9_NoRej.omc', OCRHandle)

*字符识别  这个地方替换成旋转后的奥ImageAffineTrans
do_ocr_multi_class_mlp (SortedRegions, ImageAffineTrans, OCRHandle, Class, Confidence)

*显示结果
disp_message (WindowHandle, Class, 'window', 12, 12, 'black', 'true')

4、总结

  以上三种情况是在自己使用ocr的过程中常遇到的几种识别错误的原因,上边我是用的数字做的识别,至于英文是一样的,当使用英文的时候记得选用Industrial_A-Z+_NoRej.omc模型,当既有英文也有数字时候,选用Industrial_0-9A-Z_NoRej.omc模型。
  需要注意的是,halcon内置的模型中,只有针对数字与英文的,至于汉字是没有内置模型的,需要自己训练,当然对于一些奇怪的数字与英文,也是需要自己训练的。训练并不麻烦,后边我会写一下如何训练。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值