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

本文通过使用双边滤波降噪和数据清洗方法,显著提高了验证码图片识别的准确率,从初始的14%提升至53%,详细介绍了处理过程和技术细节。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

上一篇博文:https://blog.csdn.net/qq_40962368/article/details/89312429

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

在上一篇博文中,tesseract对验证码识别的准确率还是非常低的,改进措施的话,可以从三个方面来考虑:

  • 1、数据的来源

        数据的质量还是非常影响识别的精确度的,验证码图片中含有很多的噪声,会影响tesseract对图片的判断,所以要对图片进行降噪处理。

  • 2、识别模型或者方法

        模型的好坏将直接决定结果的好坏,但这里是的在模型确定的情况下考虑其他方法,所以,不予考虑。

  • 3、对结果的清洗

        图片中只含有四位数字跟小写字母的组合,不含有特殊字符,以及空格,所以对识别出来的结果进行清洗,可以减少不必要的错误。

一、降噪处理

分别用高斯滤波、中值滤波和双边滤波对图像进行降噪处理,并不断调整参数,确定出对应方法的最优参数;

降噪方法准确率
0.14
高斯滤波0.11
中值滤波0.15
双边滤波0.28

可以看到,利用双边滤波函数进行的处理,效果较好,识别的精度提高了两倍;

blur = cv2.GaussianBlur(img, (3, 3), 0)  # 高斯滤波函数
blur = cv2.medianBlur(img, 3)  # 中值滤波函数
blur = cv2.bilateralFilter(img, 3, 560, 560)  # 双边滤波函数 

二、数据清洗

在双边滤波降噪处理的基础上再对识别结果进行数据清洗,将会提高识别的准确率;

# 对结果的处理
st = re.sub(r'[^A-Za-z0-9]+', '', a)
st = st.lower()
if len(st) > 4:
    b = st[-4:]
else:
    b = st

最终识别的结果的准确率为0.53

三、代码

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[-1]

print('识别值' + '-----' + '真实值')
num = 0
for i in file_name:
    img = cv2.imdecode(np.fromfile(path + i, dtype=np.uint8), 1)

    # 对数据的处理
    # blur = cv2.GaussianBlur(img, (3, 3), 0)  # 高斯滤波函数
    # blur = cv2.medianBlur(img, 3)  # 中值滤波函数
    blur = cv2.bilateralFilter(img, 3, 560, 560)  # 双边滤波函数 560:0.28

    a = pytesseract.image_to_string(blur)

    # 对结果的处理
    st = re.sub(r'[^A-Za-z0-9]+', '', a)
    st = st.lower()
    if len(st) > 4:
        b = st[-4:]
    else:
        b = st

    true_value = i[-8:-4]
    print(b + '-----' + true_value)
    if b == true_value:
        num += 1

print('识别的准确率为:' + str(num/100))

 

评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值