Python代码实现验证码识别
生活随笔
收集整理的這篇文章主要介紹了
Python代码实现验证码识别
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
一、環境配置
-
需要 pillow 和 pytesseract 這兩個庫,pip install 安裝就好了。
-
安裝好Tesseract-OCR.exe
(3條消息) Tesseract-OCR 下載安裝和使用_半濠春水的博客-CSDN博客_tesseract-ocr下載 -
pytesseract 庫的配置:搜索找到pytesseract.py,打開該.py文件,找到 tesseract_cmd,改變它的值為剛才安裝 tesseract.exe 的路徑。
?
二、驗證碼識別
識別驗證碼,需要先對圖像進行預處理,去除會影響識別準確度的線條或噪點,提高識別準確度。
實例1:
import cv2 as cv import pytesseract from PIL import Imagedef recognize_text(image):# 邊緣保留濾波 去噪dst = cv.pyrMeanShiftFiltering(image, sp=10, sr=150)# 灰度圖像gray = cv.cvtColor(dst, cv.COLOR_BGR2GRAY)# 二值化ret, binary = cv.threshold(gray, 0, 255, cv.THRESH_BINARY_INV | cv.THRESH_OTSU)# 形態學操作 腐蝕 膨脹erode = cv.erode(binary, None, iterations=2)dilate = cv.dilate(erode, None, iterations=1)cv.imshow('dilate', dilate)# 邏輯運算 讓背景為白色 字體為黑 便于識別cv.bitwise_not(dilate, dilate)cv.imshow('binary-image', dilate)# 識別test_message = Image.fromarray(dilate)text = pytesseract.image_to_string(test_message)print(f'識別結果:{text}')src = cv.imread(r'./test/044.png') cv.imshow('input image', src) recognize_text(src) cv.waitKey(0) cv.destroyAllWindows()?運行效果如下:
實例2:
import cv2 as cv import pytesseract from PIL import Imagedef recognize_text(image):# 邊緣保留濾波 去噪blur =cv.pyrMeanShiftFiltering(image, sp=8, sr=60)cv.imshow('dst', blur)# 灰度圖像gray = cv.cvtColor(blur, cv.COLOR_BGR2GRAY)# 二值化ret, binary = cv.threshold(gray, 0, 255, cv.THRESH_BINARY_INV | cv.THRESH_OTSU)print(f'二值化自適應閾值:{ret}')cv.imshow('binary', binary)# 形態學操作 獲取結構元素 開操作kernel = cv.getStructuringElement(cv.MORPH_RECT, (3, 2))bin1 = cv.morphologyEx(binary, cv.MORPH_OPEN, kernel)cv.imshow('bin1', bin1)kernel = cv.getStructuringElement(cv.MORPH_OPEN, (2, 3))bin2 = cv.morphologyEx(bin1, cv.MORPH_OPEN, kernel)cv.imshow('bin2', bin2)# 邏輯運算 讓背景為白色 字體為黑 便于識別cv.bitwise_not(bin2, bin2)cv.imshow('binary-image', bin2)# 識別test_message = Image.fromarray(bin2)text = pytesseract.image_to_string(test_message)print(f'識別結果:{text}')src = cv.imread(r'./test/045.png') cv.imshow('input image', src) recognize_text(src) cv.waitKey(0) cv.destroyAllWindows()運行效果如下:
實例3:
import cv2 as cv import pytesseract from PIL import Imagedef recognize_text(image):# 邊緣保留濾波 去噪blur = cv.pyrMeanShiftFiltering(image, sp=8, sr=60)cv.imshow('dst', blur)# 灰度圖像gray = cv.cvtColor(blur, cv.COLOR_BGR2GRAY)# 二值化 設置閾值 自適應閾值的話 黃色的4會提取不出來ret, binary = cv.threshold(gray, 185, 255, cv.THRESH_BINARY_INV)print(f'二值化設置的閾值:{ret}')cv.imshow('binary', binary)# 邏輯運算 讓背景為白色 字體為黑 便于識別cv.bitwise_not(binary, binary)cv.imshow('bg_image', binary)# 識別test_message = Image.fromarray(binary)text = pytesseract.image_to_string(test_message)print(f'識別結果:{text}')src = cv.imread(r'./test/045.jpg') cv.imshow('input image', src) recognize_text(src) cv.waitKey(0) cv.destroyAllWindows()運行效果圖如下:
?
總結
以上是生活随笔為你收集整理的Python代码实现验证码识别的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 转一篇写的比较好的camera文档[Ca
- 下一篇: websocket python爬虫_p