使用Python基于OpenCV的验证码识别
Blog:https://blog.csdn.net/qq_40962368/article/details/89312429(Verification_Code_Identification)
步骤:
(1)获取批量验证码图片(利用某高校登录页面的验证码图片)
(2)为验证码图片做信息标注(手动标记,要确保百分百正确)
(3)利用Tesseract-OCR对验证码图片进行识别并测试识别效果
一、爬取某高校页面的验证码图片100张



打开网址:http://jwxt.qlu.edu.cn/verifycode.servlet,可以看到其验证码图片,且每刷新一次就会产生新的验证码图片
# 使用代理不断访问该网址获取验证码图片,并保存为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、创建ProxyHandler
proxy = random.choice(proxys)
proxy_handler = request.ProxyHandler(proxy)
# - 3、创建Opener
opener = request.build_opener(proxy_handler)
# - 4、导入Opener
request.install_opener(opener)
if __name__ == '__main__':
, ):
get_proxy()
time.sleep(random.randint(, ))
get_and_save_verify(i)

二、对验证码图片手动信息标注
将图片上的验证信息,加入至图片的名称内

三、基于Tesseract-OCR识别验证码并评估准确率
1)降噪处理
分别用高斯滤波、中值滤波和双边滤波对图像进行降噪处理(不断调整参数,确定出对应方法的最优参数) - 利用双边滤波函数进行的处理效果较好
# 对数据的处理 blur = cv2.GaussianBlur(img, (, ), ) # 高斯滤波函数 blur = cv2.medianBlur(img, ) # 中值滤波函数 blur = cv2.bilateralFilter(img, , , ) # 双边滤波函数
2)数据清洗
对识别结果进行数据清洗,将会提高识别的准确率
(1)验证码中的信息是由字母和数字组成,不存在特殊字符,由于图片中含有部分噪音,导致识别出现较大误差,如果去除识别结果中的特殊字符,只保留数字和字母,识别的效果会在一定程度上改进
(2)真实数据都是只占四个位置,所以,可以在第一条的基础上,对字符的数量进行限制,设置为小于等于4
(3)真实数据中不存在大写字母,将识别结果一律转换为小写
# 对结果的处理
st = re.sub(r'[^A-Za-z0-9]+', '', a)
st = st.lower()
:
b = st[-:]
else:
b = st
3)识别&评估
将图像的识别结果与藏在图片文件名中的标签进行比对,测试识别的准确率
import pytesseract
import cv2
import os
import numpy as np
import re
path = './verify_pictures/'
file_name = []
for k in os.walk(path):
file_name = k[-]
print('识别值' + '-----' + '真实值')
num =
for i in file_name:
img = cv2.imdecode(np.fromfile(path + i, dtype=np.uint8), )
# 对数据的处理
blur = cv2.bilateralFilter(img, , , ) # 双边滤波函数
a = pytesseract.image_to_string(blur)
# 对结果的处理
st = re.sub(r'[^A-Za-z0-9]+', '', a)
st = st.lower()
:
b = st[-:]
else:
b = st
true_value = i[-:-]
print(b + '-----' + true_value)
if a == true_value:
num +=
print())
识别值-----真实值 vxz2-----vxz2 zvil-----zv11 -----x1zz 3b3m-----3b3m -----nvnz venx-----vcmx x32n-----x32n vc3c-----vc3c 2zzz-----2zzz bz11-----bz11 b13m-----b13m -----nx1z ncx1-----ncx1 ninz-----xnnz nxve-----nxvc lyiz-----1v1z 3nvv-----3nvv -----xzcn xxzb-----xxzb ninn-----n1nn viv2-----v1v2 xlbn-----x1bn 3z12-----3z12 nnev-----nncv cz3m-----cz3m inx1-----1mx1 zx3c-----zx3c 2vbn-----2vbn nxn-----nxxn nvwn-----1mvn z31z-----z31z 识别的准确率为:0.2903225806451613
使用Python基于OpenCV的验证码识别的更多相关文章
- python基于OpenCV的人脸识别系统
想获得所有的代码,请下载(来自我的CSDN): https://download.csdn.net/download/qq_40875849/11292912 主函数: from recognitio ...
- 基于 OpenCV 的人脸识别
基于 OpenCV 的人脸识别 一点背景知识 OpenCV 是一个开源的计算机视觉和机器学习库.它包含成千上万优化过的算法,为各种计算机视觉应用提供了一个通用工具包.根据这个项目的关于页面,OpenC ...
- 【计算机视觉】基于OpenCV的人脸识别
一点背景知识 OpenCV 是一个开源的计算机视觉和机器学习库.它包含成千上万优化过的算法,为各种计算机视觉应用提供了一个通用工具包.根据这个项目的关于页面,OpenCV 已被广泛运用在各种项目上,从 ...
- python使用tesseract-ocr完成验证码识别(模型训练和使用部分)
一.Tesseract训练 大体流程为:安装jTessBoxEditor -> 获取样本文件 -> Merge样本文件 –> 生成BOX文件 -> 定义字符配置文件 -> ...
- python之web自动化验证码识别解决方案
验证码识别解决方案 对于web应用程序来讲,处于安全性考虑,在登录的时候,都会设置验证码,验证码的类型种类繁多,有图片中辨别数字字母的,有点击图片中指定的文字的,也有算术计算结果的,再复杂一点就是滑动 ...
- java基于OpenCV的人脸识别
基于Java简单的人脸和人眼识别程序 使用这个程序之前必须先安装配置OpenCV详细教程见:https://www.cnblogs.com/prodigal-son/p/12768948.html 注 ...
- 基于opencv的车牌识别系统
前言 学习了很长一段时间了,需要沉淀下,而最好的办法就是做一个东西来应用学习的东西,同时也是一个学习的过程. 概述 OpenCV的全称是:Open Source Computer Vision ...
- 基于OpenCV的人脸识别[iOS开发笔记(2)]
开始了OpenCV的试水工作了... 1.Get ready 在OpenCV中我们会使用函数cv::CascadeClassifier 来进行人脸检测.但是在使用本函数之前我们需要添加一个XML文件对 ...
- python基于万象优图识别图片中的中文
最近一直在研究光学字符识别,即OCR.最开始在谷爹那里了解到了开源的Tesseract,可以拿来识别简单的英文和数字.但是识别中文的准确率并不高. 然后从Tesseract到Tesseract.js, ...
随机推荐
- 异常处理(Exception Handling)
java里的异常处理(Exception)Exception 是在程序执行过程中发生的一些不希望发生的事情,这些事情如果不被好好处理,就会导致奇怪的结果或者是程序终结.Exception Handle ...
- 设置PyCharm中选择文本的背景颜色和代码中和选中单词相同单词的背景颜色
1 设置选中单词的背景颜色 首先进入File->Setting->Editor->Color Scheme后复制一个存在的颜色主题作为自定义的颜色主题(默认的颜色主题是无法修改的,也 ...
- eureka 服务实例实现快速下线快速感知快速刷新配置解析
Spirng Eureka 默认配置解读 默认的Spring Eureka服务器,服务提供者和服务调用者配置不够灵敏,总是服务提供者在停掉很久之后,服务调用者很长时间并没有感知到变化.或者是服务已经注 ...
- js小数点相乘或相除出现多位数的问题
最近做一个支付的项目需要做个计算器,所以发现了一个问题. 比如: 0.03/0.00003=999.9999999999999 0.0003*0.3=0.000029999999999999997 0 ...
- 微信小程序之条件判断
前文: 今天踩了一下午的坑,但是确实很简单的问题. 我说一下需求:扫描商品的二维码,从而判断,同一个二维码不可多次扫描: 点击扫一扫 会在灰色区域展示 扫描的商品信息,比如商品名称,商品码等,但是我们 ...
- 在WPF中使用AForge控件
AForge.NET 是用C#写的一个关于计算机视觉和人工智能领域的框架,它包括图像处理.神经网络.遗传算法和机器学习等. 要实现视频功能,需要使用AForge.Controls命名空间中的Video ...
- StringUtils字符串工具类左侧补齐(leftPad)、右侧补齐(rightPad)、左右两侧补齐(center)工具方法
这里使用的是 org.apache.commons.lang.StringUtils;下面是StringUtils工具类中字符串左侧补齐的方法,示例如下: //左侧补齐 第一个参数:原始字符串,第二个 ...
- mandatory argument 'crshome' is missing
1. 错误信息 在oracle 10.2.0.4 to 11.1.0.6 的各个版本中,尽管变量ORA_CRS_HOME设置正确,也会遇到如下错误: # ./diagcollection.pl -c ...
- C#连接内存数据库redis【1、安装配置】
Redis是一个不错的缓存数据库,读取数据速度效率都很不错.今天大家共同研究下redis的用法.结合网上的资料和自己的摸索,先来看下安装与配置把. 咱们主要看在WINDOWS上怎样使用REDIS数据库 ...
- ts-loader如何与vue单文件组件衔接
.ts-loader是如何与vue单文件组件衔接作用的 https://github.com/microsoft/TypeScript-Vue-Starter https://www.npmjs.co ...