S小魚仔S 網誌搜尋

2017年5月23日 星期二

S小魚仔S Tesseract OCR 使用 jTessBoxEditor 應用篇 (二)

講述「jTessBoxEditor」這套「工具」, 延續「上一篇」(Tesseract OCR) 文章過來,「jTessBoxEditor」其實就是「調整」字庫工具,使用者 提供 來源「圖片」,「jTessBoxEditor」就會產生「對應」座標,達到「字串」解析,首先「瞭解」基礎功能。

jTessBoxEditor」可以直接進行「圖文解析」,主要是依賴「tesseract-ocr\tessdata」內「xxx.traineddata」字元庫。

進行「簡單」測試,使用「tesseract-ocr」內「tesseract」,解析「圖片」內容。

設定「來源」與「目的」位置
 tesseract "D:\Download\OCR\1.gif" "D:\Download\OCR\1.txt"

成功解析

接下來我們打開「jTessBoxEditor」介面

Tools」=>「Merge TIFF」可以進行「多張」TIFF 圖片檔,進行「合併」,如果您有許多「」檔,需要進行「字庫」識別,非常好用。

當我們將「多張」.TIFF 圖檔進行「合併」以後,就可以後續「配置」,使用「tesseract」產生對應「.box」文件

tesseract "D:\Download\OCR\3.tif"D:\Download\OCR\3" batch.nochop makebox

注意「*.tif」與「*.box」檔案名稱需「一致


開啟「jTessBoxEditor」=>「Box Editor」=>「Open」=>「*.tif

這邊就會看到「兩張」圖形,就可以進行「字庫」修改。

產生「*.tr」文件

tesseract "D:\Download\OCR\3.tif" "D:\Download\OCR\3" nobatch box.train


產生「3.tr

後續就是「字元庫 封存」及「合併 字元庫」產生「x.traineddata」並將「檔案」上傳 服務器 到相對應「位置請參考「S魚仔仔S - Centos 7 搭建 Tesseract OCR 圖文辨識系統 (一)

S小魚仔S Centos 7 搭建 Tesseract OCR 圖文辨識系統 (一)

光學字符識別(OCR,Optical Character Recognition)是指對圖片進行掃描,然後對圖像文件進行分析處理,獲取文字及版面信息的過程,Tesseract 的 OCR 引擎最先由 HP 實驗室於1985年開始研發,至1995年時已經成為OCR業內最準確的三款識別引擎之一。然而,HP不久便決定放棄OCR業務,Tesseract 也從此塵封,數年以後,Tesseract 由美國內華達州信息技術研究所獲得,並求諸於 Google 對 Tesseract 進行改進、消除 Bug、優化工作。

當進行「圖文」辨識,不夠精準,必須使用「jTessBoxEditor」工具 ( 需要安裝 JAVA 環境 ),進行「圖文」庫增加 並 放到「字庫」路徑。

~~ 開始進行實作 ~~

;使用「weget」下載「epel-release」資源庫。
wget https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm

;安裝「epel-release-latest-7*.rpm」資源庫。
sudo rpm -Uvh epel-release-latest-7*.rpm

#修改「電腦」名稱
hostnamectl set-hostname OCR

#搜尋「tesseract」套件
yum search tesseract

#安裝「tesseract.x86_64
yum install tesseract.x86_64

#安裝「tesseract-devel.x86_64」和「tesseract-osd.x86_64
yum install tesseract-devel.x86_64 tesseract-osd.x86_64

#安裝「tesseract-langpack-chi_sim.noarch」簡體字庫語言包
#安裝「tesseract-langpack-chi_tra.noarch」繁體字庫語言包
yum install tesseract-langpack-chi_sim.noarch tesseract-langpack-chi_tra.noarch

#檢查「tesseract」支持的语言
tesseract --list-langs

將「圖文」上傳「Tesseract」服務器,開始進行「圖文辨識


#  辨識「chin-tra.png圖片
#「chin-ocr-tra」當前目錄「輸出」.txt
#「chi_tra」(繁體) 為「字庫」位置
tesseract chin-tra.png chin-ocr-tra -l chi_tra

# 辨識「chin-sim.png圖片
#「chin-ocr-sim」當前目錄「輸出」.txt
#「chi_sim」(簡體) 為「字庫」位置
tesseract chin-sim.png chin-ocr-sim -l chi_sim

#辨識「english.png」圖片
#「eng-ocr」當前目錄「輸出」.txt
#「eng」(英文) 為「字庫」位置
tesseract english.png eng-ocr -l eng

#檢查「結果
cat eng-ocr.txt


發現「辨識率」不佳,這時候需要使用「jTessBoxEditor」進行「字源庫」增加,首先「瞭解」資料夾結構。

jTessBoxEditor」目錄有「jTessBoxEditor.jar」和「train.bat」都是「執行檔

 目錄「tesseract-ocr」=>「tesseract.exe」這是負責「進行」圖片解析專用,需配合「Windows Command」帶參數。

將源「圖片」使用「小畫家」另存「tif」格式 並 修改圖片「名稱」。
PS
tif」命名格式 [lang].[fontname].exp[num].tif
lang = 語言 
fontname = 字體
比如我們要訓練自定義字庫「mjorcen」字體名「normal」,那麼我們把圖片來源重命名「mjorcen.normal.exp0.jpg」在轉「.tif」。

使用「Windows Command」配合「tesseract.exe」帶參數,產生「*.box
tesseract mjorcen.normal.exp0.gif mjorcen.normal.exp0 -l eng batch.nochop makebox
PS
「*.box」和「*.tif」一定要在相同的目錄,否則打不开。

開啟「jTessBoxEditor」工具,進行「字庫」編輯


開啟「*.tif

打開「*.tif」來源 辨識 字元

修改「*.tif」完成 辨識 字元 並「儲存」( Ctrl+S)

進行「字元庫」封存
tesseract mjorcen.normal.exp0.gif mjorcen.normal.exp0 nobatch box.train

unicharset_extractor mjorcen.normal.exp0.box


封存完會產生「mjorcen.normal.exp0.tr」、「unicharset

建立「Font_Properties.txt」文字檔,去掉「附檔名

Font_Properties」內容寫入「normal 0 0 0 0 0」 表示預設「普通字體

輸入「Windows Command」指令

shapeclustering -F font_properties -U unicharset mjorcen.normal.exp0.tr

mftraining -F font_properties -U unicharset -O unicharset mjorcen.normal.exp0.tr

cntraining mjorcen.normal.exp0.tr

最後會生成五個文件,把目錄下的「unicharset」、「inttemp」、「pffmtable」、「shapetable」、「normproto」這五個文件前面都加上 「normal.

輸入「Windows Command」合併「normal.*」五個文件
combine_tessdata normal.

normal.traineddata」就是我們「完成」字庫來源,上傳到「Tesseract」服務器「/usr/share/tesseract/tessdata」位置
PS
/usr/share/tesseract/tessdata」字元庫

登入「Tesseract」服務器,使用「訓練好的」字庫進行「圖文」辨識,「normal 就是配對「normal.traineddata」字元庫


參考資料