MMOCR | 全方位食用指南拿来吧你!

本文涉及的产品
自定义KV模板,自定义KV模板 500次/账号
个人证照识别,个人证照识别 200次/月
车辆物流识别,车辆物流识别 200次/月
简介: 在这篇文章里,我们将会重点介绍新增的应用脚本,同时手把手带领读者尝试使用 MMOCR 已有的模型。



640.png

老大在 MMOCR 的发布稿中说道,MMOCR 作为开源的文字检测识别理解工具箱,拥有着全流程、多模型、模块设计、公平对比、快速入门等诸多优点。


之后,还为读者们画下了数个大饼,包括但不限于——


MMOCR 不仅仅是研究导向的框架,还是一个可以用于入门,教学,以及工业实际生产的框架。


或是“我们逐步会加入更多的算法以及多语言模型”云云。正所谓画饼一时爽,头发火葬场。老大动嘴皮,小弟惨兮兮。

640.png

好在,道路是曲折的,前途是光明的。努力了两个月后,我们首先把 MMOCR 的版本从 0.2.0 提升到了 0.2.1,修复了版本号过低的 bug。此外,我们捎带作出的一些更新有:


1. 增加了对新手友好的应用脚本,便于入门、教学和测试模型的实际表现;


2. 支持部分模型导出至 ONNX 和 TensorRT;


3. 数据集新增对 TextOCR 和 Total-Text 的支持,完善了一些数据集的处理脚本;


4. 开始提供中文文档(在做了但又没有完全做好== dbq);


5. 对配置方法依照最新版 MMCV 以及 MMDetection 的要求进行了重构,以支持一些新特性。


之前 MMOCR 发布的时候就有很多社区同学在各平台留言评论,说我们没有详细的介绍一下。我们十分重视,迅速行动,在三个月后提出了这篇教程。


在这篇文章里,我们将会重点介绍新增的应用脚本,同时手把手带领读者尝试使用 MMOCR 已有的模型。


MMOCR 全方位食用指南,拿来吧你!!


本文内容


文字检测与识别

关键信息提取

在项目中使用 MMOCR 模块


在正式展开之前,我们先列出 MMOCR 支持的模型供大家参考:

640.png

顺便一提, MMOCR 支持的数据集也不少:

640.png

对于这些数据集,我们均已提供转换脚本或处理后的标注文件供大家在 MMOCR 中使用。


1. 文字检测与识别

   Text Detection & Recognition




尽管模型管够,但不同模型在不同场景下的表现会有所差异。俗语有云,是骡子是马,还得拉出来遛遛。社区同学 @samayala22 热心地为我们提供了一个懒人脚本——mmocr/utils/ocr.py,感恩~


此脚本开箱即用,只需简单的一行命令,万千模型(指14个)立即组合,任君差遣


首先,我们可以试着用它识别一下一张名为magazine.png 的杂志图片:

python mmocr/utils/ocr.py demo/magazine.png --det PS_IC15 --recog RobustScanner --imshow --out_img demo/result.jpg

在这个命令里,我们调用了 PSENet 和 RobustScanner 分别作为文本识别和检测模型,端对端地对图片进行了 OCR 识别。


识别结果会显示在弹出窗口中,并被保存至demo/result.jpg中(见下图)。可以见到,这两个模型组合起来的识别效果还是很不错的。


然而,受宥于我们模型的训练数据,我们输出的结果往往只会以单词为单位。这在文字分布零散的场景中问题不大,可是如果在书刊杂志的识别上,就显得没有那么赏心悦目了。

640.png

显然,要想从根本上解决这个问题,还是得从训练数据集下手,对具体场景做好微调。然而,这种方法耗时耗力,且对于普通用户而言成本太高。


于是,在参考了社区成员的意见后,我们提出了一个快捷(且丑陋)的修复方案——一个名为stitch_boxes_into_lines 的函数。它会在脚本输出最终结果前,自动合并邻近的文字框,从而实现按行输出的效果。要想尝试该方案,读者只需在脚本后加上 --merge 参数:

python mmocr/utils/ocr.py demo/magazine.png --det PS_IC15 --recog RobustScanner --imshow --out_img demo/result.jpg --merge

然而,“邻近”的定义在不同的场景下是不一致的。为了适应不同的环境,该函数为调参侠们贴心地提供了两个参数:

