Android中基於Tesseract OCR的文字識別應用

Napolean的技術部落格發表於2014-09-15

一、Tesseract OCR引擎

Tesseract OCR是HP公司於1985~1995年間開發的商業級OCR(Optical Character Reader, 光學字元閱讀器)引擎,並於2005年開放原始碼。以下是它sourceforge上的網址:

http://sourceforge.net/projects/tesseract-ocr/?source=directory

現在已轉移到谷歌的程式碼服務下:

https://code.google.com/p/tesseract-ocr/

原始碼和字型檔的下載列表:

https://code.google.com/p/tesseract-ocr/downloads/list

谷歌的伺服器在國內不穩定,可以從http://pkgs.fedoraproject.org下載到所需的軟體包和字型檔包:

c> 原始碼:http://pkgs.fedoraproject.org/repo/pkgs/tesseract/tesseract-ocr-3.02.02.tar.gz/

> 中文字型檔:http://pkgs.fedoraproject.org/repo/pkgs/tesseract-langpack/tesseract-ocr-3.02.chi_sim.tar.gz/

> 英文字型檔:http://pkgs.fedoraproject.org/repo/pkgs/tesseract/tesseract-ocr-3.02.eng.tar.gz/

二、面向Android的Tesseract工具

tess-two是Tesseract Tools for Android (tesseract-android-tools) 的一份拷貝,並新增了一些功能。Tesseract Tools for Android是Tesseract OCR和Leptonica影像處理庫的Android API與構建檔案的集合。github上的網址為:

https://github.com/rmtheis/tess-two

關於tess-two的編譯過程,可以參考上述網址,根據我的編譯經歷,發現執行”android update project –path .”一步是,需要指定–target選項,其引數通過命令”android list targets”獲取到id值,再指定,如下(記得連線好你的Android手機)。

root@Leon:/home/work/tess-two# android list targets
Available Android targets:
----------
id: 1 or "android-18"
     Name: Android 4.3
     Type: Platform
     API level: 18
     Revision: 1
     Skins: WVGA854, WXGA800, WSVGA, WVGA800 (default), WQVGA400, WXGA720, QVGA, WQVGA432, WXGA800-7in, HVGA
     ABIs : armeabi-v7a
root@Leon:/home/work/tess-two# android update project --path . --target 1

其中的”1″便是來自id後面的值。之後,便按照tess-two的github上的描述,新增到Eclispe即可。

三、基於tess-two的Android應用

有了面向Android的Tesseract庫tess-two,接下來就是使用Android應用來測試和使用了。github上的android-ocr就是這樣的應用:

https://github.com/rmtheis/android-ocr

我測試使用的是來自Mike_Wong的應用,參考了文章《淺析android OCR文字識別》,文章中包含了原始碼的下載地址。解壓原始碼並匯入到Eclipse之後,刪除目錄中的”gen”目錄,並關閉工程再重新開啟即可,為的是重新生成gen目錄及其中的內容。原始碼中已包含tess-two編譯會生成的libtess.so和liblept.so,並且包含了libjpeg.so。在編譯並安裝應用之前的唯一步驟是,在目標手機的SD目錄下建立tessdata目錄,將上面講述的中英文字型檔新增到該目錄,即“/sdcard/tessdata/”目錄

經過測試,發現演算法的執行時間還是比較慢的,一段話的中文,處理時間大約20秒。識別精度也比較有限,在一張照片中文字比較多時,識別精度有所下降,如果文字比較少且比較大,則精度較高。

附錄:其它參考文章

1. 《Android OCR 之 tesseract》:http://www.cnblogs.com/hangxin1940/archive/2012/01/13/2321507.html

2. 《安卓平臺tess-two的圖片識別終於成功》:http://www.cnblogs.com/muyun/archive/2012/06/12/2546693.html

3. 《tesseract-ocr訓練方法》:http://my.oschina.net/lixinspace/blog/60124

4. 《Tesseract 3 語言資料的訓練方法》:http://blog.wudilabs.org/entry/f25efc5f/

相關文章