web网站验证码自动识别

Posted 听海8

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了web网站验证码自动识别相关的知识,希望对你有一定的参考价值。

验证码自动识别

在很多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\\tessdata 配置到系统环境变量中。

我的计算机->右键属性打开界面->点击高级系统设置->在打开的系统属性界面,点击"环境变量"->在环境变量界面选择"系统变量"中选中path,然后点下面的编辑,打开编辑环境变量界面,把 C:\\Tesseract-OCR 添加到变量中,点"确定"。

 

配置完成,打开命令终端,输入:tesseract -v,可以看到版本信息。

 

如果出现报错,估计是环境变量没配置好。

到这里,我们就算安装完成了,但是,我们的系统还是无法识别中文的,我们要去下载简体汉字、繁体汉字语言包(上面提供了下载地址),下载好之后放到安装目录的tessconfigs目录下即可。

注意:因为没有配置全局变量,无法跨盘执行数据转换,这里我们在环境变量那增加一个配置信息。

在系统变量下面点击“新建”,变量名TESSDATA_PREFIX,变量值 C:\\Tesseract-OCR\\tessdata,然后点击确定,之后界面依次点击确定,完成设置。

 

1.5   tesseract-ocr 的使用

tesseract-ocr没有窗口界面,只能通过命令调用,调用需要 cmd 或 powershell。

Cmd 打开可以通过,开始->Windows系统->命令提示符或者按快捷键 win+r 输入cmd 后回车调用。

1.先制作2张图片。T_jpg1 和 T_png1。

 

2.在cmd命令行里面输入:

格式: tesseract 图片名称 生成的结果文件的名称  字库

例子:

tesseract C:\\image\\T_jpg1.jpg C:\\image\\T_jpg.txt -l chi_sim

然后回车。

【T_jpg1】是 C:\\image目录下的T_jpg1图片。

【T_jpg.txt】是指定结果输出到C:\\image\\T_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:\\Python35\\Lib\\site-packages\\pytesseract下的 pytesseract.py 文件。

 

修改pytesseract.py文件里的tesseract_cmd 值。

 

tesseract_cmd = \'C:\\Tesseract-OCR\\tesseract.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   (上面上传了很多相关学习的视频以及我书里的文章,大家想看视频,可以关注我的今日头条)

 

 

 

以上是关于web网站验证码自动识别的主要内容,如果未能解决你的问题,请参考以下文章

Python识别网站验证码

12306 售票网站新版验证码识别对抗

自动识别网站验证码?没错,Chrome就是这么屌!

这太猛了,Chrome自动识别网站验证码?

Web自动化如何借助OCR,自动识别验证码

通过内置浏览器和验证码识别登录网站