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