Skip to content

lznumber1/ocr

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

12 Commits
 
 
 
 
 
 
 
 

Repository files navigation

验证码识别

安装

测试环境:windows+python2.7.12

直接依赖:

  • pillow
  • sklearn

环境配置步骤:

  1. 安装 Anaconda
  2. 安装pillow,命令行下pip install pillow
  3. 安装sklearn,命令行下pip install scikit-learn

使用

进入src目录,运行命令python *.py

验证码识别一般思路

  1. 在计算机中彩色图片是由像素点组成,像素点由R(红)G(绿)B(蓝)三原色组成,在验证码识别过程中,一般把需要识别的字符称为前景,其他的称为背景
  2. 灰度化:即将彩色图像转化为灰度图像,一般有以下三种方法
    1)最大值法:命R、G、B的值等于三者中最大值,即R=G=B=max(R,G,B),这种方法会形成亮度很高的图像
    2)平均值法:命R、G、B的值等于三者的平均值,即R=G=B=avg(R,G,B),这种方法会形成较为柔和的图像
    3)加权平均法:命R、G、B的值等于三者的加权平均值,即R=G=B=(RWr+GWg+B*Wb)/3,Wr、Wg、Wb分别为R、G、B的权重,Wr+Wg+Wb=1
  3. 二值化:即将灰度图像转化为只有黑白两色的的图像,一般是设定一个阈值,然后逐个扫描像素点,若大于该阈值则设为白色(255,255,255),否则设置为黑色(0,0,0),该方法的难点在于阈值的确定;如采用阈值法效果不好,则需要找其他办法,关键在找规律或者说是漏洞,比如对北京公积金这种每个字符颜色不相同,但同一字符内颜色相同的可以统计其各种颜色的像素点个数,确定出4个字符的颜色,然后再根据颜色分别定位
  4. 去噪:一般是根据某个像素点周围4临域或8临域的其他像素点来判断该点是否为噪声,比较典型的有中值滤波、均值滤波等
  5. 切割:对字符无粘连的可以采用投影法或连通区域分析法;字符粘连的情况下可以采用滴水算法等
  6. 训练识别:一般用支持向量机或神经网络

测试结果

网址 识别率
北京公积金 0.99
上海公积金 0.99
大连公积金 0.91
杭州公积金 0.98

About

验证码识别

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages