opencv+tesseract實(shí)現(xiàn)驗(yàn)證碼識(shí)別的示例
一、需要識(shí)別的內(nèi)容
需要識(shí)別的驗(yàn)證碼內(nèi)容如下 驗(yàn)證碼下載下載地址。

二、直接調(diào)用tesseract來(lái)完成識(shí)別(識(shí)別率很差)
識(shí)別的圖片內(nèi)容為:
在window系統(tǒng)鐘打開(kāi)cmd命令窗口,執(zhí)行識(shí)別命令如下:
tesseract.exe 01.png output.txt -l eng
識(shí)別結(jié)果為:519} 該識(shí)別準(zhǔn)確率遠(yuǎn)遠(yuǎn)達(dá)不到預(yù)期
三、訓(xùn)練數(shù)據(jù)樣本,提升識(shí)別率
1、下載10份樣本(樣本數(shù)量越多,識(shí)別率越高),然后通過(guò)jTessBoxEditor來(lái)進(jìn)行樣本數(shù)據(jù)矯正(該步驟耗時(shí)較長(zhǎng))。

2、打開(kāi) jTessBoxEditor,將所有的樣本數(shù)據(jù)生成一個(gè)總的tif文件(tif就是所有圖片的集合)。操作如下:
1)jTessBoxEditor->Tools->Merge TIFF

2 )全選所有的樣本文件,之后生成的tif命名為 jtbnum.font.exp0.tif


3)進(jìn)行數(shù)據(jù)識(shí)別調(diào)整,如下圖:


四、生成樣本庫(kù)字體
將所有的樣本識(shí)別內(nèi)容都調(diào)整正確后(調(diào)整的參數(shù)保存在jtbnum.font.exp0.box文件鐘),我們需要將我們生成的樣本文件封裝成我們的 jtbnum.traineddata 字體庫(kù),生成方式如下:
1)創(chuàng)建 font_properties 文件,內(nèi)容為 font 0 0 0 0 0
2)在同級(jí)目錄創(chuàng)建 run.bat 文件 內(nèi)容如下
rem 執(zhí)行改批處理前先要目錄下創(chuàng)建font_properties文件 echo Run Tesseract for Training.. tesseract.exe jtbnum.font.exp0.tif jtbnum.font.exp0 nobatch box.train echo Compute the Character Set.. unicharset_extractor.exe jtbnum.font.exp0.box mftraining -F font_properties -U unicharset -O jtbnum.unicharset jtbnum.font.exp0.tr echo Clustering.. cntraining.exe jtbnum.font.exp0.tr echo Rename Files.. del jtbnum.normproto rename normproto jtbnum.normproto del jtbnum.inttemp rename inttemp jtbnum.inttemp del jtbnum.pffmtable rename pffmtable jtbnum.pffmtable del jtbnum.shapetable rename shapetable jtbnum.shapetable echo Create Tessdata.. combine_tessdata.exe jtbnum. pause
3)雙擊執(zhí)行 run.bat 文件,系統(tǒng)執(zhí)行完成后,將會(huì)生成 jtbnum.traineddata 文件。
4)將 jtbnum.traineddata 拷貝到tesseract安裝目錄下的tessdata文件夾下。
5)測(cè)試識(shí)別率:
識(shí)別的圖片內(nèi)容為:
tesseract.exe 01.png output.txt -l jtbnum
識(shí)別結(jié)果為:51915 識(shí)別結(jié)果已經(jīng)很準(zhǔn)確率,但是驗(yàn)證碼圖片中的雜質(zhì)沒(méi)有清除,導(dǎo)致會(huì)識(shí)別出多余內(nèi)容來(lái)。
五、通過(guò)Opencv清除圖片的多余雜質(zhì)(Java實(shí)現(xiàn))
if(!hasLoad){
System.load(opencvPath+"/build/java/x64/opencv_java440.dll");
hasLoad = true;
}
byte [] bytes = Base64Utils.decodeFromString(base64);
String path = savePath+"/"+System.currentTimeMillis()+".png";
try {
OutputStream outputStream = new FileOutputStream(new File(path));
outputStream.write(bytes);
outputStream.flush();
outputStream.close();
} catch (Exception e) {
e.printStackTrace();
}
Mat image0 = Imgcodecs.imread(path);
Mat image1 = new Mat();
//灰度處理
Imgproc.cvtColor(image0, image1, Imgproc.COLOR_BGR2GRAY);
Imgproc.adaptiveThreshold(image1,image1,255,Imgproc.ADAPTIVE_THRESH_MEAN_C,Imgproc.THRESH_BINARY,11, 2);
Core.bitwise_not(image1,image1);
Mat kernel = Imgproc.getStructuringElement(Imgproc.MORPH_RECT, new Size(2, 2), new Point(-1, -1));
Mat temp = new Mat();
Imgproc.erode(image1, temp, kernel);
Imgproc.dilate(temp, temp, kernel);
String newPath = path.substring(0,path.lastIndexOf(".")) +"_1.png";
Imgcodecs.imwrite(newPath,temp);圖片處理結(jié)果如下(雜質(zhì)已經(jīng)清除):

