找回密码
 立即注册
首页 业界区 安全 halcon 深度学习教程(二)halcon基于深度学习的OCR检测 ...

halcon 深度学习教程(二)halcon基于深度学习的OCR检测

章绮云 2025-5-30 10:20:57
 
原文作者:aircraft
原文链接:https://www.cnblogs.com/DOMLX/p/18777081
   
 
 
深度学习教程目录如下,还在继续更新完善中
深度学习系列教程目录
 
 
 有兴趣可以多看其他的halcon教程
 halcon 学习教程目录
 
本篇非常简单,但是非常好用的OCR识别,传统的OCR识别方法一大堆各种各样的操作,麻烦的要死。halcon 22版本开始支持深度学习OCR,并且已经提供了训练好的模型,识别率基本可以达到99以上,工业上的一些产品编码,镭克码都可以直接使用。像这个OCR识别,你要是在配合一下我的另外一个深度学习目标检测教程,目标检测专门去定位车牌位置,或者要识别的数字,字母区域位置。直接就是个完美的停车场的车牌识别系统,或者图片中的文字识别系统之类的----然后如果有需要特定的halcon的模型文件直接去实例程序里存放路径去找,一般都是在界面的最上面会写这个实例程序在哪。
 
因为使用比较简单这边直接演示,需要具体看的话可以看一下halcon自带的实例deep_ocr_workflow.hdev
1.png

 
一.代码
 省去那些七七八八的预处理,深度学习的OCR其实就是4行代码就可以搞定了:
 
  1. *深度学习OCR 主要就是
  2. *1.create_deep_ocr创建模型--
  3. *2.set_deep_ocr_param设置某些参数:诸如宽度,高度,字母大小面积等等参数来帮助识别
  4. *3.apply_deep_ocr进行检测--
  5. *4.get_dict_tuple获取检测的结果,然后把这个结果在处理一下就行了
  6. *
复制代码
 
这边就是主要读取一张图,然后传入OCR检测模型直接得到结果
1.读取图片(图片可以直接截图,或者下载了拿去用)
2.png

2.框选ROI区域
3.png

 3.得到检测结果显示
4.png

 
 
  1. dev_clear_window ()dev_close_window ()dev_open_window (0, 0, 500, 300, 'green', WindowHandle)* 获取显示窗口的句柄dev_get_window (WindowHandle)* 设置文字的字体和大小set_font (WindowHandle, 'Courier New-Bold-' + round(26))**深度学习OCR 主要就是
  2. *1.create_deep_ocr创建模型--
  3. *2.set_deep_ocr_param设置某些参数:诸如宽度,高度,字母大小面积等等参数来帮助识别
  4. *3.apply_deep_ocr进行检测--
  5. *4.get_dict_tuple获取检测的结果,然后把这个结果在处理一下就行了
  6. *create_deep_ocr ('mode', 'recognition', DeepOcrHandle)*默认使用的是GPU,没有GPU的设置一下CPU运行环境query_available_dl_devices ('runtime', 'cpu', DLDeviceHandles)set_deep_ocr_param (DeepOcrHandle, 'device', DLDeviceHandles)*读取一张带字符的图read_image (Image, '1.png')*框选一下检测的范围区域draw_rectangle1 (WindowHandle, Row1, Column1, Row2, Column2)*将区域裁剪下来传入检测crop_rectangle1 (Image, ImagePart, Row1, Column1, Row2, Column2)width:=int(Column2-Column1)* 设置宽度,高度之类的一些可以辅助增强识别的参数set_deep_ocr_param (DeepOcrHandle, 'recognition_image_width', width)*进行深度OCP检测apply_deep_ocr (ImagePart, DeepOcrHandle, 'recognition', DeepOcrResult)*获取检测结果get_dict_tuple (DeepOcrResult, 'word', words)*打印检测结果write_string (WindowHandle, words)
复制代码
 
  1. set_deep_ocr_param 参数这里可以多辅助一下参数来帮助自己识别检测:<br>1.detection_image_width,detection_image_height检测区域的宽度,高度<br>2.detection_min_character_score 最小可容忍的字符识别的分数,就比如你定位一个模板会给出定位的分数1为百分之百匹配,越接近0匹配度越低<br>3.detection_min_link_score 最小连接分数,这个就关系到字符间距了<br>4.detection_min_word_area  最小字符面积<br>5.recognition_num_char_candidates 字符个数<br>等等,这些参数的设置都可以提高识别的准确率,具体可以看算子里的参数表,不过前提是传进来检测的图片字符已经经过了预处理,先预处理让字符更好的识别,在传入会得到更优秀的准确率。
复制代码
 
 
这里稍微补充一下:
1.就是工业上使用这个OCR识别的一般要跟定位一起,如果你传入的OCR字符都是固定位置就可以直接固定的裁剪,如果是复杂情况的话还需要先分割,如果有不变得模板区域的话,也可以创建个模板匹配,然后基于这个模板的位置反射变换区域的位置过去将字符区域裁剪下来进行识别。
2.得到结果后也许结果里字符需要大小写,或者多出一些干扰,这时候你就可以把那个字符串后期再处理一下,比如里面都是小写的你都改为大写,比如1和i可能识别错误,结合
你的产品看看是否是没有i或者没有1直接遇到就替换,还有0和字符o也是类似的思路。
 
 
 
 
 
最后的最后,在学习的道路上,望与诸君共勉

来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
您需要登录后才可以回帖 登录 | 立即注册