【OCR项目】之用HALCON的深度学习工具进行文字识别,并导出到C++调用

这篇具有很好参考价值的文章主要介绍了【OCR项目】之用HALCON的深度学习工具进行文字识别,并导出到C++调用。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

HALCON是一个强大的机器视觉工具,包含了2D,3D图像各种算子,以及各种任务的深度学习工具,包括目标检测,实例分割,文字识别等。

这次从实际生产的角度,来分享一下如何用HALCON进行文字识别。

衡量一个技术是否能在实际工业生产使用,要考虑的因素:

  • 最重要的一点,精度要高且稳定。在复杂的工业场景,需要能稳定的做到非常高的精度,而不是像简单的示例程序或者学生作品一样,只是学习和展示使用。这点HALCON的深度学习OCR可以满足大部分普通的工业场景。
    • 这里有一个细节,HALCON的版本越高,理论上提供的模型结构要越先进,预训练模型精度也越高。这里使用的是22.05的版本。
  • 速度要快。HALCON做深度学习OCR即使使用CPU进行识别,速度也非常快。
  • 需要能整合到实际开发的软件工程里。HALCON支持导出成C++,只需要少量的调整。

HALCON代码

【OCR项目】之用HALCON的深度学习工具进行文字识别,并导出到C++调用,HALCON机器视觉实战,ocr,深度学习,人工智能,halcon,计算机视觉,c++

HALCON的OCR和现在主流的字符识别任务一样,分成两阶段任务。

  • 文本检测Detection,识别出文本行的位置。
  • 文本识别Recognition,把Detection任务检测出来的文本行抠出来进行识别。

并且HALCON支持像上面图片这样倾斜的文字,下面是简单的实现代码和逐行解释。

* 读取图片
read_image (Image, 'D:/Project/OCR_demo.jpg')
* 获取显示窗口的句柄
dev_get_window (WindowHandle)
* 设置文字的字体和大小
set_font (WindowHandle, 'Courier New-Bold-' + round(26))
* 创建OCR识别句柄
create_deep_ocr ('mode', 'auto', DeepOcrHandle)
* 创建CPU/GPU设备句柄
query_available_dl_devices ('runtime', 'cpu', DLDeviceHandle)
* 设置OCR使用的设备
set_deep_ocr_param (DeepOcrHandle, 'device', DLDeviceHandle)

* 记录开始时间
count_seconds(StartTime)
* 执行OCR
apply_deep_ocr (Image, DeepOcrHandle, 'auto', DeepOcrResult)
* 记录结束时间
count_seconds(EndTime)
* 计算耗时
Duration := EndTime - StartTime
* 绘制文字
write_string (WindowHandle, '耗时'+Duration+'s')

* 获取结果
get_dict_tuple (DeepOcrResult, 'words', WordsRes)
* 获取文字区域的行坐标
get_dict_tuple (WordsRes, 'row', Rows)
* 获取文字区域的列坐标
get_dict_tuple (WordsRes, 'col', Cols)
* 获取文字区域的倾斜角度
get_dict_tuple (WordsRes, 'phi', Phis)
* 获取文字区域的矩形长边
get_dict_tuple (WordsRes, 'length1', Length1s)
* 获取文字区域的矩形短边
get_dict_tuple (WordsRes, 'length2', Length2s)
* 获取识别文字结果
get_dict_tuple (WordsRes, 'word', Words)
* 设置绘制模式为画轮廓
dev_set_draw('margin')
* 设置画线的宽度
dev_set_line_width (2)

for Index := 0 to |Rows|-1 by 1
    * 绘制带方向的矩形
    disp_rectangle2(WindowHandle, Rows[Index], Cols[Index], Phis[Index], Length1s[Index], Length2s[Index])
    * 设置文字的坐标
    set_tposition(WindowHandle, Rows[Index],  Cols[Index])
    * 绘制文字
    write_string (WindowHandle, Words[Index])
endfor

上面的代码运行结果如下,可以看到HALCON在CPU上的速度也是非常快的。

【OCR项目】之用HALCON的深度学习工具进行文字识别,并导出到C++调用,HALCON机器视觉实战,ocr,深度学习,人工智能,halcon,计算机视觉,c++

导出C++

HALCON导出到C++也非常方便,只需要点击

【文件】-【导出程序】

【OCR项目】之用HALCON的深度学习工具进行文字识别,并导出到C++调用,HALCON机器视觉实战,ocr,深度学习,人工智能,halcon,计算机视觉,c++

需要注意的点是,上面的HALCON代码虽然在HALCON里运行没有问题,但是直接导出C++运行是会报错的。

因为上面使用的是HALCON自带的模型,导出C++之后,程序里是不带有这个模型的。所以需要将自带的模型导出,然后设置成使用这个模型来进行识别。

使用以下HALCON代码进行模型导出

* 创建自带的OCR模型
create_deep_ocr ('mode', 'auto', DeepOcrHandle)
* 设置导出模型的路径
Filename := 'D:/model.hdo'
* 导出模型
write_deep_ocr (DeepOcrHandle, Filename)

然后把上面的识别代码从创建默认OCR识别模型句柄,改成读取指定的模型。

* 创建OCR识别句柄
* create_deep_ocr ('mode', 'auto', DeepOcrHandle)
* 读取指定的模型
read_deep_ocr ('D:/model.hdo', DeepOcrHandle)

再进行C++代码导出,就可以使用了。

在C++工程里调用也非常简单,只需要包含halcon.dll,halconcppdll,halcondl.dll即可。

案例

在实际项目中,如果文字足够清晰,预处理足够干净,文本定位足够准确的话,即使使用默认的模型也能达到非常高的精度。

