原文鏈接:http://www.juzicode.com/image-tesseract-ocr5-install-on-windows
Tesseract是一款優秀的開源OCR軟件,目前由Google維護改進,已發展到5.0版本,從4.0版本起增加了基於LSTM神經網絡的識別引擎。今天聊聊怎么安裝Tesseract命令行軟件和語言包,正確配置Tesseract是制作自定義字體和使用其Python接口pytesseract的基礎。
1、下載軟件安裝包
首先下載安裝包,進入tesseract的github文檔頁(https://tesseract-ocr.github.io/tessdoc),找到5.0.0.x目錄下的Binaries目錄:
Binaries目錄下包含多種操作系統的二進制安裝包,以windows系統為例,進入“Windows – Tesseract at UB Mannheim”(https://github.com/UB-Mannheim/tesseract/wiki)下載安裝包,這是一個第三方制作的安裝包,當前(2021.11)最新版本為5.0.0:
你也可以進入第三方的官網Index of /tesseract找到各種歷史版本下載。
2、下載語言包
下一步下載語言包,進入tesseract的github文檔頁(https://tesseract-ocr.github.io/tessdoc),找到5.0.0.x目錄下的Traineddata Files目錄:
該目錄下有tessdata,tessdata_best,tessdata_fast等5種語言包,其中tessdata是檢測速度和准確度居中的語言包,后綴best對應最慢和最准確的語言包,后綴fast對應最快和准確度較差的語言包,這里我們選擇tessdata。進入到tessdata語言包的github倉后,可以用git命令拉到本地,或者網頁版下載到本地后解壓,就可以看到很多以語言簡稱為文件名、traineddata為后綴的文件,其中eng.traineddata和chi_sim.traineddata一般足夠應對中文和英文場景:
3、安裝軟件
雙擊下載的安裝包(tesseract-ocr-w64-setup-v5.0.0-rc1.20211030.exe),一路Next:
直到提示安裝完成。
接下來需要手動配置系統環境變量,在windows系統環境變量PATH中添加剛才的安裝路徑,比如桔子菌的安裝路徑為D:\dev\Tesseract-OCR5.0.0:
接下來重新打開一個新的命令行,輸入”tesseract.exe -v”驗證軟件的安裝是否正確:
E:\juzicode>tesseract.exe -v
tesseract v5.0.0-rc1.20211030
leptonica-1.78.0
libgif 5.1.4 : libjpeg 8d (libjpeg-turbo 1.5.3) : libpng 1.6.34 : libtiff 4.0.9 : zlib 1.2.11 : libwebp 0.6.1 : libopenjp2 2.3.0
在打印信息中可以看到對應的版本號v5.0.0-rc1.20211030以及各種依賴庫文件的版本號,表示安裝成功。
4、安裝語言包
接下來安裝語言包,在上一個步驟下載的語言包中找到需要的traineddata文件,比如表示英文和中文簡體的eng.traineddata和chi_sim.traineddata,復制到軟件安裝目錄的tessdata路徑下,這里桔子菌的語言包目錄是:D:\dev\Tesseract-OCR5.0.0\tessdata。
再次進入到系統環境變量,添加一個名稱為“TESSDATA_PREFIX”的系統變量,輸入語言包所在的路徑:
設置完成后打開一個新的命令行輸入“tesseract.exe –list-langs”可以檢查語言包是否完成安裝:
E:\juzicode\tess>tesseract.exe --list-langs
List of available languages (3):
chi_sim
eng
osd
桔子菌前面拷貝了eng.traineddata和chi_sim.traineddata 2個文件到tessdata目錄下,輸入“tesseract.exe –list-langs”執行后看到了chi_chm和eng 2種語言,說明對應的語言類型安裝成功。
5、測試、識別
接下來就是使用tesseract識別文字驗證安裝情況。
通過“tesseract –help”可以打印出大部分的命令,其中識別圖片的命令如下形式:
tesseract.exe imagename|imagelist|stdin outputbase|stdout [options…] [configfile…]
這里第1個參數是imagename|imagelist|stdin,可以是單個圖片文件名稱、多個圖片文件組成的清單或者標准輸入stdin,第2個參數是outputbase|stdout,可以是輸出文件名稱或者標准輸出stdout,options選項可以配置語言種類、設置識別引擎、分頁模式等,configfile一般用的比較少。
我們先來看一個簡單的例子,要解析的文件名稱為test.png,要識別的圖片如下圖:
下面這個例子解析單個文件test.png(第1個參數),在標准輸出(命令行界面)打印解析結果(第2個參數為stdout),用-l參數帶chi_sim表示使用簡體中文語言:
E:\juzicode\tess>tesseract.exe test.png stdout -l chi_sim
juzicode.com
微 信 公 眾 號 : 桔 子 code
這 是 一 個 測 試 例 子
也可以將stdout改為其他的字符串(第2個參數改為輸出文件名稱,不用帶txt后綴),這樣會將識別的結果寫入到以該字符串命名的txt文件中:
E:\juzicode\tess>tesseract.exe test.png result -l chi_sim
在當前目錄下就會生成一個result.txt的文件,文件內容就是識別出來的文字內容。
可以將多個文件名單獨成行寫入到一個txt文件中構成一個imagelist,第1個參數就可以輸入該文件名稱,從而實現一次識別多個文件。需要注意的是圖片文件名稱需要單獨成行,否則會認為一行中多個文件名稱組成的字符串是一個文件,從而導致出現找不到文件的錯誤:Error in fopenReadStream: file not found。下面這個例子中todo.txt中保存了同目錄下的2個圖片文件名稱:test.png,test2.png,將原來的第1個參數改為“todo.txt”執行解析命令:
E:\juzicode\tess>tesseract.exe todo.txt stdout -l chi_sim
Page 0 : test.png
juzicode.com
微 信 公 眾 號 : 桔 子 code
這 是 一 個 測 試 例 子
Page 1 : test2.png
這 是 第 2 個 測 試 例 子
輸出內容包含了圖片文件名稱和對應的識別結果。
下面的例子是從pdf文件中截取的一個片段,文件名為bookseg.png:
E:\juzicode\tess>tesseract bookseg.png stdout -l chi_sim
引 言
數 字 圖 像 處 理 方 法 的 重 要 性 源 於 兩 個 主 要 應 用 領 域 : 改 善 圖 示 信 息 以 便 人 們 解 釋 ; 為 存 儲 、 傳
輸 和 表 示 而 對 圖 像 數 據 進 行 處 理 , 以 便 於 機 器 自 動 理 解 。 本 章 有 幾 個 主 要 目 的 : (1) 定 義 我 們 稱 之 為
圖 像 處 理 領 域 的 范 圍 ; (2) 從 歷 史 觀 點 回 顧 圖 像 處 理 的 起 源 ; (3) 通 過 考 察 一 些 主 要 的 應 用 領 域 , 給 出
圖 像 處 理 技 術 狀 況 的 概 念 ; (4) 筒 要 討 論 數 字 圖 像 處 理 中 所 用 的 主 要 方 法 ; (5) 概 述 通 用 目 的 的 典 型 圖
像 處 理 系 統 的 組 成 ; (6) 列 出 公 開 發 表 的 數 字 圖 像 處 理 領 域 的 一 些 圖 書 和 文 獻 。
從識別的結果看,對於這種清晰度較高的圖片識別效果還是非常完美的。
小結:注意tesseract的安裝包含2個部分,一個是軟件本身的安裝,安裝完成后需要配置PATH系統變量,一個是語言包的安裝,語言包拷貝完成后需要配置TESSDATA_PREFIX系統變量。
notes:
1.安裝軟件后如果沒有配置PATH路徑會提示:’tesseract’ 不是內部或外部命令,也不是可運行的程序或批處理文件。
2.如果語言包沒有安裝,或者沒有正確設置TESSDATA_PREFIX,將會提示Failed loading language錯誤:
Error opening data file d:\dev\Tesseract-OCR5.0.0\tessdata\eng.traineddata
Please make sure the TESSDATA_PREFIX environment variable is set to your “tessdata” directory.
Failed loading language ‘eng’
Tesseract couldn’t load any languages!
Could not initialize tesseract.
推薦閱讀: