在App store中检索 “名片扫描”
今天要说的就是如何徒手打造一款商用的名片识别产品:名片扫描通 scanzen
脉可寻就不比了,那是一款有人工干预的产品,确实能做到100%准确,不过用户的名片隐私问题很让人担心。
- 汉王的产品,做OCR产品的龙头。不过在移动互联网时低好象out了,产品难用,免费版本一周只能扫两张名片,太抠门了吧。
- 名片扫描通,刚上线,完全免费,但扫描速度慢,当然如果你的手机是iphone5,也就显不出来慢了,一闪就扫完了。
- 名片全能王,敢当王的肯定不白给,扫描没得说,但是价格不便宜78。钱多的话,就这个了。
跑题了,今天要写的是徒手打造一款商用的名片识别产品。徒手就是码农不停用手敲出来了的,先简要谈一下原理
您看到此文,一定是对OCR有一定了解了,因为OCR是很小的领域,做相关研究的公司机构很少。
简单的讲,名片识别应用BCR应当处理如下几个问题
- 名片切割
- 名片旋转校正
- 名片分行
- 字符识别
- OCR常见错误校正
- 字符分司校正
- Regular Expression提取名片信息
这些问题领域,前人已经研究的很深了,但要变成可商用的产品还是要付出点努力的。
先说名片分割:
最基本的方法有:连通区法和hough变换法,只要控制好参数,这两种方法就能切出大部分的名片
下图是一个通过联通区可以提取的名片:
但很少有名片能这么便捷地让你找到大的连通区,于是hough变换就必有可少了,找到四个焦点就ok了。
原理很简单,但切名片着实费了很大功夫,要达到100%能找到名片的效果,还需要更多的辅助手段。
名片旋转校正:
名片剪切后肯定会有有倾斜的,如果您google skew detect,会发现大量的论文来解决这个问题,足以说名,角度矫正的重要性。
OCR引擎对字符角度都极度信赖,如果你的字符旋转1度,那么,字符识别准确可能会降低10%,如果偏差2度,那OCR引擎无法工作。
将角度调整到0.1度范围内,实然就发现,识别的这么准!
那如何才能将行校正的这么准呢,方法有很多种,这里我介绍我使用的一种方法(没google到相同的处理方法)基于聚组成行skew detect方法。
名片剪切后,找出名片中所有的10号字以下的联通区,对这些联通区进行按行聚组计算,得到分行的结果,计算这些行的平均倾斜角度。然后再次聚组分行,就能得到很准确的结果,无需多次迭代。
OCR引擎可以使用开源的tesseract引擎,只是tesseract对大字符集的处理速度有很大问题,需要深入进行屏蔽一些处理才好用。
,