跳至內容。

本頁封存截至 2018 年 5 月 1 日,關於 Tesseract 2.0x、3.0x 和 4.00.00alpha 的常見問題頁面。

主要的常見問題頁面將包含關於 Tesseract 4.0.0 及更新版本的資訊。


常見問題

常見問題及其答案或相關連結的集合。如果您有未在下方解答的問題,請將其張貼到論壇

目錄

規則與建議

如果您認為在 Tesseract 中發現錯誤,請建立一個問題。問題應在使用者郵寄清單中提出。

您在 GitHub 中回報問題或在論壇中提問之前,必須閱讀貢獻指南。

我可以提高 OCR 的速度嗎?

如果您正在處理多個圖片,可以使用GNU Parallel平行執行 tesseract。例如,不要使用

find . -maxdepth 1 -name "*.tif" -print0 | while IFS= read -r -d '' n; do
    tesseract "$n" "$n" -l eng hocr
    hocr2pdf -i "$n" -n -o "$n.pdf" < "$n.html"
done

您可以執行

parallel "tesseract {} {} -l eng hocr; hocr2pdf -i {} -n -o {}.pdf < {}.html" ::: *.tif

請注意,此範例有點過時。您將獲得更好的結果,方法是讓 Tesseract 平行產生單頁 PDF 檔案,然後使用 QPDF 或類似工具將它們拼接在一起。如果您執行的是 Tesseract 4,則可以使用「快速」模型。

Tesseract 4 在處理頁面時也使用最多四個 CPU 執行緒,因此單頁的速度會比 Tesseract 3 快。如果您的電腦只有兩個 CPU 核心,那麼執行四個執行緒會顯著降低速度,最好使用單一執行緒或最多兩個執行緒!使用單一執行緒可以消除多執行緒的計算開銷,也是透過每個 CPU 核心執行一個 Tesseract 程序來處理大量圖片的最佳解決方案。使用環境變數 OMP_THREAD_LIMIT 設定執行緒的最大數量。若要停用多執行緒,請使用 OMP_THREAD_LIMIT=1

Windows:tesseract 在啟動後立即自動關閉

Tesseract 是一個命令列程式,因此您需要從命令列執行。如果您需要具有圖形介面的程式,則可以從第三方頁面取得一些可用的程式。

Tesseract 可以產生哪些輸出格式?

Tesseract 可以產生純文字、PDF 和 HTML 輸出。Tesseract 的標準輸出是一個純 txt 檔案 (utf-8 編碼,以 '\n' 作為行尾標記)。

使用組態檔 'hocr',tesseract 將產生符合hOCR 規格的 XHTML 輸出 (如果作業系統使用 utf-8 編碼以外的編碼作為檔案名稱,則輸入圖片名稱必須是 ASCII - 如需一些詳細資訊,請參閱問題 809)。

使用組態檔 'pdf',tesseract 將產生可搜尋的 PDF,其中包含具有隱藏的可搜尋文字圖層的頁面圖片。

如何解讀 hOCR 基線輸出?

eurotext.tif 第一行的 hOCR 輸出包含下列資訊

<span class='ocr_line' id='line_1_1' title="bbox 105 66 823 113; baseline 0.015 -18; …

bbox 是圖片座標中線的邊界方塊 (藍色)。基線的兩個數字是線性方程式的斜率 (第一個數字) 和常數項 (第二個數字),該線性方程式描述相對於邊界方塊左下角的基線 (紅色)。基線在 -18 處與 y 軸相交,其斜率角度為 arctan(0.015) = 0.86°。一般而言,基線由階數為 n 的多項式描述,係數為 pn … p0,其中線性 (即直線) 的 n = 1 (請參閱hOCR 規格)。hOCR 基線

libtesseract.so.3:無法開啟共享物件檔案

在「sudo make install」之後執行「sudo ldconfig」。請參閱問題 621

Tesseract 無法運作

