图片验证码现在已经不怎么多了,打码平台都已经没什么市场了,现在随便一个现成的通杀库都可以识别所有类型的图片验证码,于是乎稍微大一点的网站都会使用滑块、点选这些行为验证来防刷、防爬了!
一般很多图片验证码、各种滑块都是使用Python来训练的,往大了说这些都属于神经网络的事情了,需要大量的数据、算法、机器学习、深度学习知识等,并且如果做好了具有很高的商业价值,因此开源的比较少。
这里介绍一个比较优秀的图像识别开源库:Tesseract
将图片翻译成文字一般被成为光学文字识别(Optical Character Recognition),简写为OCR
Tesseract
Tesseract是一个OCR库,目前由谷歌赞助,Tesseract是目前公认最优秀、最准确的开源OCR库。Tesseract具有很高的识别度,也具有很高的灵活性,他可以通过训练识别任何字体。
安装
Windows系统:
在以下链接下载可执行文件,然后一顿点击下一步安装即可(放在不需要权限的纯英文路径下):/tesseract-ocr/
Linux系统:
可以在以下链接下载源码自行编译:
/tesseract-ocr/tesseract/wiki/Compiling
或者在ubuntu下通过以下命令进行安装:
sudo apt install tesseract-ocr
Mac系统:
用Homebrew即可方便安装:
brew install tesseract
设置环境变量:
安装完成后,如果想要在命令行中使用Tesseract,需要设置环境变量
Mac和Linux在安装的时候就默认已经设置好了
Windows下把tesseract.exe所在的路径添加到PATH环境变量中即可
还有一个环境变量也需要设置:训练用的数据文件路径
在环境变量中,添加ESSDATA_PREFIX=D:\path_to_tesseractdata\teseractdata
在命令行中使用tesseract识别图像
识别图片:
设置好环境变量后,使用命令:tesseract 图片路径 文件路径
tesseract a.png a
会识别出a.png中的图片,并且把文字写入到a.txt中。如果不想写入文件直接想显示在终端,不加文件名就可以了
查看tesseract下的一些属性和方法:
tesseract -h
查看当前有哪些识别库:
tesseract --list-langs
识别中文:
tesseract a.png a -l chi_sim
-l 是指定识别库 chi_sim是一个中文的识别库,不指定-l 默认是英文识别库,tesseract安装后自带的有几个识别库,也可以去网上下载其他识别库 一些别人训练好的库 等等…
在代码中使用tesseract识别图像
在Python代码中操作tesseract,使用pytesseract
pytesseract
pip install pytesseract
并且需要读取图片,需要借助一个第三方库:PIL
通过pip list 可以查看是否已安装。如果没有安装,通过pip的方式安装:
pip install PIL
示例代码:
# 导入pytesseract库import pytesseract# 导入Image库from PIL import Image# 指定tesseract.exe所在的路径pytesseract.pytesseract.tesseract_cmd = r'D:\ProgramApp\TesseractOCR\tesseract.exe'# 打开图片image = Image.open("a.png")# 调用image_to_string将图片转换为文字# text = pytesseract.image_to_string(image)text = pytesseract.image_to_string(image, lang='chi_sim')# lang='chi_sim',指定识别训练库,通过不同的识别库来识别不同类型文字或图片信息,不写默认是英文识别库# 每个识别训练库所对应的名字可以通过命令提示符来查看# print(text)texts = []for t in text:if t == ' ':continuetexts.append(t)a = ''.join(texts)print(a)
训练库下载:
/tesseract-ocr/tessdata
下载后放在tesseract安装目录中的tessdata文件夹就行了
import pytesseractfrom urllib import requestfrom PIL import Imageimport timepytesseract.pytesseract.tesseract_cmd = r"D:\ProgramApp\TesseractOCR\tesseract.exe"while True:captchaUrl = "/vcode/create?from=register&refresh=1513081451891"request.urlretrieve(captchaUrl,'captcha.png')image = Image.open('captcha.png')text = pytesseract.pytesseract.image_to_string(image)# print(text)texts = []for t in text:if t == ' ':continuetexts.append(t)a = ''.join(texts)print(a)time.sleep(2)
pytesseract.pytesseract 和 直接pytesseract一样
补充:
python的PIL模块可以从图片获得图片每个像素点的颜色信息,下面的代码演示了如何获取图片所有点的颜色信息和每种颜色的数量。
from PIL import Imageimage = Image.open("jb51.gif")image.getcolors()
执行结果:
..., (44, (72, 64, 55, 255)), (32, (231, 208, 141, 255)), (2368, (70, 64, 55, 255)),(1, (187, 210, 216, 255)), (256, (68, 64, 57, 255)), (592, (67, 80, 103, 255)),(2, (198, 204, 214, 255), ...
返回结果是一个元祖,每个元素的格式如下: (44, (72, 64, 55, 255)),其中(72,64,55,255)表示RGBA颜色,A就是透明度,44表示jb51.gif这张图片中包含了44个这种颜色。
拓展:
/lcawen/articles/7040005.html
/iodjSVf8U1J7KYc/article/details/79308086
/int93/article/details/78954129