爬虫:验证码识别准确率(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.servlet'request.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, dtype=np.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. 改进策略一:(对识别结果的改进)

(1)观察数据就可以看出,验证中的信息是由字母和数字组成,不存在特殊字符,由于图片中含有部分噪音,导致识别出现较大误差,如果去除识别结果中的特殊字符,只保留数字和字母,识别的效果会在一定程度上改进。

(2)真实数据都是只占四个位置,所以,可以在第一条的基础上,对字符的数量进行限制,设置为小于等于4

(3)真实数据中不存在大写字母,将识别结果一律转换为小写

  1. 改进策略二:(对数据来源的降噪处理)

(1)通过观察可以看到图片上有很多噪音,利用OpenCV对图片进行降噪处理

后续处理:下一篇博文:https://blog.csdn.net/qq_40962368/article/details/89331608

爬虫:验证码识别准确率(Tesseract-OCR)相关推荐

  1. 基于卷积神经网络的验证码识别(准确率87.5%+)

    目录 一.任务背景与目标概述 二.卷积神经网络简介 三.方案设计及实现过程 四.实验结果及分析与讨论 五.结论 实现代码 一.任务背景与目标概述 随着现代网络技术的飞速发展和提高,改善了我们的生活质量 ...

  2. 中文验证码识别 java_opencv Tesseract 验证码识别 文字识别

    环境搭建 安装Tesseract 下载64位 安装时可以选择语言包一路next 加入path环境变量后,查看是否成功,pycharm需要重新启动,否则找不到 C:\Program Files (x86 ...

  3. python爬虫验证码识别 (手把手教会你验证码识别)opencv图像处理 图片处理 验证码处理 降噪 简单易懂验证码处理

    前言:验证码是个烦人的小家伙!当然有很多打码平台,可以轻松解决!但可以自己来,干嘛靠别人!有技术不学是傻儿童!今天主要讲opencv来解决验证码!抱着怀里教你!让你向前迈一大步!详细讲,慢慢看!简单易 ...

  4. java 爬中 验证码识别_JAVA爬虫---验证码识别技术(一)

    Python中有专门的图像处理技术比如说PIL,可以对验证码一类的图片进行二值化处理,然后对图片进行分割,进行像素点比较得到图片中的数字.这种方案对验证码的处理相对较少,运用相对普遍,很多验证码图片可 ...

  5. Python爬虫验证码识别四

    反爬机制:验证码,  第三方自动识别(推荐) 注意:使用该平台识别验证码,必须将验证码事先下载到本地,然后再将本地存储的验证码提交给平台的示例程序进行识别操作. 使用打码平台识别验证码的编码流程:   ...

  6. java图形验证码识别-阿里云OCR(精准率50%)

    1. 通用文字识别 请求参数详情https://market.aliyun.com/products/57124001/cmapi028554.html?spm=5176.2020520132.101 ...

  7. [Python爬虫] 5-爬虫进阶(多线程爬虫/动态网页抓取/图形验证码识别)

    # I.多线程爬虫 # 1)概念:多线程是为了同步完成多项任务,通过提高资源使用效率来提高系统的效率 # 线程:火车的车厢,进程:火车头 # # 2)threading模块:专门提供用来做多线程编程的 ...

  8. Python 爬虫云验证码识别

    Python 爬虫验证码识别 1. 百度智能云 2. 使用 2.1 API 文档使用 2.2 SDK 文档使用 3. 获取古诗文网验证码 免责声明:自本文章发布起, 本文章仅供参考,不得转载,不得复制 ...

  9. 机器学习之验证码识别

    项目背景: 之所以做这个其实很久就有这个想法了,因为搞爬虫有大半年了,怕热很多网站,也模拟登陆了许多网站,包括知乎微博等,但是有个问题是,当我们遇到验证码的时候,就需要人工打验证码了,特别是用sele ...

最新文章

  1. andengine的convertLocalCoordinatesToSceneCoordinates方法
  2. 策划必须知道的经典理论
  3. 【代码学习】lua+redis分布式锁代码实现实例
  4. LeetCode 461 Hamming Distance(汉明距离)
  5. 解码base64_linux C++ Base64编解码
  6. Android平台基于RTMP或RTSP的一对一音视频互动技术方案探讨
  7. 生成纯字母随机编号的示例(大小写混合).sql
  8. 力扣28. 实现 strStr()(KMP算法,JavaScript)
  9. 车辆保险过户所需材料(郑州)
  10. 一种网页倒计时的实现
  11. linux简易离线词典下载手机版,Linux离线查询字典的方法
  12. 迈达斯导出html计算书,动态计算书模块功能-midas Civil 2011
  13. 基于SpringBoot和Vue的OA办公管理系统
  14. 一元二次方程组的简单解法
  15. iphone如何刷android系统升级,iphone4s如何刷成android系统?
  16. Oracle查询成绩高于成绩,Oracle认证考试成绩查询方法
  17. linux请求超时 ping_linux下ping命令使用详解
  18. 【论文笔记——DIM】Learning Deep Representations By Mutual Information Estimation and Maximization
  19. 贾扬清官宣:从阿里离职,或将投身AI创业!
  20. 08.甲流疫情死亡率

热门文章

  1. mysql windows ad_mysql windows安装
  2. bigdecimal如何做除法_二胎家庭如何平衡两个孩子的关系?聪明的父母都懂这四个法则...
  3. linux 串口工具_会C++就能开发Linux/Android应用!这款Yoxios X3串口屏火了...
  4. Probe:Android线上OOM问题定位组件
  5. java程序员的发展之路和职业规划
  6. Java多线程并发编程
  7. 论文浅尝 | 采用成对编码的图卷积网络用于知识图谱补全
  8. 技术动态 | 知识可视化,连接和探究知识之间的联系!
  9. Android官方开发文档Training系列课程中文版:手势处理之记录手指移动的轨迹
  10. excel字符串反转