目录

急速版:

一、算法篇:

a. OCR算法

b. OCR算法服务

二、软件篇:

三、总结


太长不看版:

做了一个OCR文字识别工具。

软件及源码:https://github.com/zhangming8/Dango-ocr

OCR算法服务(非必需):https://github.com/zhangming8/ocr_algo_server

好了,看到这里就行了,使用方法上面链接里有。

-----------------------------------------

如果您是普通用户,可以直接使用上面提供打包好的软件;如果您是一名技术爱好者程序员,算法工程师,想了解相关技术,可以继续浏览啦。

详细版:

最近研究了一下百度开源的OCR算法,很感兴趣,于是在前人的基础上,做了一个OCR文字识别工具。

先说一下这个工具的特点:

1. 通过选取待识别区域,自动截屏获取对应区域图片后调用自己搭建的OCR算法服务获取识别结果。

2. 可设置快捷键截屏、识别。

3. 识别结果可以可视化,对识别错误的可以手动进行修改。

4. 文档导出,支持txt,docx。

5. 对于没有GPU或不能搭建OCR算法服务的同学,可以直接使用我已经打包好的软件。里面会调用我搭建好的OCR算法服务,不过IP地址我没放出来,哈哈,不能让你们知道。

还未完成部分:

后面可能会支持本地离线识别,毕竟GPU比较贵比较穷。。。

整个软件的实现可以分为2部分:算法篇、软件篇。

一、算法篇:

a. OCR算法

