Python进行验证码识别

注:这一篇只是流程的介绍,由于当时自己也是各种尝试,因此代码并不系统,注释了一大堆东西还没有整理,多以并没有贴出详细代码。

  最近因工作需要进行图片中文字识别,因此便尝试使用Python完成这个任务,常用的Python图像处理库有Pillow、OpenCV、matplotlib。

  验证码识别一般有以下流程:灰度化——二值化——识别,中间可能还会用到直方图均衡化、降噪等处理方式。

  常见图像多用RGB方式进行处理,也就是每一个像素对应着R、G、B三个值。

  首先图像灰度化,也就是一个像素中R、G、B三个值相等,一般有三种方法:

    (1)Gray(i,j)=[R(i,j)+G(i,j)+B(i,j)]/3;  //均值法

    (2)Gray(i,j)=0.299*R(i,j)+0.587*G(i,j)+0.144*B(i,j);  //加权平均值法

    (3)Gray(i,j)=G(i,j);  //最大值法,从2可以看出G的分量比较大所以可以直接用它代替

  在Python中直接提供了图像灰度化的函数cv.cvtColor(image, cv.COLOR_RGB2GRAY),还有其他的函数可以查看百度(若灰度化处理后图像对比度不高也可以进行直方图均衡化处理)。

  然后是图像二值化,如何选择一个合理的mean值是很关键的,这一部分网上也有许多很成熟的算法了,二值化以后的图像就是黑白图了,如果原始图像不是肉眼都很难识别的话这个时候就可以明显看出图片中的文字信息了,若是噪点比较多也可以采用降噪处理,在这一篇博客中有详细的代码(https://www.cnblogs.com/qqandfqr/p/7866650.html)。

  降噪以后就是识别了,需要的库就是pytesseract,这个库的安装较为复杂,当时费了一番功夫才成功,网上有现成的exe文件可以进行安装,安装以后需要进行环境的调试,网上都有详细的教程,需要耐心学习。

扫描二维码关注公众号,回复: 4836741 查看本文章

  另外在安装各种库的过程中也遇到各种问题,按照网上的各种千篇一律的教程不断配置环境,最终下了一个旧版的包就好了,因此大家如果实在找不到解决办法就换个版本的库试一试,很可能就成了^_^.

  不过这个工作最终失败了,因为我需要识别的图片本身质量不好,背景和文字颜色基本一致,但是这个方法在质量稍好的图片上使用是成功了的。对于质量较差的最好还是训练自己的文字库,也就是pytesseract中用到的。

猜你喜欢

转载自www.cnblogs.com/LDTSB-0101001/p/10242234.html