請確保只有一個 tesseract 安裝,例如,如果同一部電腦上安裝了 tesseract 3.01 和 3.02,則有回報的問題 (在共用組建的情況下)。例如,請參閱問題 793

如何解除安裝 Tesseract

tesseract-ocr 目錄中,執行

sudo make uninstall

如果您安裝了訓練工具,也請執行

sudo make training-uninstall

如何比較不同版本的 Tesseract

如果您想要使用多個版本的 tesseract (例如,您想要比較 OCR 結果),我建議您從原始碼編譯它們 (例如,在 /usr/src 中),而不是安裝它們。如果您想要測試特定版本,可以使用這種方式執行它

/usr/src/tesseract-3.03/api/tesseract eurotext.tif eurotext
/usr/src/tesseract-ocr.3.02/api/tesseract eurotext.tif eurotext

/usr/src/tesseract-3.03/api/tesseract 是 shell 包裝函式指令碼,它會負責使用正確的共享函式庫 (無需安裝)。

pixReadStream 中發生錯誤

如果您看到此錯誤,則表示您的 leptonica 安裝有問題 - 例如,遺失對您圖片格式的支援。通常這表示在 leptonica 組建期間未正確安裝相關的圖片函式庫,或者 leptonica 內有一些組態問題。

請檢查問題340391443

無法開啟 eng.unicharset?

您沒有安裝語言訓練資料。請閱讀README

leptonica 函式庫遺失

如果您在執行 ./configure 時收到此錯誤訊息,且您的 leptonica 標頭檔位於 /usr/local/include 中 (例如,您將 leptonica 安裝到 /usr/local),則執行

LIBLEPT_HEADERSDIR=/usr/local/include ./configure

CPPFLAGS="-I/usr/local/include" LDFLAGS="-L/usr/local/lib" ./configure

無法讀取壓縮的 TIFF 檔案

我收到此錯誤訊息

read_tif_image:Error:Illegal image format:Compression

Windows (Visual C++):可以使用下列方式在 VC++6 或 VC++Express 中新增 Libtiff 支援

前往 libtiff 的 Windows 下載並依照這些步驟進行

Download and run the setup program.
Add the paths for include and library files in tools/options/directories
Add HAVE_LIBTIFF to the preprocessor definitions.
Add libtiff.lib to the list of libraries.
Rebuild.
Put libtiff3.dll be in your path somewhere.
This is done by control panel/system/advanced/environment variables and adding c:/program files/gnuwin32/bin to PATH.
Keep your fingers crossed...

非 Windows (和 Cygwin):安裝 libtiff-dev。程序因作業系統而異,但在許多作業系統上,如下所示的程式碼

sudo apt-get install libtiff-dev

或其某些變體應該可以解決問題,執行組態之前。

彩色圖片沒有輸出

有幾個關於使用彩色圖片時出現空白或垃圾輸出的錯誤回報,無論是否使用 libtiff。以下是最新的資訊 (上次更新時間為 2008 年 9 月 23 日)

