Tesseract 是一款被普遍使用的開源 OCR 工具,本文將對其進行簡單的介紹.shell
Tesseract(/'tesərækt/) 這個詞的意思是"超立方體",指的是幾何學裏的四維標準方體,又稱"正八胞體"。右圖是一個正八胞體繞着兩個四維空間中互相正交的平面進行雙旋轉時的透視投影。不過這裏要講的,是一款以其命名的開源 OCR(Optical Character Recognition, 光學字符識別) 軟件。bash
所謂 OCR 是圖像識別領域中的一個子領域,該領域專一於對圖片中的文字信息進行識別並轉換成能被常規文本編輯器編輯的文本。服務器
Tesseract 已經有 30 年曆史,開始它是惠普實驗室的一款專利軟件,而後在 2005 年開源,自 2006 年後由 Google 贊助進行後續的開發和維護。編輯器
在 1995 年 Tesseract 曾是世界前三的 OCR 引擎,並且在如今的免費 OCR 引擎中,其識別精度也仍然是出類拔萃的。由於其免費與較好的效果,許多的我的開發者以及一些較小的團隊在使用着 Tesseract ,諸如驗證碼識別、車牌號識別等應用中,不難見到 Tesseract 的身影。工具
主流的 Linux 發行版均可以經過包管理器來安裝 Tesseract,以 Debian 及其衍生版爲例:google
sudo apt-get install tesseract-ocr
若是想用 Tesseract 對圖像進行識別,還須要對應的語言文件。所謂的語言文件是 Tesseract 識別某種語言的文字圖像時須要的一些資源,這些東西也能夠經過包管理器獲取。好比咱們須要識別英語和簡體中文,那麼:spa
sudo apt-get install tesseract-ocr-eng tesseract-ocr-chi-sim
固然了,這是經過包管理器的方式進行安裝,若是須要,還能夠經過編譯安裝的方式來構建最新版的 Tesseract.命令行
Tesseract 的項目託管在 Google Code 上,在下載頁面能夠本身選擇須要的版本,假如咱們須要安裝 tesseract-ocr-3.02.02.tar.gz 這個版本:code
wget https://tesseract-ocr.googlecode.com/files/tesseract-ocr-3.02.02.tar.gz tar xzvf tesseract-ocr-3.02.02.tar.gz
Tesseract 的編譯須要 automake, autoconf, libtool 支持,因此這幾個工具得裝上:blog
sudo apt-get install autoconf automake libtool
固然了, Tesseract 還依賴一些圖像庫:
sudo apt-get install ligjpeg62-dev libtiff4-dev libpng12-dev libleptonica-dev
注意: 以上安裝的包的名稱可能在不一樣發行版上略有不一樣
須要注意的是,Leptonica 是 Tesseract 的一個比較重要的依賴,並且不一樣版本的 Tesseract 對 Leptonica 的版本要求也不同,須要留意包管理器所安裝的 Leptonica 版本是否知足要求,若是不知足要求,最好仍是下載 Leptonica 的源代碼編譯安裝。
解決依賴後按常規方法編譯安裝便可:
./configure make sudo make install sudo ldconfig
在 3.03 及以上版本中,用於訓練產生語言文件的工具須要單獨編譯和安裝:
make training sudo make training-install
建議在執行 ./configure 時加上參數 –prefix=xxx 來指定安裝路徑,這樣之後要卸載會方便一些——固然若是這樣作的話在安裝完後須要作一些額外的工做,包括:
安裝完成後,不管是經過包管理器安裝的仍是經過編譯源代碼安裝的,創建都配置一下 TESSDATA_PREFIX 這個環境變量。在這個環境變量未設置的狀況下,Tesseract 將會在安裝目錄中的 share/tessdata 這個目錄下去尋找、加載語言文件,這自己固然沒什麼問題。
問題在於當咱們想添加新的語言文件時,會遇到一些麻煩——程序通常都是安裝的系統目錄中,也就是說,咱們須要提高權限才能將語言文件放到正確的地方。假如是在公司的服務器上進行相關的操做,普通用戶通常都是沒有 sudo 權限的。將語言文件放置在用戶目錄中能夠解決這個問題,方法是在 .bashrc (假設您使用 bash 做爲平常的 shell)中設置
export TESSDATA_PREFIX=$HOME/
如上設置時,將語言文件放在 ~/tessdata/ 下面便可。
Windows 上的安裝也很簡單,下載對應的安裝程序,雙擊運行,按照提示進行便可。
注意在 "Language data" 那個選項裏,默認是隻勾選了英文的,若是須要進行其餘語言的識別,記得勾選對應的語言。
再一個是,若是須要進行相應的開發工做,創建把 "Tesseract development files" 這個選項也勾選。
安裝完成後如無異常,會將安裝目錄添加到環境變量 PATH 中,這樣就能夠在 cmd 中直接運行程序了——Tesseract 並無提供圖形界面的工具,只能在命令行中使用,固然了,咱們能夠本身編寫 GUI 應用程序來調用它,這個準備後面再講。
這裏只簡單講一下 Tesseract 識別圖像的基本用法,關於訓練和開發將另開新篇來專門講述。
因爲 Tesseract 只提供命令行工具,這裏講到的用法對 Linux 和 Windows 平臺都適用。
首先能夠經過 "–list-langs" 來查看有哪些可用的 "語言" ,若是以前的 TESSDATA_PREFIX 環境變量沒有設置錯,將會看到這樣的輸出:
bash > tesseract --list-langs List of available languages (17): math chi chi_sim eng
這裏的 "eng" 和 "chi_sim" 是 Tesseract 提供的英文和簡體中文的語言文件,而其餘的幾個則是我本身訓練獲得的。
另外要說明的是,這裏的 "語言文件" 的本質是包含了某種 "天然語言" 的文字的特徵等輔助識別的一些資源,但像 chi_sim 這個中文簡體裏也包含了英文字母與阿拉伯數字的資源。而咱們也能夠爲了特定的用途而去訓練產生對應的資源,這裏的 "math" 是用於識別簡單數學表達式的一個資源,並非說有一種叫作 "math" 的語言。
若是發現以上命令的輸出爲空,那應該去檢查一下 TESSDATA_PREFIX 這個環境變量。在這個環境變量無誤且 "語言文件" 存在的狀況下,假設咱們有一張名爲 paper.png 的圖片,則經過如下命令對圖片進行識別,
tesseract paper.png paper -l chi_sim
以上命令如不出錯,結果將會保存到 paper.txt 這個文本文件中。
此外 Tesseract 還提供很是豐富的可選參數來對識別過程進行調整,可用的參數及其默認值能夠經過如下命令進行查看:
tesseract --print-parameters
參數的使用有兩種:
使用 -c 選項來設定單項參數的值,好比:
tesseract paper.png paper -l chi_sim -c language_model_ngram_on=1
容許使用多個 -c 選項來設置多個參數的值。
將多項參數設置寫入文件,而後在識別時使用該文件,好比:
tesseract paper.png paper -l chi_sim tess.conf
須要注意的是,若是使用配置文件,用做參數的配置文件名要放在最後面——這裏也支持多個配置文件,但它們必需要在最後面。假如我有兩個配置文件 tess_1.conf 和 tess_2.conf,那麼這樣是正確的:
tesseract paper.png paper -l chi_sim tess_1.conf tess_2.conf
而這樣則是錯誤的:
tesseract paper.png paper tess_1.conf -l chi_sim tess_2.conf
至於 Tesseract 那些參數各有什麼含義,官方沒有提供任何文檔來進行解釋,這裏有一個連接提供了部分參數的用處說明,應該是閱讀了 Tesseract 源代碼後獲得的結論。