5)測(cè)試識(shí)別率:
識(shí)別的圖片內(nèi)容為:
tesseract.exe 01.png output.txt -l jtbnum
識(shí)別結(jié)果為:5191 識(shí)別已經(jīng)很精確
到此這篇關(guān)于opencv+tesseract實(shí)現(xiàn)驗(yàn)證碼識(shí)別的示例的文章就介紹到這了,更多相關(guān)opencv tesseract 驗(yàn)證碼識(shí)別內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- Selenium+Tesseract-OCR智能識(shí)別驗(yàn)證碼爬取網(wǎng)頁(yè)數(shù)據(jù)的實(shí)例
- Java使用Tesseract-Ocr識(shí)別數(shù)字
- python3使用Pillow、tesseract-ocr與pytesseract模塊的圖片識(shí)別的方法
- Python識(shí)別快遞條形碼及Tesseract-OCR使用詳解
- Python3.6使用tesseract-ocr的正確方法
- Perl使用Tesseract-OCR實(shí)現(xiàn)驗(yàn)證碼識(shí)別教程
- python利用 pytesseract快速識(shí)別提取圖片中的文字((圖片識(shí)別)
- 使用Python中的pytesseract模塊實(shí)現(xiàn)抓取圖片中文字
- C#使用Tesseract進(jìn)行Ocr識(shí)別的方法實(shí)現(xiàn)
- tesseract-ocr使用以及訓(xùn)練方法
相關(guān)文章
舉例簡(jiǎn)單講解Python中的數(shù)據(jù)存儲(chǔ)模塊shelve的用法
這篇文章主要介紹了舉例簡(jiǎn)單講解Python中的數(shù)據(jù)存儲(chǔ)模塊shelve的用法,shelveshelve模塊與pickle模塊的功能相近,比pickle用起來(lái)更為簡(jiǎn)單,需要的朋友可以參考下2016-03-03
使用Python實(shí)現(xiàn)查找PDF中的指定文本并高亮顯示
在處理大量PDF文檔時(shí),有時(shí)我們需要快速找到特定的文本信息,本文將提供三個(gè)Python示例來(lái)幫助你在PDF文件中快速查找并高亮指定的文本,希望對(duì)大家有所幫助2024-03-03
python安裝dlib庫(kù)報(bào)錯(cuò)問(wèn)題及解決方法
這篇文章主要介紹了python安裝dlib庫(kù)報(bào)錯(cuò)問(wèn)題及解決方法,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-03-03
Python異常模塊traceback用法實(shí)例分析
這篇文章主要介紹了Python異常模塊traceback用法,結(jié)合實(shí)例形式分析了Python異常模塊traceback的基本功能、使用方法及相關(guān)操作注意事項(xiàng),需要的朋友可以參考下2019-10-10
Python大數(shù)據(jù)之從網(wǎng)頁(yè)上爬取數(shù)據(jù)的方法詳解
這篇文章主要介紹了Python大數(shù)據(jù)之從網(wǎng)頁(yè)上爬取數(shù)據(jù)的方法,結(jié)合實(shí)例形式詳細(xì)分析了Python爬蟲(chóng)爬取網(wǎng)頁(yè)數(shù)據(jù)的相關(guān)操作技巧,需要的朋友可以參考下2019-11-11
Python 轉(zhuǎn)換文本編碼實(shí)現(xiàn)解析
這篇文章主要介紹了Python 轉(zhuǎn)換文本編碼實(shí)現(xiàn)解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值2019-08-08
django.db.utils.ProgrammingError: (1146, u“Table‘’ doesn’t e
這篇文章主要給大家介紹了關(guān)于執(zhí)行python manage.py migrate時(shí)報(bào)錯(cuò):django.db.utils.ProgrammingError: (1146, "Table 'test.model_student' doesn't exist" )問(wèn)題的解決方法,文中將解決的方法介紹的非常詳細(xì),需要的朋友可以參考下2018-07-07
Python機(jī)器學(xué)習(xí)庫(kù)scikit-learn使用詳解
scikit-learn是Python中最流行的機(jī)器學(xué)習(xí)庫(kù)之一,它提供了各種各樣的機(jī)器學(xué)習(xí)算法和工具,包括分類(lèi)、回歸、聚類(lèi)、降維等2023-03-03
Python何時(shí)應(yīng)該使用Lambda函數(shù)
這篇文章主要介紹了Python何時(shí)應(yīng)該使用Lambda函數(shù),Python 中定義函數(shù)有兩種方法,一種是用常規(guī)方式 def 定義,函數(shù)要指定名字,第二種是用 lambda 定義,不需要指定名字,稱(chēng)為 Lambda 函數(shù),需要的朋友可以參考下2019-07-07