如果沒有 libtiff,Tesseract 只會讀取未壓縮的 tiff 檔案。即便如此,它也無法正確讀取 32 位元的 tiff 檔案。將在 2.04 中修正。(這表示它將使用 libtiff 正確處理大多數圖片深度 (16 位元除外)。

使用 libtiff,Tesseract 會讀取壓縮的 tiff 檔案,但無法處理任何顏色:24 或 32 位元。它只能讀取 1 位元的二進位圖片或 8 位元的灰階圖片。(沒有色彩對應!)在 2.04 中修正。

API (TessBaseAPI) 應該可以使用 1、8、24 或 32 位元的圖片。

它是否支援多頁 TIFF 檔案?

是的,只要您安裝了 libtiff,所有 2.03 及更新版本都可以。請參閱上方的壓縮 TIFF。

為什麼 viewer/svutil.cpp 無法編譯?

此檔案是造成可移植性問題的最大單一原因,因為它是外部程序中執行檢視器的介面。如果您的系統可以編譯它,請回報一個問題,記錄您必須變更的內容,但請僅針對目前的版本。如果您無法編譯它,則可以在您的編譯器中定義 GRAPHICS_DISABLED (針對所有來源),它會註解掉所有難以編譯的程式碼並停用檢視器功能,而大多數人無論如何都不會使用它。

在類 Unix 系統上,可以指示組態指令碼停用圖形,如下所示

configure --disable-graphics

Ubuntu 14.04 的訓練工具在哪裡?

由於疏忽,訓練工具未隨附 Ubuntu 14.04。請等待下一個 Ubuntu 版本,或使用這些指令。

sudo apt-get build-dep tesseract-ocr
sudo apt-get install devscripts
dget http://http.debian.net/debian/pool/main/t/tesseract/tesseract_3.03.03-1.dsc
tar xvzf tesseract_3.03.03.orig.tar.gz
cd tesseract-3.03
zcat ../tesseract_3.03.03-1.diff.gz | patch -p1
debuild -us -uc
cd ..
sudo dpkg -i *.deb

如何編輯訓練中使用的 Box 檔案?

有各種程式可以協助您完成此操作,請參閱AddOns 頁面

Utf8 緩衝區太大,大小 = xx (訓練期間發生錯誤)

每個可辨識單位 (字元/字素/字形) 的 utf-8 表示法上限為 30 個位元組。無法輕易增加它。請檢查您的方塊檔案是否有奇怪的長字串。

如何只辨識數字?

Tesseract 3

使用 digits 組態檔,如下所示

tesseract imagename outputbase digits

Tesseract 2.03

使用

TessBaseAPI::SetVariable("tessedit_char_whitelist", "0123456789");

在呼叫 Init 函式之前,或將其放入名為 tessdata/configs/digits 的文字檔案中

tessedit_char_whitelist 0123456789

然後您的命令列會變成

tesseract image.tif outputbase nobatch digits

警告:在 2.03/2.04 版本 (而不是 3.00 及更高版本) 中,您必須digits 之前放置 nobatch

如何在不必從頭開始重新訓練的情況下,將一個字元或一種字體新增至我最喜歡的語言?

無法只新增一個字元或字體。您需要從頭重新訓練。請參閱訓練 Tesseract 文件。

如何產生可搜尋的 PDF 輸出?

從 Tesseract 3.03 版本開始,可搜尋的 PDF 輸出已成為標準功能。可以使用像這樣的 pdf 設定檔:

tesseract phototest.tif phototest pdf

可搜尋的 PDF 似乎只包含空格,或單字字母之間有空格。

PDF 本身可能沒有問題,但其隱藏的可搜尋文字圖層可能無法被您的 PDF 閱讀器理解。例如,Mac OS X 中的「預覽.app」就以有這類問題而聞名,可能只會「看到」空格而沒有文字。請嘗試改用 Adobe Acrobat Reader。

如何進行串流處理

假設您有一個很棒但掃描速度慢的多頁掃描裝置。如果在掃描期間進行 OCR 會很好。在這個例子中,掃描程式在產生圖像檔名時將其傳送給 Tesseract。Tesseract 將可搜尋的 PDF 串流到 stdout。您需要 Tesseract v3.04 或更新版本才能使用此功能。

scanimage --batch --batch-print | tesseract -c stream_filelist=true - - pdf > output.pdf

是否有最小/最大文字大小?(它不會讀取螢幕文字!)

對於合理的準確度,文字大小有最小值限制。您必須考慮解析度以及字級大小。準確度在低於 10pt x 300dpi 時會下降,在低於 8pt x 300dpi 時會快速下降。一個快速檢查方法是計算您字元的 x 高度(x 高度是小寫 x 的高度)的像素數。在 10pt x 300dpi 時,x 高度通常約為 20 像素,儘管這會因字體而異。低於 10 像素的 x 高度,您幾乎沒有機會獲得準確的結果,而低於約 8 像素,大部分文字將被「去除雜訊」。

使用 LSTM 時,x 高度似乎也有一個最大值,約為 30 像素。高於此值,Tesseract 無法產生準確的結果。傳統引擎似乎比較不容易出現這種情況(請參閱 https://groups.google.com/forum/#!msg/tesseract-ocr/Wdh_JJwnw94/24JHDYQbBQAJ)。

為什麼輸出是空白或品質不佳?

請閱讀改善品質文件。

如何產生語言資料檔案?

請閱讀訓練 Tesseract 文件。

如何解壓縮或變更現有的語言資料檔案?

使用 combine_tessdata 命令。請參閱combine_tessdata 手冊頁以了解其使用方式的詳細資訊。

如何提供我自己的字典?

Tesseract 3

若要新增額外的字詞列表,請依照 tesseract(1) 中所述,建立一個 .user-words 檔案。

如果您想替換整個字典,您需要解壓縮 .traineddata 檔案,建立一個新的 word-dawg 檔案,然後將這些檔案重新壓縮到 .traineddata 檔案中。請參閱 訓練 Tesseract 以了解更多詳細資訊。

Tesseract 2

簡單:用您自己的字詞列表取代 tessdata/eng.user-words,格式相同 - UTF8 文字,每行一個單字。

較困難,但對於大型字典而言更好:使用 wordlist2dawg 從您自己的字詞列表建立一個,並取代 tessdata/eng.word-dawg。有關詳細資訊,請參閱訓練 Tesseract 文件。

wordlist2dawg 無法運作!

2.03 wordlist2dawg 有一個記憶體問題。如果您沒有 1GB 以上的記憶體,那麼您的系統就會停頓並且執行速度非常慢。在 training/wordlist2dawg.cpp 的 39-40 行將 max_num_edges 和 reserved_edges 都減少 10 倍,然後重新建置。

如果您成功建立一個新的 dawg,然後由於錯誤而無法載入:

Error: trying to read a DAWG '%s' that contains %d edges while the maximum is %d.

然後嘗試變更 dawg.h 中 MAX_NUM_EDGES_IN_SQUISHED_DAWG_FILE 的值。

如何提高字典的信任度/強度?

對於 tesseract-ocr < 3.01,嘗試將 dict/permute.cpp 中的 NON_WERD 和 GARBAGE_STRING 提高到 3 甚至 5。

對於 tesseract-ocr >= 3.01,嘗試在設定檔中增加變數 language_model_penalty_non_freq_dict_word 和 language_model_penalty_non_dict_word。預設值分別為 0.1 和 0.15。

對於 tesseract-ocr 2.0x:如果您要識別的文字字體與您的訓練資料差異很大,並且您不介意速度變慢,您也可以嘗試將 classify/intmatcher.cpp 中的 ClassPrunerThreshold 從 229 降低到約 200。這些措施都應該提高字典從非字詞解析單字的能力。

當然,任何提高字典功能的變更也會提高產生字典幻覺字詞的能力。如果這是一個問題,請將短單字從字典中移除,並且不要新增大量很少使用的單字,因為它們會增加與更常用單字之間的歧義。

若要反其道而行並關閉字典,您可以從 traineddata 檔案中刪除適當的 dawg (s)(使用 combine_tessdata),或將適當的 load_type_dawg 參數設定為 false,但這必須使用設定檔和帶有 configs 引數的 Init 版本來完成。它無法透過 SetVariable 完成,因為該參數正在控制初始化。type 可以是 punc、system、number、bigram、freq、unambig 其中之一。

什麼是組態,以及我如何擁有更多組態?

Config 在 tesseract 中是一個多載的詞。其中一種含義是 控制參數的檔案,用於除錯或修改其行為,例如 tessdata/configs/segdemo。

另一種含義用於訓練和分類器中。

Config 代表來自不同字體的字元的不同(潛在)形狀。MAX_NUM_CONFIGS 限制適用於 mftraining 命令列上包含任何一個字元樣本的不同檔案的數量,因為每個檔案都被假定為代表不同的字體。目前 (2.03) 有 32 個 config 的限制。如果並非所有檔案都包含所有字元,您可以於 mftraining 命令列上使用超過 32 個檔案。

其他解決問題的方法

如果檔案包含非常相似的樣本,您可以將它們合併在一起,成為一個檔案,以減少檔案總數。如果兩個檔案中的字元看起來非常不同,請不要這樣做。

增加 MAX_NUM_CONFIGS(在intproto.h 中)。這會造成一些影響。您會使以不同的 MAX_NUM_CONFIGS 值產生的 inttemp 檔案無法讀取。我們正努力克服這個 3.0 版的弱點。但不會在 2.04 版中出現。此外,分類速度會變慢並使用更多記憶體。

當同一個 TessBaseAPI 物件用於解碼多個圖片時,tesseract 的結果不一致

嘗試使用 ClearAdaptiveClassifier() 清除適應性資料,或使用設定變數關閉適應性分類器

classify_enable_learning 0
classify_enable_adaptive_matcher 0

另請參閱 tesseract 論壇上的討論

忽略字元上方和下方的變音符號/或導致垃圾輸出。

嘗試將 textord_min_linesize 的預設值 (1.25) 增加到更高的值。有些使用者回報使用值 2.5 時效果良好。

文件在哪裡?

您正在看它。如果事情不清楚,請在 Tesseract Google 群組中搜尋或在那裡向我們提問。如果您想幫助我們寫更多,請執行,並將其張貼到群組!

我如何試用下一個版本?

定期穩定版本會發佈到下載頁面。在發佈之間,特別是在新版本發佈之前,最新的程式碼可從 git 取得。您可以在這裡找到原始碼:https://github.com/tesseract-ocr/tesseract.git,您可以使用命令列或按照連結到如何使用各種用戶端程式和外掛程式的說明來簽出它。

actual_tessdata_num_entries_<= TESSDATA_NUM_ENTRIES:Error:Assert failed:in file ..\ccutil\tessdatamanager.cpp, line 55_

如果您在執行 tesseract 時收到錯誤,請檢查您是否使用了正確版本的 traineddata(例如,3.00 和 3.01)。您無法將 3.01 traineddata 與 tesseract 3.00 一起使用。

last_char == ‘\n’:Error:Assert failed:in file ..\ccutil\tessdatamanager.cpp, line 95

如果您在執行 combine_tessdata 時收到錯誤

這表示您的 lang.unicharambigs 檔案末尾缺少空行。

錯誤:非法最小或最大規格

如果數字格式(在 Linux 上為「locale」,在 Windows 中為「地區和語言選項」)與英文格式不同,就可能發生這種情況。解決方案是在呼叫 tesseract 之前,將您的 LC_NUMERIC (程式碼中) 的語言環境設定為「C」。在某些情況下,您需要包含 locale.h

#include <locale.h>
setlocale (LC_NUMERIC, "C");

另一個選項是調整您的使用者語言環境/區域設定。

另請參閱問題250228 中的資訊

錯誤:inttemp 中有 X 個類別,而 unicharset 包含 Y 個 unichar。

(其中 Y != X)有 2 種可能性:X ~= Y,通常 X < Y:通常是由於訓練過程失敗所致。尋找 tr 檔案產生過程中的 FATALITY 訊息。看起來訓練過程未能擷取某些字元的一些樣本,並且它們沒有進入 inttemp 檔案(在 mftraining 中),因為 tr 檔案中沒有條目。applybox 有一些嚴重的問題,導致許多人遇到這個問題。字元樣本需要間隔開來。

X 是一個任意數字(非常大 + 或 -),而 Y 是一個介於 100 和幾千之間的合理數字,具體取決於語言:inttemp 檔案已損壞,或者(如果您沒有自行訓練),您的硬體有一個奇怪的位元組順序架構,未被自動偵測到。大端或小端 32 位元和 64 位元應該可以運作,但混合位元組順序 (0x12345678 -> 0x56 0x78 0x12 0x13 或類似) 將無法運作。取得一個合理的硬體架構,或重新訓練自己。然後您的 inttemp 將與硬體匹配。

錯誤:unicharset 的大小大於 MAX_NUM_CLASSES

只需增加您組建中的 MAX_NUM_CLASSES(在 dict/matchdefs.h 中)。請參閱問題 670743

如何讓錯誤訊息輸出到 tesseract.log 而不是 stderr?

若要還原寫入 tesseract.log 而不是寫入主控台視窗的舊行為,您需要一個包含以下內容的文字檔案

debug_file tesseract.log

將該檔案命名為 ‘logfile’ 並將其放入 tessdata/configs/ 中。然後將 logfile 加入到命令列的結尾。

如何抑制 tesseract 資訊行?

請參閱問題 579。在 Linux 上,您可以將 stderr 和 stdout 輸出重新導向到 /dev/null。例如

tesseract phototest.tif phototest 1>/dev/null 2>&1

使用 tesseract 3.02,您可以使用設定「quiet」。例如

tesseract phototest.tif phototest quiet

警告:這兩個選項都會導致您看不到錯誤訊息(如果有的話)。

如何取得每個單字的座標和信賴度?

有兩個選項。如果您不想深入程式設計,可以使用 Tesseract 的 hOCR 輸出格式(請參閱Tesseract 手冊頁以了解詳細資訊)。如果您熟悉程式設計,請使用 Tesseract API

信賴度是如何計算的?

我可以將 Tesseract 用於手寫辨識嗎?

您可以這樣做,但效果不會很好,因為 Tesseract 是為列印文字而設計的。請改為查看 Lipi Toolkit 專案。

我可以將 tesseract 用於條碼辨識嗎?

否。Tesseract 用於文字識別。

舊版 tesseract 的問題

(來自狀態為「請在此處尋求協助」的問題追蹤器資訊。)

如何將 Tesseract 引擎移植到 vb6 專案中?

請參閱問題 42中的建議。

tessdll.dll 的 Delphi 包裝函式

請查看附加元件文件或參閱 問題 88中的註解。

不完整的 OCR 結果

請參閱第 44 號議題中的建議。

錯誤 LNK2001: 無法解析的外部符號 “public: static char __cdecl TessBaseAPI::TesseractRect(unsigned char const*,int,int,int,int,int,int)” (?TesseractRect@TessBaseAPI@@SAPADPBEHHHHHH@Z)

如果您使用的是 2.04 版和 VC++ 6,請在包含 baseapi.h 之前新增 #define TESSDLL_IMPORTS。(請參閱第 297 號議題

訓練時,方塊重疊沒有斑點或斑點位於多行中的錯誤

如果您遇到此錯誤,請嘗試使用頁面分割值 5 或 6。例如:

tesseract input_image output -psm 6 batch.nochop makebox

或查看第 471 號議題中的其他建議

訓練失敗並顯示錯誤訊息「mf.cpp:78: FEATURE_SET_STRUCT* ExtractMicros…」

請參閱第 488 號議題中關於如何改善輸入影像的建議。

錯誤訊息:範例 0 的字體 id = -1/0,類別 id = 1/105

這表示字型名稱不在 font_properties 中,或者 font_properties 不符合需求

我的問題不在這裡!

請嘗試搜尋論壇:http://groups.google.com/group/tesseract-ocr,因為即使您的問題未在此列出,先前也可能有人提出過。