OCR

对它的认识,我很浅薄

Posted by tokenian on November 20, 2021

OCR是英文 Optical Character Recognition的缩写,指的是光学字符识别。目前在软件开发领域通常指的是文字识别,具体应用场景有车牌识别、智能手写笔、考卷打分等。在机器学习、神经网络学习里是一块相对成熟的领域,对于常见的自然语言,识别准确率很高。

人工智能

百度这几年往人工智能方向发力,开源了飞浆框架。官网上提供了测试用的地址,只需要上传一张带文字的图片,右侧就会返回识别到的文字,文字在图片中的位置,置信率。放出来的开源训练模型体积不到10MB,是相当优异的。以前我自己训练过一个GAN模型,能生成一些人脸图像,有几百MB大小。

机器学习和神经网络学习,理论上采用了截然不同的思路。机器学习采用非常严谨的数学算法,而神经网络学习则是模拟神经信号传递。从目前工业界的效果来说,神经网络训练出来的模型准确率更高。神经网络可以嵌套多层网络模型,训练的数据越多,拟合的越好。

image-20211209203255401

正如上图的高斯正态分布,数学必须保持严谨性。机器学习里常见的线性回归、逻辑回归算法,背后的数学推理无懈可击。

image-20211209205837811

科学家研究神经元,发现其受到刺激之后会发送强弱不等的电信号给其他神经元。受此启发,可以简单地把这个过程理解为一个数学公式。 \(y = ax + b\) x作为输入,y作为输出,类比电信号。神经网络的训练就是找到这个方程里的a和b的最优解。

计算机从广义的角度来讲,一直在重复做两件事:识别和反馈。比如网上购物,用户添加进了购物车,用户就有了购买意向。当用户提交了订单,后台就会检查订单能否正常进行下去,是否有货,可以的话让用户支付,还要判断支付成功与否。只不过这里的识别和反馈是开发者早已定义好的业务模型,程序员只要按部就班按照约定开发就行。

但是对于真实的世界而言,很多东西是没有定义好的。比如下面的图片

image-20211209211443564

这是百度飞浆网站上的测试图片。文字的大小、字体、颜色,是不确定的,表达的内容对计算机而言也是未知的。怎么让计算机了解这张图片要表达何种含义呢?

点阵图

现在很多小学生买了智能识别笔,把笔对着书本、试卷扫一扫,就能识别内容,给小朋友找到相关学习视频。此类识别是相对简单的,计算机里采用点阵图技术识别。比较厉害的是大漠插件提供的文字识别

image-20211209212316691

它能使用字体文件,生成特定字号的点阵图文件,识别文字相当高效。智能识别笔使用的正是这个技术,内置了多种字体的点阵图。通过蓝牙或者WiFi连接到学习机,展示通过联网查找到的解答给小朋友。

对于标准的字体,方方正正,颜色单一,这种技术识别没问题。若是遇到字体混合了多种颜色,扭曲变形,夹杂干扰信息,这种方案就无能为力了。车牌识别就属于这种,目前大多数是使用的机器学习模型。

image-20211209213440073

文字识别以后做什么呢?如果是简单的车牌,有特定的规则,按部就班就行。如果是给考生的作文打分呢?计算机怎么去理解一大段文字,它表达的主旨是什么?它和标准答案相差有多大?这便是自然语言处理的范畴了,是个很有意思的方向。

同OCR相对的,有ASR(Audio Speech Recognition)语音识别。现在常用的微信语音转汉字使用的就是这门技术,背后是神经网络学习模型在支撑。中国那么多方言、土话,能转换得像模像样是相当不错了。

总结

这篇文章是对最近接触到的文字识别技术做一个粗略的总结。若干年后,它会变成一种习以为常的事。计算机的理解能力会越来越强,人会越来越懒。期待终结者里的机器人面世!