OCR
光学文字识别(Optical Character Recognition, OCR)是一项让计算机识别字符的技术。
流水线
OCR技术的流水线(Pipeline)包含有:
- 文字检测(定位)
- 字符分割
- 字符识别
流程图如下:
A(Image) –> B(Text detection) –> C(Character segmentation) –> D(Character recognition)
文字检测
文字检测里有许多技巧,先以行人检测为例,因为人的高度和宽度比例相对固定,
故可以收集固定长宽比例矩形的正负样本(图片中含人/不含人),以不同的大小的矩形检测框按行按列遍历识别(滑动窗口法)。
文字识别也是同理,最后可以得到照片中含字的区域,用放大算子将相邻的识别到的字符区域合并。
字符分割
将得到的连续字符区域进行字符大小级别的随机切割,可以得到一批正负样本
(需要在两字符间进行切割/不需要进一步操作),训练出一个分类器。
然后用这分类器和一个一维的滑动窗口进行字符的分割,得到单个字符。
字符分类
字符分类即为多分类问题,与数字分类处理相同(mnist数据集),使用神经网络或其他方法。
如何获取大数据集
训练一个强大的OCR通常需要较大的数据集,一个可行的方法就是我们可以从零开始制造。
可以先从网上下载多种字体,生成字符,通过仿射变换、模糊等操作使其更接近真实世界的样本。
- 图片变形
- 语音失真
注意
大样本只对低偏差分类器提升有作用,可以通过增加特征数量或神经网络的隐藏元数目来获得低偏差分类器。
当获取更多数据的代价不大时,可以考虑去制造大数据集。
- 从零开始
- 外包
上限分析
做一个成品项目,需要注意时间规划,指导哪些部分对项目是最重要的。其中可以用到控制变量法,看每一部分的提升空间有多大。
例如针对OCR项目,如果有如下的提升表:
Component | Accuracy | Improvement |
---|---|---|
Overall system | 72% | |
Text detection | 89% | 17% |
Character segmentation | 90% | 1% |
Character recognition | 100% | 10% |
其中Overall System
代表初步完成的系统,所以我们重点应抓在提升Text detection
和Character recognition
上。
再举一个例子,人脸识别的流程线如下所示:
1 | A(Camera Image) --> B(Remove background) |
则其提升表如下:
Component | Accuracy | Improvement |
---|---|---|
Overall system | 85% | |
Remove background | 85.1% | 0.1% |
Face detection | 91% | 5.9% |
Eyes segmentation | 95% | 4% |
Nose segmentation | 96% | 1% |
Mouth segmentation | 97% | 1% |
Logistic regression | 100% | 3% |
从上表可知,不需要对背景分离做处理。
全课程总结
- 监督学习
- 线性回归、逻辑回归、神经网络、支持向量机
- 非监督学习
- K-means、PCA、异常检测
- 特殊应用
- 推荐系统、大样本机器学习
- 构建机器学习系统的建议
- 偏差/方差、正则化、下一步该干什么、评估机器学习算法、学习曲线、误差分析、上限分析