
体验过百度作业帮,猜想主要技术涉及:文字识别 + 搜索
OCR按理说应该分三步:
1.文本定位 text localization
描述:找到文本在图片中的位置,坐标。
方法:经典的有基于连通域的和基于滑动窗口多尺度扫描的。这里要详细了解的话还得看论文。推荐Stroke width transform,容易理解。
输入:图片
输出:文本(单词)的坐标
2.文本分割 text segmentation
描述:根据找到位置后的文本(单词)的坐标,依次定位每个识别的最小单元(英文是字母,中文是汉字)所在的位置
方法:一般还是二值化 + 连通域搜索
输入:图片 / 文本(单词)的坐标
输出:最小单元的坐标
3.文字识别 text recognition
描述:识别最小单元,英文字母识别和汉字识别还是一个多类分类问题
方法:这里一般用分类器,SVM,CNN,还有贝叶斯等
输入:最小单元图片
输出:文字
注:图 自国际文本文档分析大会
百度作业帮APP里的OCR
首先这三步里最难的应该是定位(前几年最新的PR只有70%,最近到了90%,但是工业应用应该还不行),在自然场景的文本里定位容易受光照、模糊、倾斜等因素影响,所以百度作业帮APP里为了简化定位,会提示横屏拍照(倾斜文本定位困难),甚至直接让你手动定位。
横屏
手动定位
基于手机拍作业的分割难度比较小,因此我觉得一个OSTU二值化基本能搞定分割。
识别的话不太知道,但最近DL这么火,再加上百度有比较好的深度学习架构,人工找一些已标注的汉字图片,训练一个汉字识别分类器应该是大致思路。
那么识别之后该怎么对应到具体的题目?
我做了测试
前者是北京市中考试题,后者是我自己出的题,相同设备拍摄电脑上的题目。前者搜出了对应结果,后者没有。我猜测原因是百度的题目数据库里收集了前者,而没收集后者。
所以我觉得他的方法应该是文本搜索,即根据已获得的OCR结果,找到数据库里最匹配的题目(搜索是百度最擅长的嘛)。
另外,我在有些测试里面发现他会找到相似的用户上传的图片,应该也用到了图像检索吧。
以上纯属个人猜想~ 本人做文本检测,图像搜索
