网站登录一般会使用验证码来识别是否是机器操作,重复登录,消耗服务器资源。
验证码大概有以下几大类:
1:图形验证码(数字字母)
2:拖动滑块验证码
3:点击文字验证码
4:点击验证码
5:绘制图案(宫格)验证码
前四种验证码比较常见,第五种验证码我还没有遇到过。
1:安装 Tesseract
图形验证码的识别,我这里尝试自己定义一个OCR文字识别方法。
Python文字识别需要使用到第三方文字识别工具Tesseract
Tesseract的安装我们可以移步到该网址 digi.bib.uni-mannheim.de/tesseract/
选择你需要的版本下载就好,可能较慢,需要等待一下。
我是在windows上做测试,双击安装就好了。安装完成之后,我们需要知道软件对应的安装位置。要将其添加到电脑本机的系统变量中。
2:配置系统环境变量
1:我的电脑右键->属性->高级->环境变量->系统变量->新建(变量名:JAVA_HOME 变量值: C:\Program Files\Tesseract-OCR
2:同一个地方找到path->双击->在变量值后面添加-> C:\Program Files\Tesseract-OCR
3:为了不重启就生效:将刚刚path下的所有值复制,打开cmd在命令提示符里输入:
set path=刚才复制的内容。
3:配置中文语言包
Tesseract默认是没有中文选项的,但是,英文水平有限,配置一下中文显示,下载地址:
tesseract-ocr.github.io/tessdoc/Dat…
页面是全英文显示,页面搜索chinese,找到简体中文选项,下载即可。
下载完成后我们需要放到Tesseract的路径下的tessdata目录下。
4:安装其他模块
除了上面的步骤,我们还需要下载两个模块:
pip install pytesseract
pip install pillow
第一个是用于文字识别的,是Tesseract对应的python模块,第二个是用于图片读取的。接下来我们就可以进行文字识别了。
这里说一个我遇到的坑,一般在windows上安装模块,我都是用anaconda的图形界面进行操作安装,但是pytesseract在anaconda是找不到的。必须使用命令行执行上边的命令安装。
5:文字识别。
需要识别的图片如下:
我这里直接贴代码了:
#!/usr/bin/python3
# -*- coding: utf-8 -*-
# @Time : 2022/3/4 15:21
# @Author : camellia
# @Email : 805795955@qq.com
# @File : ocrself.py
# @Software: PyCharm
import pytesseract
from PIL import Image
# 读取图片
im = Image.open('./yanzhengma.jpg')
# 识别文字
string = pytesseract.image_to_string(im)
print(string)
运行报错:
pytesseract.pytesseract.TesseractNotFoundError: tesseract is not installed or it's not in your PATH. See README file for more information.
解决方案:
找到python的安装路径下的pytesseract: 例如我的是
C:\Users\camellia.conda\envs\python37\Lib\site-packages\pytesseract
进入这个目录,打开当前目录下的pytesseract.py文件
搜索:tesseract_cmd = 'tesseract'
将其改为:tesseract_cmd = ‘OCR的安装路径下的tessract.exe'
再次运行上边的代码,输出以下的文字:
Naexkamiin , aba ‘al.
De® P, RERDRESK.
AEGAMES , BFSRIRSA.
WES REAEE , RAR.
为什么会这个样子呢?Tesseract默认是英文的,我们需要将其指定语言为中文,代码如下:
import pytesseract
from PIL import Image
# 读取图片
im = Image.open('bbb.png')
# 识别文字,并指定语言
string = pytesseract.image_to_string(im, lang='chi_sim')
print(string)
运行代码,输出:
风 急 天 高 猿 喝 哀 , 渚 清 沙 白 鸟 飞 回 。
无 边 落 育 下 , 不 尽 长 江 滚 滚 来 。
万 里 悲 秋 常 作 客 , 百 年 多 病 独 登 台 。
艰 难 苦 恨 繁 霜 鬓 , 漫 倒 新 停 浊 酒 杯 。
这里的识别还是有错误文字的。具体哪个字错了,还请各位看客慢慢找。
效果比较差强人意。
6:验证码识别:
识别结果如下:
e
7
四个数字,只识别出来了一个7
换一张背景有杂点的验证码图片
这张验证码直接识别不出来。
7:汽车牌照识别
输出:
ise AOlet!
未识别出任何结果
输出:
陡 “ 人 ,
D053 14
输出:
80295
上边的四张车牌照图片,我使用上篇中使用的超级鹰平台测试
第一张车牌:识别超时
第二张车牌:识别超时
第三张车牌:识别超时
第四张车牌:识别结果 80025
这……果然,Tesseract的文字识别,对于正儿八经的字体,识别率还可以,但是,其他的就比较差强人意了。
当然,这只是识别原图,关于汽车牌识别的问题,也许将图片二值化为黑白后应该能更好一点。后期会慢慢补充。
有好的建议,请在下方输入你的评论。