几乎 100% 识别验证码 - 基于完美的验证码识别库 3.2.1 和 Python 实现
一 效果展示:
测试的图片验证码接口:
可自动去拿到接口图片,识别成功显示在控制台,我自己做的识别库准确率基本99%,就是基本都能识别成功!(这里图片和控制台不一致是因为网站刷新了,不是识别错误哦)
二 实现流程:
1.制作自己对应的字模库
需要用到完美验证码3.2.1软件,字模库就相当于自己训练的数据模型吧,它会根据你的数据来识别验证码,库做的好,识别率可极高。最后这一步是导出一个字模库dat文件和字模库密码。具体的软件使用规则,可网上找找,基本很快学会。
(1)先对图片处理一下,更清晰减少影响:
(2)我的识别库示例:
2.弄python环境:
有了dat字模库和密码后,需要搭建环境,为python环境,win32。因为这个调用限制32位环境执行。作者是win7 32位,python3.7.1,亲测成功。代码中xxxx部分都是路径,自行修改对应路径。其中涉及的WmCode.dll为完美验证码软件里面的文件,注意!
import ctypes
import requests
# 验证码识别 基于完美验证码库3.2.1和python实现
dat_path = 'xxxxx\\皮卡丘靶场\\皮卡丘靶场.dat' # 制作好的识别库路径
dat_pwd = 'xxx' # 制作好的识别库打开密码
url = 'xxxx2/inc/showvcode.php?' # 要识别的验证码链接接口
save_path = 'xxxxx皮卡丘靶场\\验证码.png' # 验证码图片存到指定本地路径中
def download_image(url, save_path):
response = requests.get(url)
if response.status_code == 200:
with open(save_path, 'wb')as f:
f.write(response.content)
return save_path
else:
return None
# 定义DLL加载和使用的函数
dll = ctypes.windll.LoadLibrary("xxxx\\完美验证码识别3.21\\WmCode.dll")
if not dll.UseUnicodeString(1, 1):
print("DLL文件调用失败!")
exit()
if not dll.LoadWmFromFile(dat_path, dat_pwd):
print("加载验证码库失败!")
exit()
str_buffer = ctypes.create_string_buffer(20) # 创建缓冲区
local_path = download_image(url, save_path)
if not dll.SetWmOption(6, 80):
print("设置识别库选项参数失败!")
if (dll.GetImageFromFile(local_path, str_buffer)):
str = ctypes.cast(str_buffer, ctypes.c_char_p).value.decode("UTF-8")
print("识别验证码成功:", str)
else:
print("识别验证码失败!")
三 提醒总结:
python环境这里,提示urllib3和openssl不匹配报错的话,报错提示我升级openssl。我python输出openssl版本1.1.0,cmd输出openssl版本是1.1.1,一直在找切换python的openssl为系统的openssl版本,一直没有成功。。最后方法是降低urllib版本为1.26.6完美解决。
完美验证码3.2.1下载:
完美验证码识别引擎V3.2.1
百度网盘 请输入提取码百度网盘为您提供文件的网络备份、同步和分享服务。空间大、速度快、安全稳固,支持教育网加速,支持手机端。注册使用百度网盘即可享受免费存储空间https://pan.baidu.com/s/1jO_i7tUG6UgvoQzk6PgcJA
上一篇: 简单粗暴的验证码识别体验
下一篇: 验证码识别最佳解决方案,你不想试试吗?