验证码自动识别
在很多WEB网站登录的时候,都需要输入验证码,Python提供了一些库(例如常用的OCR库)来识别和使用在线图片中的文字。
将图像翻译成文字一般被称为光学文字识别(Optical Character Recognition, OCR)。可以实现OCR的底层库并不多,目前很多库都是使用共同的几个底层 OCR 库,或者是在上面 进行定制。
1.1 ORC库概述
在读取和处理图像、图像相关的机器学习以及创建图像等任务中,Python 一直都是非常出色的语言。虽然有很多库可以进行图像处理,但在这里我们只重点介绍:Tesseract
1.2 Tesseract
Tesseract 是一个 OCR 库,目前由 Google 赞助(Google 也是一家以 OCR 和机器学习技术闻名于世的公司)。Tesseract 是目前公认最优秀、最精确的开源 OCR 系统。 除了极高的精确度,Tesseract 也具有很高的灵活性。它可以通过训练识别出任何字体,也可以识别出任何 Unicode 字符。
1.3 tesseract-ocr4.0安装
tesseract-ocr4.0安装步骤如下:
1.软件下载。
软件下载网址:https://github.com/tesseract-ocr/tesseract/wiki/4.0-with-LSTM#400-alpha-for-windows
选择4.0.0-alpha for Windows下面 Windows Installer made with MinGW-w64 from UB Mannheim,点击UB Mannheim 进入另一网页。
进入得网址为 https://github.com/UB-Mannheim/tesseract/wiki
点击tesseract-ocr-w64-setup-v4.0.0-beta.1.20180608.exe,下载4.0版本的软件。
备注:Window系统的版本不一样下载对应的版本。
2. 双击安装软件,安装过程按照下面的图片指示进行。
注意:选择安装语言包,包含英文(默认安装)、中文、数学公式等,可以根据需要自己下载。
安装完后打开软件安装的目录。
备注:
如果不是做英文的图文识别,还需要下载其他语言的识别包https://github.com/tesseract-ocr/tesseract/wiki/Data-Files。
简体字识别包:https://raw.githubusercontent.com/tesseract-ocr/tessdata/4.00/chi_sim.traineddata
1.4 tesseract-ocr 的环境变量配置
安装完成之后,只能在软件所在的目录中才能够使用该软件,为了能将该软件在cmd下任意目录中调用,需要把 C:Tesseract-OCR essdata 配置到系统环境变量中。
我的计算机->右键属性打开界面->点击高级系统设置->在打开的系统属性界面,点击"环境变量"->在环境变量界面选择"系统变量"中选中path,然后点下面的编辑,打开编辑环境变量界面,把 C:Tesseract-OCR 添加到变量中,点"确定"。
配置完成,打开命令终端,输入:tesseract -v,可以看到版本信息。
如果出现报错,估计是环境变量没配置好。
到这里,我们就算安装完成了,但是,我们的系统还是无法识别中文的,我们要去下载简体汉字、繁体汉字语言包(上面提供了下载地址),下载好之后放到安装目录的tessconfigs目录下即可。
注意:因为没有配置全局变量,无法跨盘执行数据转换,这里我们在环境变量那增加一个配置信息。
在系统变量下面点击“新建”,变量名TESSDATA_PREFIX,变量值 C:Tesseract-OCR essdata,然后点击确定,之后界面依次点击确定,完成设置。
1.5 tesseract-ocr 的使用
tesseract-ocr没有窗口界面,只能通过命令调用,调用需要 cmd 或 powershell。
Cmd 打开可以通过,开始->Windows系统->命令提示符或者按快捷键 win+r 输入cmd 后回车调用。
1.先制作2张图片。T_jpg1 和 T_png1。
2.在cmd命令行里面输入:
格式: tesseract 图片名称 生成的结果文件的名称 字库
例子:
tesseract C:imageT_jpg1.jpg C:imageT_jpg.txt -l chi_sim
然后回车。
【T_jpg1】是 C:image目录下的T_jpg1图片。
【T_jpg.txt】是指定结果输出到C:imageT_jpg.txt文本文件中。
-l是指定使用的包。
【chi_sim】是中文识别包。
回车后,稍等运行结果,运行完成后,在目录C:image中看到T_jpg.txt文件,打开如图。
1.6 安装pytesseract
如果需要在Python上识别图片,需要安装Python版本的pytesseract库,安装pytesseract库之前,需要先 Pillow 库,使用命令:pip install Pillow。
接着再安装 pip install pytesseract,安装成功。
如果不安装Pillow库,就会报如下错误。
1.7 处理规范文字案例
新建一个test.png图片,保存在当前程序目录下。
例子:
import pytesseract
from PIL import Image
#如果不修改pytesseract.py文件,可以在程序中指定tesseract_cmd的运行文件
#tesseract_cmd = 'C:/Tesseract-OCR/tesseract.exe'
image = Image.open('test.png')
text = pytesseract.image_to_string(image)
print(text)
报错:
需要修改 C:Python35Libsite-packagespytesseract下的 pytesseract.py 文件。
修改pytesseract.py文件里的tesseract_cmd 值。
tesseract_cmd = 'C:Tesseract-OCR esseract.exe'
修改完之后,运行程序,如下:
1.8 识别简易的登录验证码
大多数网站生成的验证码图片都具有以下属性:
1.它们是服务器端的程序动态生成的图片。验证码图片的 src 属性可能和普通图片不太一 样,比如 <img src="WebForm.aspx?id=8AP85CQKE9TJ">,但是可以和其他图片一样进行下载和处理。
2.图片的答案存储在服务器端的数据库里。
3.很多验证码都有时间限制,如果你太长时间没解决就会失效。
4.常用的处理方法就是,首先把验证码图片下载到硬盘里,清理干净,然后用 Tesseract 处理图片,最后返回符合网站要求的识别结果。
例子:登录验证码图片
程序:
import pytesseract
from PIL import Image
#如果不修改pytesseract.py文件,可以在程序中指定tesseract_cmd的运行文件
#tesseract_cmd = 'C:/Tesseract-OCR/tesseract.exe'
image = Image.open('yzm1.png')
text = pytesseract.image_to_string(image)
print(text)
运行结果:
通过例子,可以看出,识别是有误差的,这就需要机器的自我学习,需要我们训练Tesseract。
-------------------------
个人今日头条账号: 听海8 (上面上传了很多相关学习的视频以及我书里的文章,大家想看视频,可以关注我的今日头条)