赞
踩
上一篇博文: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))
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。