验证码一直作为识别人类和机器的工具。作为广为使用的限制机器访问的利器。识别验证码基本上有三个方案。 一:人眼识别,手动输入 二:Tesseract对简单验证码的识别。 三:半自动的云打码平台,帮你24小时识别验证码。
第一种最简单啦,只需要将验证码图片提取下来,自己手动识别就行,但是效率低下,繁琐。对于需要经常大量识别验证码的情况,更本不可取。
今天就来讲下第二种。对于简单验证码的自动识别。 基于python 3.6 ,Windows系统
所需工具:
PIL (python图片处理库)
pytesseract (python库,用于调用Tesseract 引擎进行验证码识别)
Tesseract-OCR (一个验证码识别引擎,google开源项目)
安装:
pip3 install pillow ( pillow 是windows下的PIL库的精简版,使用方法同PIL一样)
pip3 install pytesseract
下载Tesseract-OCR 引擎windows安装版,网址:
http://digi.bib.uni-mannheim.de/tesseract/tesseract-ocr-setup-3.05.01dev-20170510.exe
默认选线安装即可。安装位置可自定义,假设为:H:\Program Files\Tesseract-OCR
好的,然后直接在python中就可使用了
如果你自定义了安装位置,则会报错,找不到文件,解决方法如下:
1 . 到python安装文件下找到 site-packages/pytesseract/pytesseract.py 修改里面内容:
2 . 除了Tesseract 引擎位置,还需要tessdata文件夹里的数据。自定义 tessdata文件夹路径:还是在pytesseract.py 文件中修改:
OK,这样再次运行就可以得到识别后的结果,但是此引擎的只适用于简单验证码,复杂一点的验证码,可以借助PIL库进行图片处理,比如切块,去噪,二值化等等。
但对于一些特别复杂的验证码,这个方案就没办法了。论识别率的话,最高的只有云打码平台了,毕竟也是靠人眼识别。另外,机器学习或许可以一试。
第一种最简单啦,只需要将验证码图片提取下来,自己手动识别就行,但是效率低下,繁琐。对于需要经常大量识别验证码的情况,更本不可取。
今天就来讲下第二种。对于简单验证码的自动识别。 基于python 3.6 ,Windows系统
所需工具:
PIL (python图片处理库)
pytesseract (python库,用于调用Tesseract 引擎进行验证码识别)
Tesseract-OCR (一个验证码识别引擎,google开源项目)
安装:
pip3 install pillow ( pillow 是windows下的PIL库的精简版,使用方法同PIL一样)
pip3 install pytesseract
下载Tesseract-OCR 引擎windows安装版,网址:
http://digi.bib.uni-mannheim.de/tesseract/tesseract-ocr-setup-3.05.01dev-20170510.exe
默认选线安装即可。安装位置可自定义,假设为:H:\Program Files\Tesseract-OCR
好的,然后直接在python中就可使用了
import pytesseract
from PIL import Image
img = Image.open('C:\\Users\Administrator\Desktop\\test-european.jpg')
s = pytesseract.image_to_string(img)
print(s)
如果你自定义了安装位置,则会报错,找不到文件,解决方法如下:
1 . 到python安装文件下找到 site-packages/pytesseract/pytesseract.py 修改里面内容:
# CHANGE THIS IF TESSERACT IS NOT IN YOUR PATH, OR IS NAMED DIFFERENTLY
# tesseract_cmd = 'tesseract'
tesseract_cmd = 'H:\Program Files\Tesseract-OCR\\tesseract.exe'
指定Tesseract 识别引擎的绝对路径。
2 . 除了Tesseract 引擎位置,还需要tessdata文件夹里的数据。自定义 tessdata文件夹路径:还是在pytesseract.py 文件中修改:
command = [tesseract_cmd, input_filename, output_filename_base]
my_env = {"TESSDATA_PREFIX":"H:\Program Files\Tesseract-OCR\\tessdata"} #自定义的文件夹路径
if lang is not None:
command += ['-l', lang]
if boxes:
command += ['batch.nochop', 'makebox']
if config:
command += shlex.split(config)
# 将文件夹路径传递给对象,覆盖原路径
proc = subprocess.Popen(command,env=my_env , stderr=subprocess.PIPE)
OK,这样再次运行就可以得到识别后的结果,但是此引擎的只适用于简单验证码,复杂一点的验证码,可以借助PIL库进行图片处理,比如切块,去噪,二值化等等。
但对于一些特别复杂的验证码,这个方案就没办法了。论识别率的话,最高的只有云打码平台了,毕竟也是靠人眼识别。另外,机器学习或许可以一试。