1. 程式人生 > >google Tesseract-ocr配置及訓練

google Tesseract-ocr配置及訓練

一、配置

1、  從http://code.google.com/p/tesseract-ocr/downloads/list下載tesseract-ocr-3.02-vs2008tesseract-ocr-3.02.eng.tartesseract-ocr-3.02.02.tarleptonica-1.68-win32-lib-include-dirs相關檔案;

2、  將所有檔案存放在D:\BulidFolder資料夾下並解壓縮;

3、  下載tesseract-ocr-setup-3.02.02.exe,安裝到d盤,生成目錄Tesseract-OCR。

4、 ccmain資料夾下的equationdetect.cpp

檔案中的static const STRING kCharsToEx[] = {"'", "`","\"", "\\", ",", ".", "〈", "〉", "《", "》", "」", "「", ""};修改成static const STRING kCharsToEx[] = {"'", "`","\"", "\\", ",",".","<", ">",   "<<",">>",  ""};(注:不改動編譯時始終出錯,其它方法暫未發現,3.01版本中沒有此檔案,編譯3.01不用對原始檔作任何修改)。

5、 開啟D:\OCR\code\tesseract-ocr\vs2008的

tesseract.sln,重新編譯整個Solution;

二、訓練新的語言包

Tesseract是一個開源的OCR(Optical Character Recognition,光學字元識別)引擎,可以識別多種格式的影象檔案並將其轉換成文字,目前已支援60多種語言(包括中文)。 Tesseract最初由HP公司開發,後來由Google維護,目前釋出在Googel Project上。地址為http://code.google.com/p/tesseract-ocr/

使用預設的語言庫識別

1.安裝Tesseract

        從http://code.google.com/p/tesseract-ocr/downloads/list
下載Tesseract,目前版本為Tesseract3.02。因為只是測試使用,這裡直接下載winodws下的安裝檔案tesseract-ocr-setup-3.02.02.exe。安裝成功後會在相應磁碟上生成一個Tesseract-OCR目錄。通過目錄下的tesseract.exe程式就可以對影象字元進行識別了。 2.準備一副待識別的影象,這裡用畫圖工具隨便寫了一串數字,儲存為number.jpg,如下圖所示:         

3.  開啟命令列,定位到Tesseract-OCR目錄,輸入命令:

[plain] view plaincopyprint?在CODE上檢視程式碼片派生到我的程式碼片
  1. tesseract.exe number.jpg result -l eng  
 tesseract.exe number.jpg result -l eng

     其中result表示輸出結果檔案txt名稱,eng表示用以識別的語言檔案為英文。

3.  開啟Tesseract-OCR目錄下的result.txt檔案,看到識別的結果為7542315857,有3個字元識別錯誤,識別率還不是很高,那有沒有什麼方法來提供識別率呢?

      其實Tesseract提供了一套訓練樣本的方法,用以生成自己所需的識別語言庫。下面介紹一下具體訓練樣本的方法。

     

訓練樣本

2. 獲取樣本影象。用畫圖工具繪製了5張0-9的文樣本影象(當然樣本越多越好),如下圖所示:

  

  


3.合併樣本影象。執行jTessBoxEditor工具,在點選選單欄中Tools--->Merge TIFF。在彈出的對話方塊中選擇樣本影象(按Shift選擇多張),合併成num.font.exp0.tif檔案。4.生成Box File檔案。開啟命令列,執行命令:

[plain] view plaincopyprint?在CODE上檢視程式碼片派生到我的程式碼片
  1. tesseract.exe num.font.exp0.tif num.font.exp0 batch.nochop makebox  
  tesseract.exe num.font.exp0.tif num.font.exp0 batch.nochop makebox

  生成的BOX檔案為num.font.exp0.box,BOX檔案為Tessercat識別出的文字和其座標。

注:Make Box File的命令格式為:

[plain] view plaincopyprint?在CODE上檢視程式碼片派生到我的程式碼片
  1. tesseract [lang].[fontname].exp[num].tif [lang].[fontname].exp[num] batch.nochop makebox  
  tesseract [lang].[fontname].exp[num].tif [lang].[fontname].exp[num] batch.nochop makebox

其中lang為語言名稱,fontname為字型名稱,num為序號,可以隨便定義。

5.文字校正。執行jTessBoxEditor工具,開啟num.font.exp0.tif檔案(必須將上一步生成的.box和.tif樣本檔案放在同一目錄),如下圖所示。可以看出有些字元識別的不正確,可以通過該工具手動對每張圖片中識別錯誤的字元進行校正。校正完成後儲存即可。


6.定義字型特徵檔案。Tesseract-OCR3.01以上的版本在訓練之前需要建立一個名稱為font_properties.txt的字型特徵檔案。

font_properties不含有BOM頭,檔案內容格式如下:

[plain] view plaincopyprint?在CODE上檢視程式碼片派生到我的程式碼片
  1. <fontname> <italic> <bold> <fixed> <serif> <fraktur>  
<fontname> <italic> <bold> <fixed> <serif> <fraktur>

其中fontname為字型名稱,必須與[lang].[fontname].exp[num].box中的名稱保持一致。<italic> 、<bold> 、<fixed> 、<serif>、 <fraktur>的取值為1或0,表示字型是否具有這些屬性。

這裡在樣本圖片所在目錄下建立一個名稱為font_properties的檔案,用記事本開啟,輸入以下下內容:

[plain] view plaincopyprint?在CODE上檢視程式碼片派生到我的程式碼片
  1. font 0 0 0 0 0  
font 0 0 0 0 0

這裡全取值為0,表示字型不是粗體、斜體等等。

7.生成語言檔案。在樣本圖片所在目錄下建立一個批處理檔案,輸入如下內容。

[plain] view plaincopyprint?在CODE上檢視程式碼片派生到我的程式碼片
  1. rem 執行改批處理前先要目錄下建立font_properties檔案  
  2. echo Run Tesseract for Training..  
  3. tesseract.exe num.font.exp0.tif num.font.exp0 nobatch box.train  
  4. echo Compute the Character Set..  
  5. unicharset_extractor.exe num.font.exp0.box  
  6. mftraining -F font_properties.txt -U unicharset -O num.unicharset num.font.exp0.tr  
  7. echo Clustering..  
  8. cntraining.exe num.font.exp0.tr  
  9. echo Rename Files..  
  10. rename normproto num.normproto  
  11. rename inttemp num.inttemp  
  12. rename pffmtable num.pffmtable  
  13. rename shapetable num.shapetable   
  14. echo Create Tessdata..  
  15. combine_tessdata.exe num.  
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目錄,輸入命令:

[plain] view plaincopyprint?在CODE上檢視程式碼片派生到我的程式碼片
  1. tesseract.exe number.jpg result -l eng  
tesseract.exe number.jpg result -l eng

識別結果如如圖所示,可以看到識別率提高了不少。通過自定義訓練樣本,可以進行圖形驗證碼、車牌號碼識別等。感興趣的朋友可以研究研究。

 三、結合C++使用

1. 直接呼叫圖片

#include "strngs.h"
#include "baseapi.h"
#pragma  comment(lib,"libtesseract302d.lib")

////////////////
    tesseract::TessBaseAPI  api;  
    api.Init(NULL, "eng", tesseract::OEM_DEFAULT);  //初始化,設定語言包,中文簡體:chi_sim;英文:eng;也可以自己訓練語言包
    //api.SetVariable( "tessedit_char_whitelist", "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz" );  
   
	STRING text_out;  
    if (!api.ProcessPages("kaze.tif", NULL, 0, &text_out))  
    {  
	    //AfxMessageBox("tesseract 處理出現異常");
        return 0;  
    }  	
	cout<<text_out.string();
	cout<<UTF8ToGBK(text_out.string()).c_str();

2. 直接呼叫文字

// tess.cpp:   
// Recognize text on an image using Tesseract API and print it to the screen  
// Usage: ./tess image.png  
  
#include <tesseract/baseapi.h>  
#include <tesseract/strngs.h>  
#include <iostream>  
  
int main(int argc, char** argv)  
{  
   if (argc != 2)  
   {   
        std::cout << "Please specify the input image!" << std::endl;  
        return -1;  
    }  
  
    const char* lang = "eng";  
    const char* filename = argv[1];  
    //新建tess基類  
    tesseract::TessBaseAPI tess;  
    //初始化  
    tess.Init(NULL, lang, tesseract::OEM_DEFAULT);  
    //設定識別模式  
    tess.SetPageSegMode(tesseract::PSM_SINGLE_BLOCK);    
    FILE* fin = fopen(filename, "rb");  
    if (fin == NULL)  
    {  
       std::cout << "Cannot open " << filename << std::endl;  
       return -1;  
    }  
    fclose(fin);  
  
    STRING text;  
    //進行識別  
    if (!tess.ProcessPages(filename, NULL, 0, &text))  
    {  
       std::cout << "Error during processing." << std::endl;  
       return -1;  
    }  
   else  
       std::cout << text.string() << std::endl;  
     
   return 0;  
}

2. 結合OpencCV使用

// tesscv.cpp:
// Using Tesseract API with OpenCV

#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <tesseract/baseapi.h>
#include <iostream>

int main(int argc, char** argv)
{
    // Usage: tesscv image.png
    if (argc != 2)
    {
        std::cout << "Please specify the input image!" << std::endl;
        return -1;
    }

    // Load image
    cv::Mat im = cv::imread(argv[1]);
    if (im.empty())
    {
        std::cout << "Cannot open source image!" << std::endl;
        return -1;
    }

    cv::Mat gray;
    cv::cvtColor(im, gray, CV_BGR2GRAY);
    // ...other image pre-processing here...

    // Pass it to Tesseract API
    tesseract::TessBaseAPI tess;
    tess.Init(NULL, "eng", tesseract::OEM_DEFAULT);
    tess.SetPageSegMode(tesseract::PSM_SINGLE_BLOCK);
    tess.SetImage((uchar*)gray.data, gray.cols, gray.rows, 1, gray.cols);

    // Get the text
    char* out = tess.GetUTF8Text();
    std::cout << out << std::endl;

    return 0;
}

相關推薦

google Tesseract-ocr配置訓練

一、配置 1、  從http://code.google.com/p/tesseract-ocr/downloads/list下載tesseract-ocr-3.02-vs2008、tesseract-ocr-3.02.eng.tar、tesseract-ocr-3.02.

tesseract-ocr使用以及訓練方法

本人最近在做字元識別,所以自行在網上尋找方法,接觸到tesseract,自己按照網上方法做的時候,也遇到一些問題,解決了一些。所以我決定寫下我第一個部落格,一是方便自己以後檢視,更新學習。二是方便和網友交流學習。 Tesseract介紹          Tesserac

Google開源OCR專案Tesseract訓練(自己訓練的記錄,未成功)

影象處理開發資料、影象處理開發需求、影象處理接私活掙零花錢,可以搜尋公眾號"qxsf321",並關注! 影象處理開發資料、影象處理開發需求、影象處理接私活掙零花錢,可以搜尋公眾號"qxsf321",並關注! 影象處理開發資料、影象處理開發需求、影象處理接私活掙零花錢,可以搜尋

Tika結合Tesseract-OCR 實現光學漢字識別(簡體、宋體的識別率百分之百)—附Java原始碼實現真實測試資料和訓練集下載地址

   OCR(Optical character recognition) —— 光學文字識別,是影象處理的一個重要分支,中文的識別具有一定挑戰性,特別是手寫體和草書的識別,是重要和熱門的科學研究方向。可惜國內的科研院所,基本沒有大量的高識別率的訓練集&mdash

Tesseract-OCR 訓練教程(一)

MF 根據 echo 實際應用 temp sse 自己 文件 替換 實際應用中[font]替換為你自己的字體名,比如newfont、hehe等 1.根據tif生成box文件(位置寬高等信息)tesseract [font].font.exp0.tif [font].font

使用 tesseract-ocr生成訓練庫全部指令

