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的验证码识别的更多相关文章

  1. python基于OpenCV的人脸识别系统

    想获得所有的代码,请下载(来自我的CSDN): https://download.csdn.net/download/qq_40875849/11292912 主函数: from recognitio ...

  2. 基于 OpenCV 的人脸识别

    基于 OpenCV 的人脸识别 一点背景知识 OpenCV 是一个开源的计算机视觉和机器学习库.它包含成千上万优化过的算法,为各种计算机视觉应用提供了一个通用工具包.根据这个项目的关于页面,OpenC ...

  3. 【计算机视觉】基于OpenCV的人脸识别

    一点背景知识 OpenCV 是一个开源的计算机视觉和机器学习库.它包含成千上万优化过的算法,为各种计算机视觉应用提供了一个通用工具包.根据这个项目的关于页面,OpenCV 已被广泛运用在各种项目上,从 ...

  4. python使用tesseract-ocr完成验证码识别(模型训练和使用部分)

    一.Tesseract训练 大体流程为:安装jTessBoxEditor -> 获取样本文件 -> Merge样本文件 –> 生成BOX文件 -> 定义字符配置文件 -> ...

  5. python之web自动化验证码识别解决方案

    验证码识别解决方案 对于web应用程序来讲,处于安全性考虑,在登录的时候,都会设置验证码,验证码的类型种类繁多,有图片中辨别数字字母的,有点击图片中指定的文字的,也有算术计算结果的,再复杂一点就是滑动 ...

  6. java基于OpenCV的人脸识别

    基于Java简单的人脸和人眼识别程序 使用这个程序之前必须先安装配置OpenCV详细教程见:https://www.cnblogs.com/prodigal-son/p/12768948.html 注 ...

  7. 基于opencv的车牌识别系统

    前言 学习了很长一段时间了,需要沉淀下,而最好的办法就是做一个东西来应用学习的东西,同时也是一个学习的过程. 概述     OpenCV的全称是:Open Source Computer Vision ...

  8. 基于OpenCV的人脸识别[iOS开发笔记(2)]

    开始了OpenCV的试水工作了... 1.Get ready 在OpenCV中我们会使用函数cv::CascadeClassifier 来进行人脸检测.但是在使用本函数之前我们需要添加一个XML文件对 ...

  9. python基于万象优图识别图片中的中文

    最近一直在研究光学字符识别,即OCR.最开始在谷爹那里了解到了开源的Tesseract,可以拿来识别简单的英文和数字.但是识别中文的准确率并不高. 然后从Tesseract到Tesseract.js, ...

随机推荐

  1. Vue 新手学习笔记:vue-element-admin 之安装,配置及入门开发

    所属专栏: Vue 开发学习进步 说实话都是逼出来的,对于前端没干过ES6都不会的人,vue视频也就看了基础的一些但没办法,接下来做微服务架构,前端就用 vue,这块你负责....说多了都是泪,脚手架 ...

  2. HDU 5806 NanoApe Loves Sequence Ⅱ ——(尺取法)

    题意:给出一个序列,问能找出多少个连续的子序列,使得这个子序列中第k大的数字不小于m. 分析:这个子序列中只要大于等于m的个数大于等于k个即可.那么,我们可以用尺取法写,代码不难写,但是有些小细节需要 ...

  3. 「CSA Round #41」BFS-DFS

    题目链接 戳我 \(Description\) 给出一个图的\(bfs\)序和\(dfs\)序,构造出一个满足条件的图,边的扫描顺序为读入顺序 \(Solution\) 这个题还是很简单的. 先来看看 ...

  4. Partial Dependence Plot

    Partial Dependence就是用来解释某个特征和目标值y的关系的,一般是通过画出Partial Dependence Plot(PDP)来体现. PDP是依赖于模型本身的,所以我们需要先训练 ...

  5. python数据可视化示例柱状图

    from matplotlib import pyplot as plt import platform import pandas from pathlib import Path # 根据不同的平 ...

  6. OUC_Summer Training_ DIV2_#5

    这是做的最好的一次了一共做了4道题  嘻嘻~ A - Game Outcome Time Limit:2000MS     Memory Limit:262144KB     64bit IO For ...

  7. 内存数据库:memcached与redis技术的对比试验

    本文以高性能nginx服务器为应用背景,想利用缓存技术来减轻系统负荷,加快响应时间,从而增加web服务器的吞吐量. redis是一种分布式内存数据库,memcached是一种内存缓存技术,它们都采用k ...

  8. 阶段3 3.SpringMVC·_04.SpringMVC返回值类型及响应数据类型_3 响应之返回值是void类型

    定义先的标签 返回void 测试默认的跳转 虽然是404但是方法执行了. 默认请求了 testVoid.jsp这个页面.请求路径叫什么 就访问哪个jsp页面. 使用request请求转发 抛出的异常 ...

  9. TypeScript 编译目标(target)设置

    TypeScript的编译配置文件tsconfig.json中有许多配置项,本文简单对比编译目标环境的配置项(target)的设置.模块(module)不在本文讨论之内,是另外一个大话题. 实验对于t ...

  10. Implementing a Dynamic Vector (Array) in C(使用c实现动态数组Vector)

    An array (vector) is a common-place data type, used to hold and describe a collection of elements. T ...