Python 代码实现验证码识别
生活随笔
收集整理的這篇文章主要介紹了
Python 代码实现验证码识别
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
今天咋們繼續(xù)利用pillow和pytesseract來實現(xiàn)驗證碼的識別
一、環(huán)境配置
-
需要 pillow 和 pytesseract 這兩個庫,pip install 安裝就好了。
-
安裝好Tesseract-OCR.exe
-
pytesseract 庫的配置:搜索找到pytesseract.py,打開該.py文件,找到 tesseract_cmd,改變它的值為剛才安裝 tesseract.exe 的路徑。
二、驗證碼識別
識別驗證碼,需要先對圖像進行預(yù)處理,去除會影響識別準確度的線條或噪點,提高識別準確度。
實例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)#?形態(tài)學(xué)操作???腐蝕??膨脹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'識別結(jié)果:{text}')src?=?cv.imread(r'./test/044.png') cv.imshow('input?image',?src) recognize_text(src) cv.waitKey(0) cv.destroyAllWindows()運行效果如下:
識別結(jié)果:3n3DProcess?finished?with?exit?code?0實例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'二值化自適應(yīng)閾值:{ret}')cv.imshow('binary',?binary)#?形態(tài)學(xué)操作??獲取結(jié)構(gòu)元素??開操作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'識別結(jié)果:{text}')src?=?cv.imread(r'./test/045.png') cv.imshow('input?image',?src) recognize_text(src) cv.waitKey(0) cv.destroyAllWindows()運行效果如下:
二值化自適應(yīng)閾值:181.0 識別結(jié)果:8A62N1Process?finished?with?exit?code?0實例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)#?二值化??設(shè)置閾值??自適應(yīng)閾值的話?黃色的4會提取不出來ret,?binary?=?cv.threshold(gray,?185,?255,?cv.THRESH_BINARY_INV)print(f'二值化設(shè)置的閾值:{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'識別結(jié)果:{text}')src?=?cv.imread(r'./test/045.jpg') cv.imshow('input?image',?src) recognize_text(src) cv.waitKey(0) cv.destroyAllWindows()運行效果如下:
二值化設(shè)置的閾值:185.0 識別結(jié)果:7364Process?finished?with?exit?code?0結(jié)語
以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,謝謝大家對小編的支持。
總結(jié)
以上是生活随笔為你收集整理的Python 代码实现验证码识别的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Java .class 反编译 Luyt
- 下一篇: python房价数据分析波士顿_Pyth