我有一次拿着一张二十年前的手写账本,试着用手机拍了拍,看能不能识别出来。

结果出乎意料——大部分内容识别出来了,准确率能有七八成。当时就好奇,印刷体好认,手写字那么乱,计算机到底是怎么识别的?

印刷体和手写体,难度差很多

OCR识别印刷体,相对直接。同一套字体里,”A”就是”A”,笔画位置、比例都固定,做个模板匹配就能解决。

手写体难在哪里?

同一个人写同一个字,每次写出来都不一样。不同人写同一个字,差异更大。有人写”7”带一横,有人不带。有人的”1”和”l”(小写L)几乎分不清。笔画连笔、断笔都有,字符边界也模糊。

这不是”识别”的问题,更像是”猜谜”。

深度学习让这件事变得可能

早期的手写识别准确率很低,基本实用价值不大。真正的突破发生在深度学习兴起之后。

用卷积神经网络(CNN)处理图片特征,用循环神经网络(RNN)处理字符序列,再加上CTC(一种对齐算法),整个链路串起来之后,手写体识别的准确率跳到了实用级别。

模型需要大量手写样本训练。现在主流的手写识别数据集,几十万甚至上百万个手写样本是常规配置,中文因为字符量大,对数据量的要求更高。

但还是有很多情况识别不好

即便是现在,手写OCR也有明显局限。

潦草程度超过一定阈值,识别率下降得很快。我见过有人的字,估计同事都不认识,OCR就更没辙了。

上下文缺失时容易出错。”己”和”已”、”戊戌”和”戊戍”,脱离语境的话图形太像。好的OCR引擎会结合语言模型做后处理,用上下文纠正错误,但这也只是概率更高,不保证全对。

纸张状态也有影响。褶皱、污迹、水渍都会干扰识别。档案数字化里,遇到老旧破损文件,处理成本很高。

有些场景是专门优化过的

医院的手写病历识别、古籍手写体识别、手写签名验真——这些都有专门的模型,针对特定字形和场景做了优化,不是通用OCR能覆盖的。

支付场景里的手写签名识别,除了认字,还要判断笔迹风格是否和留档的一致,这已经不纯粹是OCR了,是字迹鉴定。

手写体OCR是个研究了几十年还没”完全解决”的问题,也是OCR里目前仍在持续进步的方向之一。


Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