def stitch_boxes_into_lines(boxes,
                            max_x_dist=10,
                            min_y_overlap_ratio=0.8,
                            has_text=True):
    """合并相邻的检测框。
        ...
        max_x_dist (int): 当两个检测框在x轴上的最短距离大于该值时,不作合并
        min_y_overlap_ratio (float): 当两个检测框在y轴上的重合长度与自身在y轴上的长度(高)的比都小于该值时,不作合并
        ...
    """

在上面所提出的实例中,max_x_dist 跟 min_y_overlap_ratio 就分别被设置为 40 和 0.5 。


很显然,考虑到调参的麻烦程度,这个辅助函数还有很大的提升空间。同时,它也是一个具有挑战性的工程性问题。我们将会在后续视实际需求随缘优化这个算法;当然,如果读者对此有什么好的想法、建议或实践经验,欢迎在我们的社区交流甚至提出 PR

640.png

另外,我们目前也在开始支持中文的文字识别,现在已经公开了一个在 ChineseOCR 上预训练好的 SAR 文字识别模型

作为开发计划的一部分,我们将会逐步提升 MMOCR 在中文上的表现。同样地,如果小伙伴们有任何中文相关的 OCR 的论文,资源甚至 PR,都欢迎在 Github 上与我们随时交流!


2.关键信息提取

  Key Information Extraction



假设我们现在有一批包含信息类似但布局不同的文档(如收据),KIE 模型可以帮助我们自动把文档上的关键信息(物品、价格、商店名称等)作出判断及归类,从而实现自动化的信息提取。有了这种模型的帮助,大家就能更方便地统计自己每个月跟女朋友逛街的花费,可以说是相当实用了。


啥?没女朋友怎么办?

640.png

KIE 作为文字识别领域一个常见的下游任务,它常常需要结合图像和文字的识别结果作出综合判断,因此十分依赖于上游文字检测和识别模型的输出。得益于 MMOCR 的通用模块化设计,在 mmocr/utils/ocr.py 中, SDMGR 被无缝地接入了模型的工作链,端对端地实现对输入图片的推断。(KIE 的片段部分由印度的 @manjrekarom 小哥提出,感谢!)


接下来,我们同样测试一下 SDMGR 的表现。假设我们有一张收据图片放在 demo/demo_kie.jpeg 下,我们便可以通过以下命令来进行 KIE 推断:

python mmocr/utils/ocr.py demo/demo_kie.jpeg  --det PS_CTW --recog SAR --kie SDMGR --print-result --imshow

该命令采用 PSENet 和 SAR 模型进行文本检测和识别,之后 SDMGR 模型被用来对识别结果进行归类。从图中可见,大部分的字段都被成功归类了出来

640.png


3. 在项目中使用 MMOCR 模块



在某些工程实践中,我们可能会希望调用 MMOCR 的模型进行文字识别或信息提取。这里 MMOCR 也提供了一个非常方便的类:MMOCR。用户仅需导入该类,并调用 MMOCR.readtext() ,即可识别任意图片。


我们继续举个例子——比方说,我们要在项目中使用 MMOCR 中的 PSENet 和 SAR 识别 demo/demo_text_ocr.jpg ,可以这样操作:

import mmcv
from mmocr.utils.ocr import MMOCR
img = mmcv.imread('demo/demo_text_ocr.jpg')
ocr = MMOCR(det='PS_CTW', recog='SAR')
results = ocr.readtext(img) # 也可以直接传入文件路径

以下为部分results内的内容,可见识别框和文字都已经被详细地标注了出来,用户可以在接下来的开发中直接调用这些信息:

[{'filename': '0', 'result': [{'box': [166, 14, 164, 16, 164, 20, 161, 23, 161, 30, 164, 32, 164, 39, 170, 39, 173, 41, 198, 41, 200, 43, 211, 43, 214, 45, 216, 43, 216, 30, 214, 27, 214, 18, 207, 18, 204, 16, 186, 16, 184, 14], 'box_score': 0.9082011580467224, 'text': 'SALE', 'text_score': 0.9999995529651642}, ...]}]

实际上,mmocr/utils/ocr.py 的命令行只是 MMOCR 的一层包装。因此,所有在命令行里适用的参数在 MMOCR 里都是通用的,妈妈再也不用担心 MMOCR 功能不足了。


相信通过上面的演示,各位已经掌握了这个脚本一些基本的用法。更多关于该脚本参数的介绍和演示,有需要的读者可以参考我们的文档。


