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. Linux停止被占用的端口

    查找被占用的端口:netstat -lnp|grep 80 查看80端口被那些服务占用. kill掉该进程 kill -9 5574 然后在去查看一下80被占用的情况netstat -lnp|grep ...

  2. javascript 取小数点后几位四种方法

    javascript 取小数点后几位方法总结 Javascript取float型小数点后两位,例22.123456取成22.12,如何做? 1.通过substring截取. function getn ...

  3. Laravel find in set排序

    做项目遇到个需求,需要对结果集中的数据进行指定规则的顺序排列.例如,用户状态有四种: 0=>未激活:1=>正常:2=>禁用:3=>软删除 现在的需求是,我要按照:正常-> ...

  4. 解决Git 报错:warning: LF will be replaced by CRLF

    Ruby命令 $ git init $ git add . 系统出现如下错误:warning: LF will be replaced by CRLF 原因分析:CRLF -- Carriage-Re ...

  5. 使用 Itext 生成PDF字节数组(文件流不落地)

    package com.ulic.gis.customerCenter.controller; import java.io.ByteArrayOutputStream; import java.io ...

  6. iOS即时通讯之CocoaAsyncSocket源码解析三

    原文 前言 本文实例Github地址:即时通讯的数据粘包.断包处理实例. 本文旨以实例的方式,使用CocoaAsyncSocket这个框架进行数据封包和拆包.来解决频繁的数据发送下,导致的数据粘包.以 ...

  7. AppInfoProvider提供应用信息的工具类

    package com.loaderman.demo; import android.content.Context; import android.content.pm.ApplicationInf ...

  8. spring Ioc/DI的理解

    学习spring的童鞋都知道,spring中有两个非常重要的点,Ioc(控制反转)与DI(依赖注入),对于初级玩家来说,这两个概念可能有点模棱两可的感觉,今天就谈下自己的一点理解,不足请多多指教!!! ...

  9. 使用 joblib 对 Pandas 数据进行并行处理

    使用 joblib 对 Pandas 数据进行并行处理 如果需要对一个很大的数据集进行操作,而基于一列数据生成新的一列数据可能都需要耗费很长时间. 于是可以使用 joblib 进行并行处理. 假设我们 ...

  10. 基于durid的JDBCUtils工具类

    1.JDBCUtils类 package com.alphajuns.utils; import com.alibaba.druid.pool.DruidDataSourceFactory; impo ...