Skip to content

Instantly share code, notes, and snippets.

@liuxd
Last active June 20, 2024 23:07
Show Gist options
  • Save liuxd/c8f23f4f817b3ae277ee92ea54f2f23e to your computer and use it in GitHub Desktop.
Save liuxd/c8f23f4f817b3ae277ee92ea54f2f23e to your computer and use it in GitHub Desktop.
[#08 浅谈图片识别] #編程之道 #Hacking

浅谈图片识别

日期:2016-05-26

昨天写了一个图片转文本的小程序,对图片识别有了一点点体会。

一个小项目

项目地址

HackZdayePort

代码功能

http://ip.zdaye.com/ 这个页面上的端口图片识别成数字。

图片特点

  • 字符集合是数字从09
  • 字符的底色和文字颜色都是固定的。
  • 文字位置和大小固定,没有偏转。
  • 混淆色点只有六个像素。

实现思路

  • 用PHP实现。
  • 需要第三方代码库:intervention/image。用来操作图片。
  • 将图片解析成像素点矩阵,确定每个像素的色值。
  • 记录09所有完整数字的矩阵为参照矩阵列表。
  • 将待识别图片解析为像素色值矩阵,并去掉背景色和干扰色。
  • 获得干扰色点的集合。
  • 按字符宽度逐个获得单个字符的矩阵。
  • 逐一与参照矩阵进行对比。
    • 如果完全相等,则是该参照矩阵对应的数字。因为两者完全吻合。
    • 如果不全等,但是待识别数字矩阵与参照矩阵的差集是干扰色点的集合的子集,则也是该参照矩阵对应的数字。说明不同的部分是干扰色点覆盖导致的。

图片识别的体会

基本套路

虽然上面的项目非常简单,但是也可以体会到图片识别的一些套路。

首先,将图片转换成色值矩阵。这样就把图片问题转换成矩阵问题。

其次,建立识别对象的参考矩阵集合。如果要识别文字,就要知道文字矩阵的特点。

最后,识别的方式可以是多样的。除了简单的差集、子集的操作比较外,矩阵内各点的相对距离等特点可以作为更广泛的特征来使用。这样无论字符如何变形、缩放、倾斜就都可以识别出来。

另一个思路

将图片与字符进行人工识别,作为训练材料。然后对识别系统利用贝叶斯算法进行训练。这样也许不能100%准确,但是却可以更广泛的应用到各种特点的图片上。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment