Tesseract+opencv+VS+win實現OCR

參考網站: html

http://www.cnblogs.com/wzben/p/5930538.html (第一次) git

http://wangjunle23.blog.163.com/blog/static/117838171201323031458171/ (分析) github

http://blog.csdn.net/a443475601/article/details/9854003 (簡潔) windows

 

tesseract訓練 wordpress

 

  1. 命名

爲了方便 tif文面命名格式[lang].[fontname].exp[num].tif
lang
是語言 fontname是字體
好比咱們要訓練自定義字庫 image 字體名MyFont
那麼咱們把tif文件重命名 image.MyFont.exp0.tif
測試

  1. 生成box文件
    1. tesseract image.MyFont.exp0.tif image.MyFont.exp0 -l chi_sim batch.nochop makebox
  2. 調整box
  3. 訓練,生成.tr訓練文件
    1. tesseract  mjorcen.normal.exp0.jpg mjorcen.normal.exp0  nobatch box.train
  4. 計算字符集
    1. unicharset_extractor mjorcen.normal.exp0.box
  5. 字體屬性

新建一個font_properties文件 字體

<fontname> <italic> <bold> <fixed> <serif> <fraktur> 網站

裏面內容寫入 normal 0 0 0 0 0 表示默認普通字體。 ui

  1. Clustering
  2. 生成主形狀表shapetable
    1. shapeclustering -F font_properties -U unicharset mjorcen.normal.exp0.tr
  3. 形狀原型inttemp, 每一個字符所但願的特徵pffmtable
    1. mftraining -F font_properties -U unicharset -O unicharset mjorcen.normal.exp0.tr
  4. 數據文件normproto
    1. cntraining mjorcen.normal.exp0.tr
  5. 合併文件font.traineddata

把目錄下的unicharsetinttemppffmtableshapetablenormproto這五個文件前面都加上normal. google

  1. combine_tessdata normal.

必須肯定的是第2456行的數據不是-1,那麼一個新的字典就算生成了。

 

字符識別數據集

http://blog.csdn.net/H2008066215019910120/article/details/17126757

 

使用多張訓練圖片進行訓練。完成

將多個traineddata進行合併。不行。

利用字體文件生成訓練集,進行自動化訓練。Text2image

http://blog.csdn.net/chudongfang2015/article/details/51920191

 

 

http://blog.csdn.net/homebei2/article/details/45305897

 

要訓練一個新的語言(自定義語言或者某種天然語言均可以)對應的traineddata文件,須要產生下列過程文件:

? lang.config

? lang.unicharset

?lang.unicharambigs

? lang.inttemp

? lang.pffmtable

? lang.normproto

? lang.punc-dawg

? lang.word-dawg

?lang.number-dawg

? lang.freq-dawg

     在這八個文件中,紅色標示的是必須的,其餘的文件可選。當這些文件都準備好以後,再使用combine_tessdata進行最後的合併工做,生成lang.traineddata ,這個文件就是最終訓練出來語言庫。下面再來講一下如何產生上述的文件:

1、獲取一個訓練圖片(*.tif

2、產生相應的Box文件(*.box

tesseractlang.fontname.number.tif lang.fontname.number batch.nochop makebox

       這一步產生對應的lang.fontname.number.box 文件。   

   編輯該Box文件,校訂識別出來的字符,若是單個字符識別成了兩個或者多個字符,則要將這些行進行合併。前兩項座標取最小值,後兩項座標取最大值。

3、產生字符特徵文件(*.tr

tesseractlang.fontname.number.tif lang.fontname.number nobatch box.train

這一步產生三個文件:

(1) tesseract.log記錄該步驟執行結果;

(2) lang.fontname.number.txt

(3) lang.fontname.number.tr爲特徵文件。

4、計算字符集(unicharset

unicharset_extractorlang.fontname.number_1.box

這一步產生字符集文件unicharset

5、彙集字符特徵(inttemppffmtablenormproto

mftraining -Uunicharset -O lang.unicharset lang.fontname.number_1.tr

使用上一步產生的字符集文件unicharset,來生成當前新語言的字符集文件lang.unicharset。同時還會產生圖形原型文件inttemp和每一個字符所對應的字符特徵數文件pffmtable。附帶還會產生Microfeat文件,可是並無用到該文件。

cntraininglang.fontname.number_1.tr

這一步產生字符形狀正常化特徵文件normproto

6、產生字典文件(可選)

wordlist2dawgfrequent_words_list lang.freq-dawg lang.unicharset

wordlist2dawgwords_list lang.word-dawg lang.unicharset

frequent_words_list存放出現頻率較高的字符;words_list存放全部字符集,至少一個字符。每一個字符佔一行。這樣能夠產生對應語言的字典文件了,共五個。

一樣的方法產生punc-dawg文件(符號)、number-dawg文件(數字)以及user-words文件(用戶自定義字符,一般爲空)。

7、模糊字集校訂文件(unicharambigs)(可選)

例如某unicharambigs文件內容以下:

2 ' ' 1 " 1

1 m 2 r n 0

3 i i i 1 m 0

每一行表示一條校訂信息:第一個數字表示接下來有幾個字符,第二個數字也表示後面跟有幾個字符,最後一個數字表示校訂動做的類型。

在這個例子中,第一行表示將連續的兩個單引號(')合併成一個雙引號("),最後的數字1表示強制轉換;第二行、第三行表示一個字母m有可能被識別成兩個字母'r''n',也有可能識別成連續三個字母'i'

這個校訂文件能夠爲空或者不存在。

8、合併訓練文件(*.traineddata

combine_tessdata lang.

這是最後一步,產生訓練結果文件lang.traineddata

注意這一步控制檯執行的結果顯示,有0-9項指示了文件的地址,這十個地址對應了文章前面所提到的十項所須要的文件。其中1345這四項(從0開始排序)是必須的,缺乏一項(顯示爲-1)都將不算成功。

9測試

tesseract image.tifoutput -l lang

使用咱們剛剛訓練好的lang.traineddata文件來識別圖形。識別出來的結果將會存放在output.txt文件中。

特別說明:

在訓練的過程當中,初次接觸的人容易犯一些小錯誤,這些錯誤雖然小,但極可能讓你陷入困惑和痛苦中。下面簡單的羅列一下幾點須要注意的地方:

1)前面提到的lang能夠被你想要的任何字符串代替,主要是爲了給你訓練的庫取個名字。

2)第二步產生的Box文件,須要手動修改,必定要以Unicode模式保存。修改的時候要注意方法和含義,詳細的說明Google原文中有說明。

3)第五步程序自動產生的文件是隻有擴展名的,須要你本身手動將名字改爲前綴一致。後面產生的可選文件也依照此法操做。

4)全部的這些文件都準備好了以後,須要放到同一目錄下,執行combine_tessdata進行合併的時候,注意要切換到文件所在的目錄執行,不然將會報錯,提示找不到文件。

5)合併成功以後,要記得將訓練好的文件(lang.traineddata)放到程序的tessdata子目錄下,不然測試就會提示找不到語言庫文件。

   好了,到這裏,基本上全部的問題都能解決了。

 

 

9、OCR開發中遇到的其餘問題,沒來得及寫文檔,參考網址可以徹底解決:

 

Vs2013編譯tesseract

http://blog.csdn.net/u013985291/article/details/51009350 (成功)

https://github.com/peirick/VS2015_Tesseract

http://blog.csdn.net/yongshi6/article/details/50616889 (vs中編譯和使用)

http://blog.csdn.net/suninsky_plate/article/details/52820800 (vs配置使用)

 

https://groups.google.com/forum/#!topic/tesseract-ocr/bD1zJNiDubY (問題1)

tesseract API 文檔

https://fossies.org/dox/tesseract-3.04.01/group__AdvancedAPI.html (tesseract-document)

 

utf-8問題

http://blog.csdn.net/weiwangchao_/article/details/43453053 (VS調試器正確顯示UTF-8字符串)

http://www.111cn.net/sys/Windows7/97046.htm (DOS窗口cmd中顯示UTF-8字符的解決方法)

opencv編譯freeType庫,顯示中文

http://blog.csdn.net/qq_20581563/article/details/50895298 (opencv顯示中文)

http://download.csdn.net/download/zmdsjtu/9680510(在Mat中寫入的類Cv310Text

openCV文字檢測mser

http://blog.csdn.net/peaceinmind/article/details/49933055 (文字檢測與識別mser)

VS編譯opencv_contrib

http://www.cnblogs.com/jliangqiu2016/p/5597501.html (opencv_contrib配置)

問題:

https://putuyuwono.wordpress.com/2015/04/23/building-and-installing-opencv-3-0-on-windows-7-64-bit/ (解決)

相關文章
相關標籤/搜索