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

 爬虫:验证码识别准确率(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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/490731.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【赠书】21世纪科技竞争的核心是超级智能的控制权

这篇文章是根据《崛起的超级智能:互联网大脑如何影响科技未来》的核心观点对21世纪世界科技竞争的判断。《崛起的超级智能》受到张亚勤、刘慈欣、周鸿祎、王飞跃、约翰.翰兹等专家的联合推荐。作者刘锋,2019年7月由中信出版社出版。《崛起的超级智能》主…

MATLAB中的微积分运算(数值符号)

显然这个函数是单词differential(微分)的简写,用于计算微分。实际上准确来说计算的是差商。 如果输入一个长度为n的一维向量,则该函数将会返回长度为n-1的向量,向量的值是原向量相邻元素的差,于是可以计算一…

电脑手写板_点到之处妙笔生花,实用平板电脑手写电容笔推荐

如今随着科技的不断发展,人们生活水平也在逐步地提升。除了手机以外,很多人都会给自己入手一款平板电脑。不管是观看电影还是游戏办公,大尺寸的屏幕都能带来更加清晰的视觉效果。而电容笔的出现,可以说跟平板电脑是一组巧妙的搭配…

图像处理:给验证码图片做降噪处理及数据清洗

上一篇博文:https://blog.csdn.net/qq_40962368/article/details/89312429 图像处理:给验证码图片做降噪处理及数据清洗 在上一篇博文中,tesseract对验证码识别的准确率还是非常低的,改进措施的话,可以从三个方面来考…

X-Brain:如此美丽可爱的大脑工作原理

这个帖子很好地提醒了我,为什么我愿意跟如此美丽可爱的大脑一起工作。因为真正的大脑非常不可爱,长得也难看。我们从外往里看吧。生物学有时似乎非常让人满意,比如你的头上有一个真正的俄罗斯套娃。你有头发,然后是头皮&#xff0…

SpringMVC注解@RequestParam全面解析

在SpringMVC后台控制层获取参数的方式主要有两种,一种是request.getParameter("name"),另外一种是用注解RequestParam直接获取。这里主要讲这个注解 一、基本使用,获取提交的参数 后端代码: Java代码 RequestMapping(…

MATLAB(六)数据处理

一、Matlab中的默认数据文件mat文件 例1、把Matlab工作空间中的数据矩阵a、b、c保存到数据文件data1.mat中。 >> a [1, 2, 3] a 1 2 3 >> b [4, 5, 6] b 4 5 6 >> c [7, 8, 9] c 7 8 9 >> save data1 a b c 例2、把例1生…

java怎么安装_Windows、Linux、Mac下安装JDK

前言在知乎上看到很多童鞋在学Java的时候,因为安装jdk时没有正确的配置,会遇到很多问题。所以决定今天写一下jdk在Windows、Mac、Linux下都怎么安装。下载JDK“巧妇难为无米之炊”,所以首先我们要去Oracle官网上下载jdk,Java8下载…

200年历史的神经科学难题,取得重大突破

图片来源:Diogo Matias,Champalimaud基金会来源:中国生物技术网北京时间8月13日,发表在《Nature Neuroscience》上的一项研究,来自葡萄牙里斯本Champalimaud未知中心的研究团队解决了一个长达200年历史的神经科学难题。…

关系数据库SQL之可编程性触发器

前言 前面关系数据库SQL之可编程性函数(用户自定义函数)一文提到关系型数据库提供了可编程性的函数、存储过程、事务、触发器及游标,前文已介绍了函数、存储过程、事务,本文来介绍一下触发器的使用。(还是以前面的银行系统为例) 概…

图像处理:图像特效之油画效果

利用OpenCVpython对图片进行处理产生油画的效果 算法可以分为五步: 1、获取图像的灰度(gray)图片2、设计一个小方框(4x4 or 8x8 or 10x10等),统计每个小方框的像素值3、将0-255的灰度值划分成几个等级,并把第二步处理…

socket模拟http的登陆_python模拟登陆知乎(最新版)

为啥要写这一篇文章呢?(主要是qq群内有人在模拟登陆知乎,一直不成功)然后我抓包看了下,发现知乎登陆页已经改版了,而且难度大大提高了。开始抓包首先内,还是打开知乎首页,然后输入账…

图像识别:利用KNN实现手写数字识别(mnist数据集)

图像识别:利用KNN实现手写数字识别(mnist数据集) 步骤: 1、数据的加载(trainSize和testSize不要设置的太大) 2、k值的设定(不宜过大) 3、KNN的核心:距离的计算 4、k个最近…

一个与生命起源有关的悖论终于得到了解决

来源:原理当Caitlin Cornell低头看显微镜时,她看见黑色的背景下浮现出一些大大的明亮斑点。它们就像微缩的太阳,在深色的太空幕布下闪耀着光芒。Conell回忆起把这些斑点展示给她的导师Sarah Keller时的兴奋,那时她们意识到&#x…

python ffmpy3与FFmpeg的安装

python ffmpy3与FFmpeg的安装 安装命令: pip install ffmpy3 去官网下载FFmpeg,根据自身电脑版本下载相应安装包 http://ffmpeg.org/download.html from ffmpy3 import FFmpeg ff FFmpeg(inputs{test.mp4: None},outputs{output.ts: None}) print(f…

千兆网线8根线定义图_家中的网线断裂/不够长,如何接线才最合适?

网线作为互联网时代不可或缺的主角,更是家装布线和工程施工中的常客。网线相对来说是很脆弱的,特别是一些质量一般的网线,在很多情况下都可能会被弄断,比如老鼠咬、过度拉伸、摆在地下人踩的人多了、电起火烧断、不小心被夹断等等…

中国决定以“六大政策”推动新一代人工智能发展

来源:智造智库以新一代人工智能为代表的新一轮科技革命和产业变革已经呈现出强大的影响力和生命力,人工智能技术对生产、流通、消费等形成高度渗透、跨界融合,新业态、新模式不断涌现,给以往的产业生态、社会分工、行业和企业边界…

第三次站立会议

项目进展:项目主体开始实施,我们在前期分工准备的同时开始讨论连连看的具体式样,开始上网参考其他项目的式样,搜集图片素材,为具有我们特色的连连看项目做准备。 存在问题:搜集素材时组员对项目的风格式样见…

ffmpy3与ffmpeg的简单使用

安装 python ffmpy3与ffmpeg的安装 https://blog.csdn.net/qq_40962368/article/details/90748852 ffmpy3的介绍: https://ffmpy3.readthedocs.io/en/latest/ ffmpy3是一个用于FFmpeg的Python包装器,最初是从ffmpy项目派生出来的。它根据提供的参数及…

5G将改变技术格局的8个原因(上)

来源:CESAsia5G是引领第四次工业革命的通用技术。为了说明5G如何推动技术创新的飞跃,威讯(Verizon)首席执行官卫翰思(Hans Vestberg)在2019年国际消费电子产品展(CES 2019)主题演讲中罗列了5G所带来的八项有可能改变世界的能力。通用能力1和2&#xff1a…