作为 MM 家族系列一个较新的成员, MMOCR 目前仍然在不断完善,力图早日实现我们画下的大饼。而负责社区建设和倾听反馈亦是我们工作重要的一环,因此,如果您在使用 MMOCR 的时候有什么问题,想法或者建议,请记住,我们的 repo 是您永远的家


文章来源:公众号【OpenMMLab】

2021-08-20 19:00

目录
相关文章
|
5月前
|
API UED SEO
俄语逆向海淘代购集运系统搭建技术方案
逆向海淘在俄罗斯兴起,为满足当地消费者对中国商品的需求,需构建面向俄罗斯的淘宝代购集运系统。关键步骤包括:市场调研以了解消费者偏好和竞争态势;通过API集成淘宝数据,自建技术平台支持俄语界面和支付;合作物流公司确保配送;建立俄语客服,优化用户体验;遵守法规,控制质量,管理汇率风险;并持续收集反馈,扩展服务和合作伙伴。通过全面策略,可在逆向海淘市场立足。[[c0b.cc/R4rbK2](c0b.cc/R4rbK2)]
|
5月前
|
供应链 API UED
逆向海淘代购案例解读:类似Pandabuy淘宝代购集运系统搭建攻略
逆向海淘模式下,Pandabuy式代购集运系统搭建涉及市场定位、供应链管理、平台开发与优化、支付物流及用户体验。系统提供丰富商品选择,集成多平台API,确保数据同步。关键点包括确定目标用户,建立稳定供应链,优化网站与支付流程,合作可靠物流,并提供客服支持以提升用户满意度。通过这样的攻略,可构建一站式跨境购物解决方案。
|
6月前
|
自然语言处理 安全
线下陪玩游戏系统开发多语言/海外版/成熟技术/方案项目/源码功能
Continuing to develop an offline companion game system may involve the following aspects:
|
搜索推荐 SEO
网络小说推广八步走
网络小说推广八步走
317 0
|
存储 前端开发 区块链
区块链农场养成种植种树游戏系统开发方案介绍/功能详情/项目源码
区块链技术的兴起,为游戏开发带来了新的思路和玩法。其中,区块链农场养成种植种树游戏系统是一种利用区块链技术实现虚拟农场种植的游戏。玩家可以通过购买种子、种植、收获、交易等方式,体验虚拟农场的乐趣,同时也可以参与到环境保护和可持续发展的过程中。下面,我们将详细介绍区块链农场养成种植种树游戏系统开发方案、功能详情以及项目源码。
233 0
|
运维 搜索推荐 UED
整站优化从何做起?整站SEO优化的具体流程
整站优化从网站结构、目录、内部链接、网站内容及网站html代码等进行基础优化改造,是目前网站优化的最佳解决方案,但很多企业对整站优化并不了解,接下来小编会告诉你整站优化从何做起以及有哪些流程,一起看看吧。
180 0
|
搜索推荐
游戏直播系统软件源码搭建平台,经营突破困境的思路和看法
借助“东莞梦幻网络科技”所提供的游戏直播平台源码搭建属于自己的游戏直播平台,在经营游戏直播平台过程中,正面临一些困境可以突破。下面我们就讨论在经营游戏直播平台中会遇到的困境,并推荐一些突破困境的思路和看法。
|
区块链 数据库
DAPP农场养成种植种树游戏系统开发(案例开发)丨区块链农场养成种植种树游戏系统开发方案介绍/功能详情/项目源码
 The blockchain system verifies all data generated during the period every 10 minutes(such as transaction records and records of when the block was edited or created),并将这些数据储存在一个新的区块上,这个区块会与前一个区块连接,从而形成一根链条。每个区块都必须包含前一区块的相关信息才能生效。
|
人工智能 监控 数据挖掘
讲讲短视频询盘获客系统
短视频询盘获客系统,短视频APP已成为了用户最平民化的视频应用,是日常生活跨屏社交应用的核心组成部分。可以说,它已经重新塑造新媒体布局和网络舆论生态,成为了全新社交语言,推动着新的信息数据表达形式。而在ToC行业领域玩得顺风顺水的短视频APP,并不单单局限于个人音视频休闲娱乐特性。
讲讲短视频询盘获客系统
【元气云妹】一图Get上云前咨询与设计场景下服务产品
元气云妹又来啦,本期长腿小姐姐带来了【上云前咨询与设计场景下服务产品介绍】
下一篇
无影云桌面