rain pen 修改 sha works 文件 conf har charset coding:utf-8 import copyfrom PIL import Image,ImageEnhance im = Image.open(‘d:/workspace/captch

Win10 環境安裝tesseract-ocr 4.00並配置環境變量

安裝目錄 per exp x86 make dig sha 中文字體 ESS 一、安裝: 選擇對應版本,https://digi.bib.uni-mannheim.de/tesseract/ 1:下載安裝包 根據https://github.com/tesseract-oc

tesseract-ocr訓練

參考文件: http://my.oschina.net/lixinspace/blog/60124 http://blog.csdn.net/shuzui1985/article/details/8188993 https://code.google.com/p/tesseract-oc

Tesseract-ocr 安裝配置

參考:https://jingyan.baidu.com/article/219f4bf788addfde442d38fe.html 1、下載圖形識別工具Tesseract-ocr,下載路徑https://github.com/UB-Mannheim/tesseract/wiki,選擇相應的版本進行安裝。

Tesseract-OCR識別中文與訓練字型檔例項

關於中文的識別,效果比較好而且開源的應該就是Tesseract-OCR了,所以自己親身試用一下,分享到部落格讓有同樣興趣的人少走彎路。 文中所用到的身份證圖片資源是百度找的,如有侵權可聯絡我刪除。 一、準備工作 1、下載Tesseract-OCR引擎,注意要3.0以

Tesseract-OCR 在烏班圖下訓練教程

一、Tesseract訓練 1.下載Tesseract-OCR(相關版本自行選擇)     這個就不多說了,可以百度一下。 2.下載jTessBoxEditor(執行環境為java虛擬機器)     下載百度下載,有很多。開啟資料夾,目錄如下。 把檔案下載到

Tesseract-OCR 字元識別---樣本訓練

        Tesseract是一個開源的OCR(Optical Character Recognition,光學字元識別)引擎,可以識別多種格式的影象檔案並將其轉換成文字,目前已支援60多種語言(包括中文)。 Tesseract最初由HP公司開發,後來由Goo

ubuntu下使用Tesseract-ocr(編譯、安裝、使用、訓練新的語言庫)

這是關於如何使用Tesseract3訓練新的語言的文件,該文件是tesseract-ocr官方wiki上翻譯過來的。 1.介紹 Tesseract3.0x是支援訓練的。這篇文章描述如何訓練的過程,提供適用於各種語言的一些指導方針,以及訓練會得到的結果。對於Tesseract2.0x的訓練參考:Traini

OCR學習tesseract的一些測試

最近接觸OCR,先收集一些資料,包括成熟軟體、SDK、流行演算法。 1. 一個對現有OCR軟體及SDK的總結,比較全面,包括支援平臺、程式語言、支援字型語言、輸出格式、相關連結等 以此為索引,比較、選擇你想要的OCR SDK。 2. 另外一個OCR SDK 網站連結,

py-faster-rcnn演算法caffe配置訓練應用到自己的資料集

進入py-faster-rcnn/caffe-fast-rcnn cp Makefile.config.example MAkefile.config 然後配置Makefile.config檔案,可參考我的Makefile.config ## Refer to http://caffe.berkele

Tesseract-OCR的簡單使用與訓練

轉自 Tesseract,一款由HP實驗室開發由Google維護的開源OCR(Optical Character Recognition , 光學字元識別)引擎,與Microsoft Office Document Imaging(MODI)相比,我們可以不斷的訓練的庫,使影象轉換文字的能力

識別圖片tesseract-ocr配置

1.下載 tesseract-ocr-setup-4.00.00dev.exe 百度網盤:(https://pan.baidu.com/s/1GnVjl7DsAJrWh2JfpwKbcA) 安裝步驟不難,也不需要改什麼東西,按著他的步驟來就ok。 2.安裝完事之後需要配置環境變數(PATH

Tesseract-OCR 字元識別---樣本訓練 圖片識別訓練

        Tesseract是一個開源的OCR(Optical Character Recognition,光學字元識別)引擎,可以識別多種格式的影象檔案並將其轉換成文字,目前已支援60多種語言(包括中文)。 Tesseract最初由HP公司開發,後來由Google維護,目前釋出在Googel Pr

pva-faster-rcnn配置安裝訓練自己的資料集

繼fasterrcnn後,又一個pva-fasterrcnn的配置教程,希望可以幫助大家。 注意:有些複製的終端命令如果不能在終端執行,請注意英文全形半形問題,可以將命令輸入終端,無須複製貼上命令 第一部分:下載並編譯pvanet1、終端輸入:git clone --re

Tesseract-OCR 簡單的中文數字混合訓練

提示,我當前Tesseract-OCR 版本是 4.0 ,jTessBoxEditorFX是2.0.1 1.下載Tesseract-OCR 連結 2.下載jTessBoxEditorFX 連結,如果中文一定要選擇FX版本(基於Java,需安裝JDK) 3.Tessera