OCR庫Tesseract初探

1.Tesseract 安裝及使用

一款由HP實驗室開發由Google維護的開源OCR(Optical Character Recognition , 光學字符識別)引擎,與Microsoft Office Document Imaging(MODI)相比,咱們能夠不斷的訓練的庫,使圖像轉換文本的能力不斷加強;若是團隊深度須要,還能夠以它爲模板,開發出符合自身需求的OCR引擎。php

源碼地址爲:https://github.com/tesseract-ocr/tesseractjava

tesseract下載地址:https://digi.bib.uni-mannheim.de/tesseract/python

接下來,咱們將在Windows環境下安裝Tesseract並實現簡單的轉換和訓練:git

進入下載頁面,能夠看到有各類.exe文件的下載列表,這裏能夠選擇下載3.0版本。github

 

其中文件名中帶有dev的爲開發版本,不帶dev的爲穩定版本,能夠選擇下載不帶dev的版本,例如能夠選擇下載tesseract-ocr-setup-3.05.02.exe。app

下載完成後雙擊,此時會出現以下圖所示的頁面。less

 

此時能夠勾選Additional language data(download)選項來安裝OCR識別支持的語言包,這樣OCR即可以識別多國語言,默認只有英語。而後一路點擊Next按鈕便可。工具

配置環境變量

爲了在全局使用方便,好比安裝路徑爲C:\Program Files (x86)\Tesseract-OCR,將該路徑添加到環境變量的Path中。學習

還有一個環境變量要添加:TESSDATA_PREFIX  指向C:\Program Files (x86)\Tesseract-OCR\tessdata    這個是用於語言包的。測試

測試是否安裝成功:在cmd中輸入tesseract ,將出現如下界面表明成功:

 

2.Tesseract的使用

方式一:直接在命令行調用:

tesseract d:\6.png d:\result

第一個參數爲圖片路徑,第二個參數爲輸出結果路徑。6.png的圖片以下:

識別結果result.txt的內容爲:

有2個數字誤識別。

而使用比較標準的文字,如:

是能夠徹底識別的。你們能夠本身試試。

 

方式二:在Python中調用

要在python中使用,須要安裝:

Python  :官網安裝地址:https://www.python.org/downloads/

PIL :用於python圖像格式處理,安裝完python以後執行一下命令便可安裝:pip install Pillow

Pytesser3: python開源項目,封裝了tesseract庫,也是在python安裝完後使用pip命令安裝:pip install pytesser3

而後新建一個記事本文件更名爲orc.py,內容以下:

from pytesser3 import image_to_string
from PIL import Image
text = image_to_string(Image.open(r'D:\6.png'))
print(text)

用python執行一下:(我用PyCharm執行的)

3.Tesseract訓練:

大致流程爲:安裝jTessBoxEditor -> 獲取樣本文件 -> Merge樣本文件 –> 生成BOX文件 -> 定義字符配置文件 -> 字符矯正 -> 執行批處理文件 -> 將生成的traineddata放入tessdata中

安裝jTessBoxEditor

下載jTessBoxEditor,地址https://sourceforge.net/projects/vietocr/files/jTessBoxEditor/;解壓後獲得jTessBoxEditor,因爲這是由Java開發的,因此咱們應該確保在運行jTessBoxEditor前先安裝JRE(Java Runtime Environment,Java運行環境)。

獲取樣本文件

咱們能夠用畫圖工具繪製樣本文件,數量越多越好,我本身畫了5張圖,如圖:

【注意】:樣本圖像文件格式必須爲tif\tiff格式,不然在Merge樣本文件的過程當中會出現 Couldn’t Seek 的錯誤。

 

 

 

Merge樣本文件

打開jTessBoxEditor,Tools->Merge TIFF,將樣本文件所有選上,並將合併文件保存爲num.font.exp0.tif

生成BOX文件

打開命令行並切換至num.font.exp0.tif所在目錄,輸入,生成文件名爲num.font.exp0.box

tesseract num.font.exp0.tif num.font.exp0 batch.nochop makebox

【語法】:tesseract [lang].[fontname].exp[num].tif [lang].[fontname].exp[num] batch.nochop makebox  

lang爲語言名稱,fontname爲字體名稱,num爲序號;在tesseract中,必定要注意格式。

定義字符配置文件

在目標文件夾內生成一個名爲font_properties的文本文件,內容爲

font 0 0 0 0 0  

【語法】:<fontname> <italic> <bold> <fixed> <serif> <fraktur>  

fontname爲字體名稱,italic爲斜體,bold爲黑體字,fixed爲默認字體,serif爲襯線字體,fraktur德文黑字體,1和0表明有和無,精細區分時可以使用。

字符矯正

打開jTessBoxEditor,BOX Editor -> Open,打開num.font.exp0.tif;矯正<Char>上的字符,記得<Page>有好多頁噢!

 

修改後記得保存。

執行批處理文件

在目標目錄下生成一個批處理文件

複製代碼
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.
echo. & pause
複製代碼

保存後執行便可,執行結果如圖:

最終文件夾內會有如下文件,如圖:

 

將生成的traineddata放入tessdata中

最後將num.trainddata複製到Tesseract-OCR中tessdata文件夾便可。

 

4.最後的測試

按照以前步驟,使用命令行輸入

tesseract test.png output_2 -l num

咱們能夠看到新生成的文件output_2的內容爲762408,內容徹底正確。細心的人會發現,最後一句指令,咱們使用了指令[-l num]而不是[-l eng]。這說明,最後一次轉換咱們使用的是新生成的num語言的匹配庫而不是默認的eng語言匹配庫。

 

 

咱們能夠看到,通過簡單的訓練,咱們對於數字數據的轉換準確率提升了不少。Tesseract的優勢除了能夠不斷學習之外,還由於是使用C++寫的開源程序,可使用C#或者C++調用以及修改,很關鍵!

Tesseract已經有多個語言的版本:

C#版本:https://github.com/charlesw/tesseract

Java版本:https://github.com/bytedeco/javacpp-presets/tree/master/tesseract

Python版本:https://github.com/sirfz/tesserocr

PHP版本:https://github.com/thiagoalessio/tesseract-ocr-for-php

Tesseract的其餘語言版本見:https://github.com/tesseract-ocr/tesseract/wiki/AddOns#tesseract-wrappers

相關文章
相關標籤/搜索