日期:2016-05-26
昨天写了一个图片转文本的小程序,对图片识别有了一点点体会。
将 http://ip.zdaye.com/ 这个页面上的端口图片识别成数字。
- 字符集合是数字从
0
到9
。 - 字符的底色和文字颜色都是固定的。
- 文字位置和大小固定,没有偏转。
- 混淆色点只有六个像素。
- 用PHP实现。
- 需要第三方代码库:
intervention/image
。用来操作图片。 - 将图片解析成像素点矩阵,确定每个像素的色值。
- 记录
0
到9
所有完整数字的矩阵为参照矩阵列表。 - 将待识别图片解析为像素色值矩阵,并去掉背景色和干扰色。
- 获得干扰色点的集合。
- 按字符宽度逐个获得单个字符的矩阵。
- 逐一与参照矩阵进行对比。
- 如果完全相等,则是该参照矩阵对应的数字。因为两者完全吻合。
- 如果不全等,但是待识别数字矩阵与参照矩阵的差集是干扰色点的集合的子集,则也是该参照矩阵对应的数字。说明不同的部分是干扰色点覆盖导致的。
虽然上面的项目非常简单,但是也可以体会到图片识别的一些套路。
首先,将图片转换成色值矩阵。这样就把图片问题转换成矩阵问题。
其次,建立识别对象的参考矩阵集合。如果要识别文字,就要知道文字矩阵的特点。
最后,识别的方式可以是多样的。除了简单的差集、子集的操作比较外,矩阵内各点的相对距离等特点可以作为更广泛的特征来使用。这样无论字符如何变形、缩放、倾斜就都可以识别出来。
将图片与字符进行人工识别,作为训练材料。然后对识别系统利用贝叶斯算法进行训练。这样也许不能100%准确,但是却可以更广泛的应用到各种特点的图片上。