开展网站建设服务,北京app建设 网站开发公司,wordpress 微信朋友圈,响应式网页设计平台爬虫#xff1a;验证码识别准确率#xff08;Tesseract-OCR#xff09; 现在的网站为了防止人们轻易的获取登陆后的页面信息#xff0c;在登陆上设置了很多的障碍#xff0c;验证码就是其中的一种#xff0c;所谓道高一尺#xff0c;魔高一丈#xff0c;人们总能想出办… 爬虫验证码识别准确率Tesseract-OCR 现在的网站为了防止人们轻易的获取登陆后的页面信息在登陆上设置了很多的障碍验证码就是其中的一种所谓道高一尺魔高一丈人们总能想出办法来予以应对但是应对的成本可能在不断加大这在一定程度上提升了反反爬虫的门槛。本文的目的在于验证Tesseract对普通验证码图片的识别准确率以便为后续的工作做准备。 Tesseract是一个开源的 OCR 引擎可以识别多种格式的图像文件并将其转换成文本由HP公司开发后来由Google进行维护。下载地址https://digi.bib.uni-mannheim.de/tesseract/ 有关的安装教程和使用方法大家可以直接去百度很多博主对此介绍的非常详细这篇博文的主要目的是利用该OCR来分析它对验证码识别的准确率。所以对于安装及有关环境的配置就不再多讲了。 思路1获取批量验证码图片利用某高校登录页面的验证码图片 2为验证码图片做信息标注虽然很不想手动标记但这是必须的因为我们要确保百分百正确3利用Tesseract-OCR对验证码图片进行识别并测试识别效果4后续工作思路如何提高识别的精度。一、爬取某高校页面的验证码图片100张 打开该网址就可以看到该验证码图片并且没刷新一次就会产生新的图片 使用代理不断访问该网址获取验证码图片并保存为png格式文件
from urllib import request
import time
import random
def get_and_save_verify(i):try:url http://jwxt.qlu.edu.cn/verifycode.servletrequest.urlretrieve(url, ./verify_pictures/ verify_ str(i) .png)print(第 str(i) 张图片下载成功)except Exception:print(第 str(i) 张图片下载失败)def get_proxy():# 使用代理步骤# - 1、设置代理地址proxys [{http: 39.137.69.10:8080},{http: 111.206.6.101:80},{http: 120.210.219.101:8080},{http: 111.206.6.101:80},{https: 120.237.156.43:8088}]# - 2、创建ProxyHandlerproxy random.choice(proxys)proxy_handler request.ProxyHandler(proxy)# - 3、创建Openeropener request.build_opener(proxy_handler)# - 4、导入Openerrequest.install_opener(opener)if __name__ __main__:for i in range(1, 101):get_proxy()time.sleep(random.randint(1, 4))get_and_save_verify(i) 保存之后的图片 二、对验证码图片手动信息标注将图片上的验证信息放入图片的名称内便于后续测试
这个过程比较无聊标注完成之后的图片是这样的无论数据分析还是图像处理信息标注很多时候对于程序员来说都是一个体力活眼力活 三、利用Tesseract-OCR进行图像信息识别并将图像的识别结果与藏在图片文件名中的标签进行比对测试识别的准确率
这里涉及到图像识别和数据处理利用pytesseract库来利用tesseract接口来进行识别并比较结果输出准确率
import pytesseract
import cv2
import os
import numpy as np
path F:/文件存放处/picture2/file_name []
for k in os.walk(path):file_name k[-1]print(识别值 ----- 真实值)
num 0
for i in file_name:img cv2.imdecode(np.fromfile(path i, dtypenp.uint8), 1)a pytesseract.image_to_string(img)true_value i[-8:-4]print(a ----- true_value)if a true_value:num 1print(识别的准确率为 str(num/100)) 查看结果 四、分析结果
改进结果不涉及对识别方法的改进只涉及对数据和识别结果的改进。
通过测试结果可以看出识别的准确率并不是很好通过下面的两种改进策略来提高识别的准确率或者两者联合使用改进策略一对识别结果的改进
1观察数据就可以看出验证中的信息是由字母和数字组成不存在特殊字符由于图片中含有部分噪音导致识别出现较大误差如果去除识别结果中的特殊字符只保留数字和字母识别的效果会在一定程度上改进。
2真实数据都是只占四个位置所以可以在第一条的基础上对字符的数量进行限制设置为小于等于4
3真实数据中不存在大写字母将识别结果一律转换为小写
改进策略二对数据来源的降噪处理
1通过观察可以看到图片上有很多噪音利用OpenCV对图片进行降噪处理
后续处理下一篇博文https://blog.csdn.net/qq_40962368/article/details/89331608