图像处理:给验证码图片做降噪处理及数据清洗
生活随笔
收集整理的這篇文章主要介紹了
图像处理:给验证码图片做降噪处理及数据清洗
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
上一篇博文: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.28a = 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 = sttrue_value = i[-8:-4]print(b + '-----' + true_value)if b == true_value:num += 1print('識別的準確率為:' + str(num/100))?
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的图像处理:给验证码图片做降噪处理及数据清洗的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 决策树算法框架
- 下一篇: C++ priority_queue对链