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

news/2025/3/17 16:25:46/文章来源:https://www.cnblogs.com/DOMLX/p/18777081

 

原文作者:aircraft

原文链接:https://www.cnblogs.com/DOMLX/p/18777081

   

 

 

深度学习教程目录如下,还在继续更新完善中

深度学习系列教程目录

 

 

本篇非常简单,但是非常好用的OCR识别,传统的OCR识别方法一大堆各种各样的操作,麻烦的要死。halcon 22版本开始支持深度学习OCR,并且已经提供了训练好的模型,识别率基本可以达到99以上,工业上的一些产品编码,镭克码都可以直接使用。

 

因为使用比较简单这边直接演示,需要具体看的话可以看一下halcon自带的实例deep_ocr_workflow.hdev

 

一.代码

 省去那些七七八八的预处理,深度学习的OCR其实就是4行代码就可以搞定了:

 

*深度学习OCR 主要就是
*1.create_deep_ocr创建模型--
*2.set_deep_ocr_param设置某些参数:诸如宽度,高度,字母大小面积等等参数来帮助识别
*3.apply_deep_ocr进行检测--
*4.get_dict_tuple获取检测的结果,然后把这个结果在处理一下就行了
*

 

这边就是主要读取一张图,然后传入OCR检测模型直接得到结果

1.读取图片(图片可以直接截图,或者下载了拿去用)

2.框选ROI区域

 3.得到检测结果显示

 

 

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 主要就是
*1.create_deep_ocr创建模型--
*2.set_deep_ocr_param设置某些参数:诸如宽度,高度,字母大小面积等等参数来帮助识别
*3.apply_deep_ocr进行检测--
*4.get_dict_tuple获取检测的结果,然后把这个结果在处理一下就行了
*
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)

 

set_deep_ocr_param 参数这里可以多辅助一下参数来帮助自己识别检测:
1.detection_image_width,detection_image_height检测区域的宽度,高度
2.detection_min_character_score 最小可容忍的字符识别的分数,就比如你定位一个模板会给出定位的分数1为百分之百匹配,越接近0匹配度越低
3.detection_min_link_score 最小连接分数,这个就关系到字符间距了
4.detection_min_word_area 最小字符面积
5.recognition_num_char_candidates 字符个数
等等,这些参数的设置都可以提高识别的准确率,具体可以看算子里的参数表,不过前提是传进来检测的图片字符已经经过了预处理,先预处理让字符更好的识别,在传入会得到更优秀的准确率。

 

 

这里稍微补充一下:

1.就是工业上使用这个OCR识别的一般要跟定位一起,如果你传入的OCR字符都是固定位置就可以直接固定的裁剪,如果是复杂情况的话还需要先分割,如果有不变得模板区域的话,也可以创建个模板匹配,然后基于这个模板的位置反射变换区域的位置过去将字符区域裁剪下来进行识别。

2.得到结果后也许结果里字符需要大小写,或者多出一些干扰,这时候你就可以把那个字符串后期再处理一下,比如里面都是小写的你都改为大写,比如1和i可能识别错误,结合

你的产品看看是否是没有i或者没有1直接遇到就替换,还有0和字符o也是类似的思路。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/900430.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[ SpringMVC ] SpringMVC如何通过是否有@RestController注解来判断返回ModelAndView还是Json

引言之前在面试的遇到面试官问我SpringMVC的执行流程,我那时候回答的是SpringMVC的DispatcherServlet的dodispatch方法找到ControllerMethod之后将返回值通过convert成Json返回响应体,事后想了一下回答的其实并不正确,因为SpringMVC之前学习的时候有使用ModelAndView返回视图,我…

从HR+AI到AI+HR,企业人力资源AI进程已过半

一、人力资源管理智能化应势而上,核心价值受企业管理层肯定 过往各项研究表明,AI 已经被广泛应用于企业经营的各个环节中。根据易路于2023 年发布的《AI 在企业人力资源中的应用白皮书1.0》(以下简称《白皮书1.0》),我们可以明确感受到:AI 已不同程度应用于招聘管理、员工…

multi-object tracking in the dark

创新点:构建LMOT数据集:开发了一种双摄像头系统,同步采集明暗视频帧,形成高度对齐的低光视频对,并提供高质量的多目标跟踪标注。该数据集包含大量城市户外场景视频,涵盖多种动态物体,为模型训练和评估提供了丰富的数据支持。 提出LTrack方法:引入自适应低通下采样模块(…

LGP11831_1 [UPTS 2025] 追忆 学习笔记

LGP11831_1 [UPTS 2025] 追忆 学习笔记 Luogu Link 前言 又幻想了……唉! 幻想自己场切这道题,最后标准分上升至 \(\text{598pts}\),翻掉了 \(\text{yyz}\),不至于一点脸不要。 本题解基本借鉴这篇题解。 题意简述 给定一个 \(n\) 点 \(m\) 边的简单有向图 \(G\),有 \(m\)…

sql 在两个数据表中,A表存在字段以逗号分隔存储B表的多id对象,进行关联查询

A 表:B表:关联查询 需求为,查询出A表的数据列表,需要将A表关联B表的数据id,概要通过B表的 name 进行输出显示 SELECT A.id,A.name,A.creator,A.created_at,GROUP_CONCAT(B.name SEPARATOR , ) AS B_names -- 将 c_name 合并为逗号分隔的字符串 FROM xf_service_type A LE…

算力市场何以拥有巨大潜力

算力市场未来确实具有巨大的潜力,这一判断基于多个方面的因素: 一、算力成为经济增长的主要驱动力 随着全球数字化转型的迅猛推进,算力已成为推动经济增长的关键引擎。各国纷纷加大在算力基础设施方面的投入,以期为经济发展注入新的活力。例如,欧盟委员会批准了一项名为“…

算法备案拟公示内容编写指南

除了自评估报告,算法备案复审中的拟公示内容也是难度颇大的一份材料,导致很多开发者的算法备案申请被驳回。今天我就提供一份简易模板供大家学习参考(请结合实际情况撰写,不要照抄,不要买模板,否则会判定真实性存疑或高度雷同,影响备案)。(各类文件套模板都会判定该真…

CH585 RF_Basic例程讲解含单向和双向发送

CH585_RF基础通讯例程见下图路径:1、RF初始化参数配置/******************************************************************************** @fn RFRole_Init** @brief RF应用层初始化** @param None.** @return None.*/ void RFRole_Init(void) {rfTaskID = TMOS_…

uniapp整合SQLite(Android)

一、勾选SQLite数据库选项 (1)HBuilder工具打开项目 (2)项目/manifest.json =>App模块配置 => 勾选SQLite(数据库)二、封装sqlite.ts 在项目根目录下创建sqlite/sqlite.ts// 数据库名称 const dbName = scan/*** 数据库地址* @type {String} 推荐以下划线为开头 _d…

No.68 Vue---vue3新特性

一、vue3新特性 1.1 六大亮点二、组合API(setup)2.1 ref或者reactive 1、创建项目 vue create vue-demo5 2、进入文件,启动服务。 3、 2.2 methods中定义的方法写在setup() 2.3setup()中使用props和context 在2.x中,组件的方法中可以通过this获取到当前组件的实例,并执…

2025年2月国产数据库大事记-墨天轮

​本文为墨天轮社区整理的2025年2月国产数据库大事件和重要产品发布消息,一起看看2月有哪些大事发生~本文为墨天轮社区整理的2025年2月国产数据库大事件和重要产品发布消息。 目录2025年2月国产数据库大事记 TOP10 2025年2月国产数据库大事记(时间线) 产品/版本发布 兼容认证…