比如下面的例子,通过内容区域提取,透视变换,文本检测,文本位置精细定位,背景分割过滤等手段,将文本区域精准提取出来之后,直接使用默认的模型也可以达到很好的效果。

【OCR项目】之用HALCON的深度学习工具进行文字识别,并导出到C++调用,HALCON机器视觉实战,ocr,深度学习,人工智能,halcon,计算机视觉,c++【OCR项目】之用HALCON的深度学习工具进行文字识别,并导出到C++调用,HALCON机器视觉实战,ocr,深度学习,人工智能,halcon,计算机视觉,c++

当然,在针对性的场景,通过标注对应的数据集,并在预训练模型的基础上进行针对性训练,可以达到一个更好的效果,这个步骤也很简单,后面机会再展开讲一下。文章来源地址https://www.toymoban.com/news/detail-815773.html

到了这里,关于【OCR项目】之用HALCON的深度学习工具进行文字识别,并导出到C++调用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 深度学习实战50-构建ChatOCR项目:基于大语言模型的OCR识别问答系统实战

    大家好,我是微学AI,今天给大家介绍一下深度学习实战50-构建ChatOCR项目:基于大语言模型的OCR识别问答系统实战,该项目是一个基于深度学习和大语言模型的OCR识别问答系统的实战项目。该项目旨在利用深度学习技术和先进的大语言模型,构建一个能够识别图像中文本,并能

    2024年02月11日
    浏览(46)
  • 完全离线的OCR图片转文字识别工具Umi-OCR

    OCR图片转文字识别软件,完全离线。截屏/批量导入图片,支持多国语言、合并段落、竖排文字。可排除水印区域,提取干净的文本。基于 PaddleOCR 。 免费:本项目所有代码开源,完全免费。 方便:解压即用,离线运行,无需网络。 批量:可批量导入处理图片,结果保存到本

    2024年02月03日
    浏览(80)
  • 深度学习之用PyTorch实现线性回归

    1.1 epoch = 100时 1.2 epoch = 1000时   2.1 Adam优化器    2.2 Adamax优化器  3.1 lr = 0.05  3.2 lr = 0.1(loss函数结果发散) 1.1 问题  1.2 解决办法 代码中model.parameters()函数保存的是Weights和Bais参数的值。但是对于其他网络(非线性)来说这个函数可以用吗,里面也是保存的w和b吗?

    2024年02月14日
    浏览(47)
  • 深度学习之用PyTorch实现逻辑回归

    0.1 学习视频源于:b站:刘二大人《PyTorch深度学习实践》 0.2 本章内容为自主学习总结内容,若有错误欢迎指正! 代码(类比线性回归): BCEloss:   结果: 注:输出结果为类别是1的概率。

    2024年02月13日
    浏览(53)
  • 【实操】Java+百度ocr,实现图片识别文字小工具

    图片识别文字,咱用java也可以 通过 java+百度ocr ,实现一个截图或上传图片, 图片识别文字的小工具 。并通过 exe4j工具 将jar包封装成exe可执行桌面文件,方便使用及学习。 一位特别的老友即将 在2023年10月26日 年满 30周岁 ,愿 平安喜乐 公众号:【JavaDog程序狗】 关注公众号

    2024年02月08日
    浏览(48)
  • Opencv项目实战:01 文字检测OCR(1)

    由图我们可知,对图片进行了数字和字母的识别。 (1)下载Tesseract 点击此网址:tesseract-ocr alternative download - Browse Files at SourceForge.net 我下载的是第四个版本,下载后是zip包的形式,压缩后可安装,选择路径可更改,否则会在默认的C:\\\\Program Files里面,没有什么大的影响。 (

    2024年02月06日
    浏览(47)
  • 【项目管理】Java OCR实现图片文字识别

    系统:Win10 Java:1.8.0_333 IDEA:2020.3.4 最近在看外国漫画的时候,发现有些漫画没有汉化的翻译,这哪看得懂。正想把那些日语输入到有道翻译一下,发现日文不会输。正巧之前有接触关于OCR的项目,所以便想用Java做一个小工具,实现图片的文字识别功能,于是我便开始了项目

    2024年02月02日
    浏览(40)
  • PDF编辑和OCR文字识别工具ABBYY FineReader PDF

    ABBYY FineReader PDF是一款专业的OCR文字识别和PDF编辑工具,可以帮助用户更好地处理和管理PDF文档。 以下是ABBYY FineReader PDF的一些特点: 1. 文字识别精准:ABBYY FineReader PDF具有强大的OCR文字识别功能,可以将PDF中的文字准确识别出来,方便用户进行编辑和搜索。 2. PDF编辑功能强

    2024年02月07日
    浏览(43)
  • python ocr(光学文字识别) 学习笔记 (一)

    参考资料:500 lines or less ocr 我们的OCR系统主要由5部分组成,分别写在5个文件之中。它们分别是: 客户端(ocr.js) 服务器(server.py) 简单的用户界面(ocr.html) 基于反向传播训练的ANN(ocr.py) ANN的实现脚本(neural network design.py) 虽然界面服务器用户界面不是我们的重点,但由于笔者水平有

    2024年02月08日
    浏览(45)
  • 快速调用百度AI开放平台的API,以OCR通用文字识别为例(封装函数进行连续调用)

    🔥博客主页:是dream 🚀系列专栏: 深度学习环境搭建、环境配置问题解决、自然语言处理、语音信号处理、项目开发 💘每日语录:眼里有不朽的光芒 心里有永恒的希望 。 🎉感谢大家点赞👍收藏⭐指正✍️         百度开放平台允许开发者访问和利用百度的各种服务

    2024年02月06日
    浏览(70)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包