百度作业帮和学霸君的拍照搜题中的OCR文字识别功能,模型是怎么训练的呢?从哪里获取那么多的标注数据?

百度作业帮和学霸君的拍照搜题中的OCR文字识别功能,模型是怎么训练的呢?从哪里获取那么多的标注数据?

体验过百度作业帮,猜想主要技术涉及:文字识别 + 搜索

OCR按理说应该分三步:

1.文本定位 text localization

描述:找到文本在图片中的位置,坐标。

方法:经典的有基于连通域的和基于滑动窗口多尺度扫描的。这里要详细了解的话还得看论文。推荐Stroke width transform,容易理解。

输入:图片

输出:文本(单词)的坐标

2.文本分割 text segmentation

描述:根据找到位置后的文本(单词)的坐标,依次定位每个识别的最小单元(英文是字母,中文是汉字)所在的位置

方法:一般还是二值化 + 连通域搜索

输入:图片 / 文本(单词)的坐标

输出:最小单元的坐标

3.文字识别 text recognition

描述:识别最小单元,英文字母识别和汉字识别还是一个多类分类问题

方法:这里一般用分类器,SVM,CNN,还有贝叶斯等

输入:最小单元图片

输出:文字

注:图 自国际文本文档分析大会

百度作业帮APP里的OCR

首先这三步里最难的应该是定位(前几年最新的PR只有70%,最近到了90%,但是工业应用应该还不行),在自然场景的文本里定位容易受光照、模糊、倾斜等因素影响,所以百度作业帮APP里为了简化定位,会提示横屏拍照(倾斜文本定位困难),甚至直接让你手动定位。

横屏

手动定位

基于手机拍作业的分割难度比较小,因此我觉得一个OSTU二值化基本能搞定分割。

识别的话不太知道,但最近DL这么火,再加上百度有比较好的深度学习架构,人工找一些已标注的汉字图片,训练一个汉字识别分类器应该是大致思路。

那么识别之后该怎么对应到具体的题目?

我做了测试

前者是北京市中考试题,后者是我自己出的题,相同设备拍摄电脑上的题目。前者搜出了对应结果,后者没有。我猜测原因是百度的题目数据库里收集了前者,而没收集后者。

所以我觉得他的方法应该是文本搜索,即根据已获得的OCR结果,找到数据库里最匹配的题目(搜索是百度最擅长的嘛)。

另外,我在有些测试里面发现他会找到相似的用户上传的图片,应该也用到了图像检索吧。

以上纯属个人猜想~ 本人做文本检测,图像搜索