Tesseract-OCR 字元識別---樣本訓練
轉自:http://blog.csdn.net/feihu521a/article/details/8433077
Tesseract是一個開源的OCR(Optical Character Recognition,光學字元識別)引擎,可以識別多種格式的影像檔案並將其轉換成文字,目前已支援60多種語言(包括中文)。 Tesseract最初由HP公司開發,後來由Google維護,目前釋出在Googel Project上。地址為http://code.google.com/p/tesseract-ocr/。
使用預設的語言庫識別
1.安裝Tesseract
3. 開啟命令列,定位到Tesseract-OCR目錄,輸入命令:
- tesseract.exe number.jpg result -l eng
其中result表示輸出結果檔案txt名稱,eng表示用以識別的語言檔案為英文。
3. 開啟Tesseract-OCR目錄下的result.txt檔案,看到識別的結果為7542315857,有3個字元識別錯誤,識別率還不是很高,那有沒有什麼方法來提供識別率呢?Tesseract提供了一套訓練樣本的方法,用以生成自己所需的識別語言庫。下面介紹一下具體訓練樣本的方法。
訓練樣本
1.下載工具jTessBoxEditor. http://sourceforge.net/projects/vietocr/files/jTessBoxEditor/,這個工具是用來訓練樣本用的,由於該工具是用JAVA開發的,需要安裝JAVA虛擬機器才能執行。
2. 獲取樣本影像。用畫圖工具繪製了5張0-9的文樣本影像(當然樣本越多越好),如下圖所示:
3.合併樣本影像。執行jTessBoxEditor工具,在點選選單欄中Tools--->Merge TIFF。在彈出的對話方塊中選擇樣本影像(按Shift選擇多張),合併成num.font.exp0.tif檔案。
4.生成Box File檔案。開啟命令列,執行命令:
- tesseract.exe num.font.exp0.tif num.font.exp0 batch.nochop makebox
生成的BOX檔案為num.font.exp0.box,BOX檔案為Tessercat識別出的文字和其座標。
注:Make Box File 檔名有一定的格式,不能隨便亂取名字,命令格式為:
- tesseract [lang].[fontname].exp[num].tif [lang].[fontname].exp[num] batch.nochop makebox
其中lang為語言名稱,fontname為字型名稱,num為序號,可以隨便定義。
【Yasi】:先前自己定義了tessdata的環境變數 TESSDATA_PREFIX 值為 E:\tesseract\tessdata,但沒有從tesseract原始檔目錄中將tessdata子目錄中的內容copy到 E:\tesseract\tessdata 中,造成上面的命令報錯,說找不到batch.nochop 和 makebox。解決辦法:將 tesseract 原始檔目錄中所有檔案和子資料夾(可能充分但非必要,先不管這些啦)copy到 E:\tesseract\tessdata 中。
5.文字校正。執行jTessBoxEditor工具,開啟num.font.exp0.tif檔案(必須將上一步生成的.box和.tif樣本檔案放在同一目錄),如下圖所示。可以看出有些字元識別的不正確,可以通過該工具手動對每張圖片中識別錯誤的字元進行校正。校正完成後儲存即可。【Yasi】這裡必須修改識別錯誤的字元,否則做出來的traineddata檔案也是錯的。可以在下面的介面中修改並儲存,也可以直接在traineddata檔案中修改。
font_properties不含有BOM頭,檔案內容格式如下:
- <fontname> <italic> <bold> <fixed> <serif> <fraktur>
其中fontname為字型名稱,必須與[lang].[fontname].exp[num].box中的名稱保持一致。<italic> 、<bold> 、<fixed> 、<serif>、 <fraktur>的取值為1或0,表示字型是否具有這些屬性。
這裡在樣本圖片所在目錄下建立一個名稱為font_properties的檔案,用記事本開啟,輸入以下下內容:
- font 0 0 0 0 0
7.生成語言檔案。在樣本圖片所在目錄下建立一個批處理檔案,輸入如下內容。
- rem 執行改批處理前先要目錄下建立font_properties檔案
- echo Run Tesseract for Training..
- tesseract.exe num.font.exp0.tif num.font.exp0 nobatch box.train
- echo Compute the Character Set..
- unicharset_extractor.exe num.font.exp0.box
- mftraining -F font_properties -U unicharset -O num.unicharset num.font.exp0.tr
- echo Clustering..
- cntraining.exe num.font.exp0.tr
- echo Rename Files..
- rename normproto num.normproto
- rename inttemp num.inttemp
- rename pffmtable num.pffmtable
- rename shapetable num.shapetable
- echo Create Tessdata..
- combine_tessdata.exe num.
將批處理通過命令列執行。執行後的結果如下:
需確認列印結果中的Offset 1、3、4、5、13這些項不是-1。這樣,一個新的語言檔案就生成了。
num.traineddata便是最終生成的語言檔案,將生成的num.traineddata拷貝到Tesseract-OCR-->tessdata目錄下。可以用它來進行字元識別了。
使用訓練後的語言庫識別
用訓練後的語言庫識別number.jpg檔案, 開啟命令列,定位到Tesseract-OCR目錄,輸入命令:
- tesseract.exe number.jpg result -l eng
識別結果如如圖所示,可以看到識別率提高了不少。通過自定義訓練樣本,可以進行圖形驗證碼、車牌號碼識別等。感興趣的朋友可以研究研究。
【Yasi】試驗結果如下:
下面是num-yasi.png將生成的num.traineddata拷貝到E:\tesseract\tessdata,即環境變數TESSDATA_PREFIX 設定的路徑下,執行下面的命令(注意第二條命令結尾是num,即新加的traineddata,而不是eng)
- E:\tesseract\tesseract-svn\vs2008\LIB_Debug\tesseractd.exe num-yasi.png result-eng -l eng
- E:\tesseract\tesseract-svn\vs2008\LIB_Debug\tesseractd.exe num-yasi.png result-num -l num
下圖是兩次識別結果對比
使用eng traineddata的結果完全不靠譜;使用了自己的traineddata,識別出來的當然都是數字,但正確率實在糟糕。可能是我自己手寫的字型和用來做traineddata的手寫數字的字型差別太大了吧。
相關文章
- OCR訓練中文樣本庫和識別
- Yolov8訓練識別模型YOLO模型
- Opencv中SVM樣本訓練、歸類流程及實現OpenCV
- 孟子小樣本和檢索式預訓練模型進展模型
- 海南話語音識別模型——模型訓練(一)模型
- 文字識別(四)--大批量生成文字訓練集
- 使用DeepKE訓練命名實體識別模型DEMO(官方DEMO)模型
- Python爬蟲教程-29-驗證碼識別-Tesseract-OCRPython爬蟲
- 如何訓練一個簡單的音訊識別網路音訊
- 實驗12-使用keras預訓練模型完成貓狗識別Keras模型
- 文字識別(二)--字元識別技術總覽字元
- 字元識別,口算題識別論文小梗概字元
- PaddleOCR手寫文字識別模型訓練(摘抄所得,非原創)模型
- 車牌識別字元模板庫字元
- 包含近 20 萬本圖書,OpenAI 級別的訓練資料集上線OpenAI
- tensorflow 訓練 think-captcha 圖片驗證碼自動識別APT
- 使用人工神經網路訓練手寫數字識別模型神經網路模型
- 利用PyTorch訓練模型識別數字+英文圖片驗證碼PyTorch模型
- 【人臉識別7】haar+CART+Adaboost+Cascade訓練過程分析
- 知識增強的預訓練語言模型系列之ERNIE:如何為預訓練語言模型注入知識模型
- 知識增廣的預訓練語言模型K-BERT:將知識圖譜作為訓練語料模型
- python3使用Pillow、tesseract-ocr與pytesseract模組的圖片識別的方法Python
- ImageAI實現完整的流程:資料集構建、模型訓練、識別預測AI模型
- [題目記錄]一本通高手訓練-數列
- 連線條件字元型別不一樣。字元型別
- 聯盟訓練在遊戲AI多樣化的探索遊戲AI
- 1分鐘訓練百萬級別節點嵌入,Mila開源圖嵌入訓練系統GraphViteMILAVite
- C/C++高階訓練之指標初識C++指標
- DeepMind丟掉了歸一化,讓影像識別訓練速度提升了8.7倍 | 已開源
- 程式碼將退出歷史舞臺:像訓狗一樣訓練計算機計算機
- 知識增強的預訓練語言模型系列之KEPLER:如何針對上下文和知識圖譜聯合訓練模型
- 訓練資料也外包?這家公司“承包”了不少註釋訓練資料,原來是這樣做的……
- 像訓練Dota2一樣訓練真實機器人?Gibson Environment環境瞭解一下機器人
- 【vjudge訓練記錄】11月個人訓練賽1
- kaldi中文語音識別thchs30模型訓練程式碼功能和配置引數解讀S3模型
- acm訓練題ACM
- 【sql】訓練五SQL
- 【sql】訓練四SQL