Tesseract介紹
Tesseract 是一個開源的光學字元識別(OCR)引擎,最初由 HP 在 1985 年至 1995 年間開發,後來被 Google 收購併開源。Tesseract 支援多種語言的文字識別,能夠識別圖片中的文字,並將其轉換為可編輯和可搜尋的資料格式。它適用於多種應用場景,包括文件掃描、影像處理、數字存檔等。
Tesseract 的最新版本顯著提高了識別準確率,支援的檔案格式包括 TIFF、JPEG、PNG 等常見圖片格式。此外,Tesseract 還提供了一個命令列工具,允許使用者透過簡單的命令列輸入來執行 OCR 任務。對於開發者而言,Tesseract 提供了多種程式語言的 API 介面,如 C++、Python、Java 等,使得整合 OCR 功能到各種應用程式中變得更為容易。
除了基本的 OCR 功能外,Tesseract 還支援語言模型和訓練工具,允許使用者根據特定需求訓練自定義模型,以提高某些特定型別或格式文字的識別準確率。這些特性使得 Tesseract 成為了一個強大而靈活的 OCR 工具,廣泛應用於個人和企業的文字數字化處理中。
GitHub地址:https://github.com/tesseract-ocr/tesseract
官方文件地址:https://tesseract-ocr.github.io
下載安裝Tesseract
下載Tesseract
Home · UB-Mannheim/tesseract Wiki
安裝的時候,記得選上中文語言包:
輸入
tesseract -v
檢視Tesseract是否安裝成功
設定環境變數:
輸入Tesseract的安裝地址:
注意安裝路徑最好不要包含中文,由於C盤空間還比較充足,我就裝在預設位置了。
再次驗證安裝是否完成:
tesseract -v
安裝成功完成。
Tesseract的基本命令列使用
基本文字識別
最簡單的命令是將圖片中的文字識別並輸出到標準輸出(螢幕):
tesseract D:\test2.png stdout
預設識別的是英文的,先拿一個英文的圖片試試:
圖片文字識別的效果
效果還是很ok的。
再試試一箇中文的圖片:
預設是無法識別中文的,這時候需要指定語言才行。
指定一種語言識別
如果圖片中的文字不是英文,你需要指定相應的語言。Tesseract 支援多種語言,可以透過以下命令檢視支援的語言:
tesseract --list-langs
會出現你已經下載了語言包的語言。
指定語言的命令如下(例如,識別中文):
tesseract D:\test.png stdout -l chi_sim
這裡的 -l chi_sim
表示使用簡體中文語言模型。
效果也很不錯。
指定多種語言識別
有時候我們需要同時識別多種語言,以下面這張圖片為例:
在命令列中新增-l LANG[+LANG]可以使用多種語言進行識別:
tesseract D:\test3.png stdout -l eng+chi_sim
效果也還行。但是會發現識別的中文很多地方都有空格。
將中文改為主要識別語言:
tesseract D:\test3.png stdout -l chi_sim+eng
可以發現識別的空格少了很多。
儲存識別文字到檔案
也可以把識別的內容儲存在一個txt檔案中,命令如下所示:
tesseract D:\test2.png D:\output.txt
使用quiet模式抑制訊息
不使用quiet模式與使用quiet模式的對比:
少了表示 Tesseract 正在嘗試估算輸入影像的解析度的資訊Estimating resolution as 182
。
可搜尋的pdf輸出
這將建立一個包含影像和單獨可搜尋文字層的PDF,其中包含識別出的文字:
tesseract D:\test2.png D:\output -l eng pdf
實現效果:
HOCR輸出
在命令末尾新增hocr以使用‘hocr’配置檔案,獲取HOCR輸出:
tesseract D:\test2.png - -l eng hocr
識別效果:
這樣不夠直觀,儲存在一個html檔案中,然後再開啟看看:
tesseract D:\test2.png D:\test2.html -l eng hocr
把生成的檔案字尾改為.html,用瀏覽器開啟,效果如下所示:
TSV輸出
在命令末尾新增“tsv”配置檔案以獲取TSV輸出:
tesseract D:\test5.jpg - -l chi_sim tsv
以這張圖片為例:
實現效果如下所示:
使用不同的頁面分割模式
-psm 3 - 全自動頁面分割,但無方向和指令碼檢測。(預設)
以這張圖片為例:
tesseract D:\test4.png - --psm 3
實現的效果:
-psm 6 - 假定文字為一個整體均勻的塊。
以這張圖片為例:
tesseract D:\test5.png - --psm 6
實現效果如下所示:
使用 -c preserve_interword_spaces=1 來保留空格
tesseract D:\test5.png - --psm 6 -c preserve_interword_spaces=1
實現效果如下所示:
使用pdftotext保持文字輸出的佈局
tesseract D:\test5.png D:\test5 -l eng –psm 11 pdf
實現的效果:
總結
現在圖片文字識別已經有多種方式可以實現,也可以透過雲服務商的文字識別服務,缺點就是需要網路,數量多了需要收費,優點就是識別準確率比較高。使用Tesseract與PaddleOCR這種方式的好處就是離線可用,速度也挺快的。還有一種目前還沒試過的方式,就是使用多模態的大語言模型,缺點可能就是如果使用大模型服務提供商會比較耗費token,自己本地用ollama又比較吃配置相對於Tesseract與PaddleOCR而言,還有就是多模態大語言模型可能自己會出現一些別的內容。
之前寫過幾篇關於PaddleOCR的文章,感興趣也可以閱讀:
1、如何自己動手實現一個圖片解答小助手
2、C#使用PaddleOCR進行圖片文字識別