算法主要使用PaddleOCR的develop分支(https://github.com/PaddlePaddle/PaddleOCR/tree/develop),(飞桨已经发布了2.0rc1版本,开始支持动态图了,用法和pytorch一样流畅,后面会尝试用一下,但是本项目还是静态图develop分支)。

整个文字识别过程包括。1.文字检测,获取位置坐标;2. 把检测的文字抠出来送入文字识别模型。

针对文字检测:目前文字检测主要有基于回归的方式和基于分割的方式,这里我使用的是DBNet(https://arxiv.org/pdf/1911.08947.pdf)。DBNet是一个很简洁的基于分割的文字检测算法,针对排列较密集的场景也有不错的检测效果,细节部分可以看一下原论文。

针对文字识别:使用的是CRNN(https://arxiv.org/abs/1507.05717)。虽然这篇论文比较早,但是目前这种方法仍然使用广泛。在训练的时候不需要对每个文字进行切分、对齐。

在PaddleOCR工程中提供了各种预训练模型,根据里面的使用方法很容易搭建一个文字识别系统。每个人使用的场景可能不太一样,所以针对个人场景最好使用预训练模型在自己的数据集上进行微调。在这里检测我使用的是backbone为resnet18的DBNet,识别采用的是backbone为mobilenet的CRNN。对于检测和识别模型,我针对自己的使用场景进行微调。算了,考虑的每个人的使用场景都不一样,目前还是用百度开源的通用模型吧。所有模型都是用百度开源的。。。

b. OCR算法服务

在文字识别中,考虑到了支持多种语言的识别。在具体实现的时候,可以共用一个文字检测器,接多个不同语言的文字识别模型,目前识别语言支持:汉语、日语、韩语。由于模型比较多,在部署的时候并没有使用飞桨自带的部署工具。这里使用flask来部署OCR服务。

详见(https://github.com/zhangming8/ocr_algo_server)。其中ppocr文件夹包括了检测、识别模型的定义,算法的前后处理大部分代码来自PaddleOCR。

ocr_server.py是服务的主文件,包括了接收base64格式的图片,调用ocr识别算法,返回结果。do_work函数是对模型进行了初始化;ocr_server包括了接收图片,调用ocr算法,并返回结果。里面也集成了调用百度翻译的接口,但是目前在DangoOCR软件里面还没使用到。

config.py为配置文件,里面包括了的模型路径,及后处理参数设置。从配置文件里面可以看到,里面有DB的检测模型,RCNN日语、英语、韩语、汉语识别模型。

sh prod_deploy.sh启动服务。里面给了2种启动方式。a. 一个检测,后面串联多个不同的语言识别模型。b. 一个检测,后面接1个语言识别模型。设置reco_language为文字检测后面跟的识别模型,模型直接用“,”分割。如reco_language="ch,japan,en,korean"表示一个模型后面并联了汉语、日语、英语、韩语识别模型。port=8811可以设置服务的端口。

log文件夹会在启动服务的时候自动创建,并保存相关请求的日志。

test.py可以向服务端口发送图片,主要用于进行测试服务有没有错误。如下为请求的一张图片,返回识别结果并进行可视化,具体请求方式可以参考代码。

二、软件篇:

算法服务有了,需要再开发一个操作界面。在这里发现了一个和不错的开源项目,所以界面部分主要参考了该工程。

界面进行了改动,最终的repo为:https://github.com/zhangming8/Dango-ocr

该工具主要使用pyqt5开发的。

main.py为程序入口。注释写的很详细这里就不一一介绍了。deploy.sh或者deploy.bat是使用pyinstaller分别对ubuntu/windows系统下进行了打包。由于macOS界面稍微不一样,所以重新建了一个macos分支,打包也在macos分支下面。

需要注意的是使用的时候需要修改“configs.py”,填入OCR算法服务端口,如ocr_port=8811;请求的ip地址,如ocr_request_url = "http://0.0.0.0:{}/dango/algo/ocr/server".format(ocr_port)

使用方法:

下载解压已经打包好的软件,windows/ubuntu下找到DangoOCR双击打开,MacOS下右键打开方式选择终端。或者执行python main.py打开界面。

点击“设置”按钮设置待识别的语言。点击“截屏”按钮选择待识别区域,之后自动调用OCR算法服务返回识别结果。

识别汉语(注:下面的界面不是最新的,目前新增加了加载本地图片按钮):

中文识别界面

可视化并修改识别结果:

点击“设置”按钮,勾选可视化结果。再次识别会自动弹出识别的图片及对应的识别结果。如果识别的有错误,可以进行修改,修改后可以进行导出为txt或者docx格式。

日语识别:

修改英语识别结果:

三、总结

好了,整个流程就是这样啦。后面可能会增加翻译功能(目前OCR算法有这个翻译功能,是调用的百度翻译API,不过在软件中还没使用)。更长远地,还会加入语音识别功能,这个貌似比较难。。。。

附:

    其他语种的文字识别标注脚本:

PaddleOCR也提供了文字标注工具,可以标注矩形框、四边形,同时也提供预标注信息节约标注时间。因此标注文字检测时我们完全可以使用这个工具,在标注汉语、英语的数据时,检测+识别可以同时标注。但是标注其他语言时候,如日语,一般大家不懂日语,虽然知道这个字的形状,但一般人不会发音也打不出来这个字,这时候检测和识别无法同时标注。此时我们一般把检测,识别的数据分开标注。标注检测时用上面的工具就行,之后把标注检测的图片抠出来再标注识别。标识别的时候虽然我们不懂这个词的发音,但可以判断它的形状,基于这个情况,使用opencv简单做了一个标注工具。未完待续。。。

使用飞桨一步步实现多语言OCR文字识别软件相关推荐

  1. 用paddleocr识别汉字_使用飞桨一步步实现多语言OCR文字识别软件

    目录 急速版: 做了一个OCR文字识别工具. 好了,看到这里就行了,使用方法上面链接里有. ----------------------------------------- 如果您是普通用户,可以直 ...

  2. C语言 提取软件文字,使用OCR文字识别软件如何将图中文字识别提取出来

    有时候我们上网看见了一些文字图片,上面的内容自己很喜欢,想要将文字保存下来,但是大家都知道图片上面的文字是不可以直接进行复制粘贴的,那这时候就需要识别提取图中文字了,具体怎样去操作呢?下面小编将在文字 ...

  3. 易语言基于飞浆的本地ocr文字识别 xp win7 win10 无网离线 都可用

    易语言基于飞浆的本地ocr文字识别 xp win7 win10 无网离线 都可用,图片/截图/字节集参数都可识别,使用模块调用dll,免库,体积小简单方便,某些特殊图片(比如字体超大或者方向倾斜)的识 ...

  4. 百度BML飞桨训练营(三)CV之汽车识别分类

    百度BML.飞桨训练营(三)CV之汽车识别分类 文章相关内容资料已经取得百度BML允许,仅用与交流学习,请不要用于商业传播. 这一次直接来上手简单的CV项目–汽车识别. 下载数据集 请在开始任务前,下 ...

  5. GitHub开源:支持100多种语言的OCR文字识别

    之前为给位朋友分享过:GitHub开源:17M超轻量级中文OCR模型.支持NCNN推理,该项目仅仅支持中文OCR识别,本篇博文将分享支持100多种语言的OCR文字识别项目:Tesseract OCR. ...

  6. 飞桨图像分类入门——多种网络模型在手写数字识别的应用

    什么是图像分类 图像分类是基于深度学习的cv分类任务. 核心是从给定的分类集合中给图像分配一个标签的任务. 实际上我们的任务是分析一个输入图像并返回一个图像分类的标签. 标签总是来自预定义的可能类别集 ...

  7. Github每日精选(第56期):支持多语言的文字识别EasyOCR

    EasyOCR EasyOCR一款好用的OCR,支持80多种语言和所有流行的书写脚本,包括拉丁语.汉语.阿拉伯语.德瓦纳加里语.西里尔语等. OCR (Optical Character Recogn ...

  8. 3行代码实现全平台多语言离线OCR文字识别,完全免费开源

    你想在全平台多语言,包括windows/linux/嵌入式设备等等所有设备上实现离线OCR吗?只要三行代码(核心代码). 代码如下: BPHANDLE Handle= BPOcrInit(szDetM ...

  9. 第三课511遇见易语言大漠文字识别游戏角色坐标

    小知识:如何让脚本自动注册大漠 核心思路:只是把注册大漠需要的2个文件 dm.dll regdm.dll 2个文件存入到易语言里面 以图片的形式存储 然后脚本运行后判断附近是否有这2个文件 没有 则实 ...

  10. 百度飞桨弯道超车了吗?!

    事情是这样的... 前不久,小夕注意到了一份来自权威评测机构IDC发布的<2020年下半年深度学习平台市场份额报告>: ▲IDC:2020年中国深度学习平台市场综合份额top 5 立刻惊了 ...

最新文章

  1. 指定在此oracle主目录中配置,oracle11g卸载
  2. Bag of Words(BOW)模型
  3. 基于py36的glob模块总结
  4. Toolbar+DrawerLayout
  5. android imagebutton 按下效果,Android 点击ImageButton时有“按下”的效果的实现
  6. 【转】awk 里的substr函数用法举例
  7. WWW 2021最佳论文亚军:基于属性补全的异质图神经网络新架构
  8. Maven报错Missing artifact jdk.tools:jdk.tools:jar:1.7
  9. DevExpress中XtraGrid控件对GridView每行的颜色设置 zt
  10. sncr脱硝技术流程图_SNCR烟气脱硝技术工艺流程示意图
  11. PostgreSQL学习手册(模式Schema)
  12. GE HYDRAN M2 IS200VCRCH1B IS200VRTDH1D IS200VTCCH1CBB IS200VTURH2BAC IS215VPROH1BD IS220PAICH2A
  13. 联想小新i1000拆机图解_小白晒小白:Lenovo 联想 小新 I1000 笔记本电脑
  14. 二阶压控电压源低通滤波器的传递函数
  15. New:Spire.Office for Java 7.7.1 Not Crack
  16. ERP Qt实现之路 前言
  17. VueX 以及axios
  18. photoshop cs之菜单栏功能介绍
  19. 金融产品的不可能三角:收益性、风险性、流动性
  20. 分治法 divide and conquer

热门文章

  1. Ai斗地主智能出牌算法
  2. JAVA学习——GUI鼠标画图交互练习
  3. ANSYS 2020R2 workbench汉化的方法
  4. PHP获取当前完整网址加HTTP/HTTPS
  5. 高级Java开发人员最常访问的几个网站
  6. opengl 加载obj模型
  7. 自动更改IP地址反爬虫封锁
  8. 三.修改Jenkins插件下载路径
  9. 数据结构:二叉树的非递归遍历
  10. USB TYPE A B C 引脚定义