Python利用OCR和PIL库识别图形验证码(细数那些坑)

Python识别图形验证码主要用到OCR的tesserocr第三方库,这个库是对tesseract库的Python API封装,在安装tesserocr之前需要先安装tesseract

But,windows安装不论是pip安装还是直接通过whl文件安装都有无数的坑在前面等着你

细说遇到的各种坑

  • pip安装,报一堆错误,还需要安装Microdoft Visual C++ 14.0文件,对windows兼容太不友好,还是适合Linux系统下安装,笔者也没试过;
  • conda安装,有兴趣可以试试
  • whl文件安装,第一次安装运行报ImportError异常,说找不到dll文件,于是各种搜索,各种试错,各种失败,找到一篇博客说是版本的原因重新下载尝试了下起码报错原因不一样了..........

tesseract的版本和tesserocr的版本需要对应
tesseract-ocr-w64-setup-v4.0.0-beta.1.20180608.exe 要与 tesserocr-2.2.2 匹配;

  • 最终运行遇到 RuntimeError: Failed to init API, possibly an invalid tessdata path: ****异常;又是一顿搜索,说是tessdata目录的原因,需要将安装目录下的tessdata目录复制放到Python的目录下,尝试之后依然报错,遂放弃,经过一番探索找到一个非常nice友好的另外的一个第三方库pytesseract

开始安装:

  1. tesseract的安装 下载地址,按照对应版本下载,我是windows系统64,那么选择图示版本下载安装

    image.png

  2. 下载完成之后点击安装,来到图示下步建议不要勾选红圈的两项,这个是下载字体库,需要梯子,没有的话下载会非常慢,后期可以自行下载字体放到对应的目录下即可。字体下载地址: https://github.com/tesseract-ocr/tessdata

image.png

3.配置tesseract的环境变量;打开环境变量配置,点击path,编辑,将tesseract的安装目录添加进去

4.配置tesseract的语言的环境变量;tesseract安装目录下有个tessdata目录用来存放字体的,新建一个系统变量,变量名称为TESSDATA_PREFIX
变量值就是tessdata的路径


image.png

检测下是否配置成功,进入cmd 执行 tesseract -v,出现以下图示则配置成功


image.png

查看已经安装的字体


image.png
  1. 接下里安装pytesseract;pytesseract默认支持tiff、bmp格式图片,只有在安装PIL之后,才能支持jpeg、gif、png等其他图片格式;
pip install pytesseract

6.安装PIL图像识别库,PIL库仅支持Python2.7,Python3可以选择安装pillow库;

pip install pillow
  1. 代码测试,将图示验证码识别


    image.png
from PIL import Image

import pytesseract

image = Image.open('1.jpg')

print(pytesseract.image_to_string(image))

可以看到正确识别出了验证码


image.png

9.以上只是对简单的验证码的识别,遇到有波浪线和粘贴比较紧的识别率就不是很高了,需要用到灰度处理、降噪、二值化等操作提高识别率,再就是利用机器学习训练字体,终极武器就是打码平台了。

你可能感兴趣的:(Python利用OCR和PIL库识别图形验证码(细数那些坑))