如何使用 Tesseract 從 Linux 命令行執行 OCR
已發表: 2022-01-29您可以使用 Tesseract OCR 引擎在 Linux 命令行上從圖像中提取文本。 它快速、準確,支持大約 100 種語言。 以下是如何使用它。
光學字符識別
光學字符識別 (OCR) 是一種查看和查找圖像中的單詞,然後將它們提取為可編輯文本的能力。 對於人類來說,這個簡單的任務對於計算機來說是非常困難的。 至少可以說,早期的努力很笨拙。 如果字體或大小不符合 OCR 軟件的喜好,計算機通常會感到困惑。
儘管如此,這一領域的先驅者仍然受到高度尊重。 如果您丟失了文檔的電子副本,但仍有打印版本,OCR 可以重新創建可編輯的電子版本。 即使結果不是 100% 準確,這仍然可以節省大量時間。
通過一些手動整理,您將獲得您的文檔。 人們原諒了它所犯的錯誤,因為他們了解 OCR 包所面臨的任務的複雜性。 另外,這比重新輸入整個文檔要好。
從那以後,情況有了顯著改善。 由 Hewlett Packard 編寫的 Tesseract OCR 應用程序於 1980 年代作為商業應用程序開始。 它於 2005 年開源,現在得到 Google 的支持。 它具有多語言功能,被認為是可用的最準確的 OCR 系統之一,您可以免費使用它。
安裝 Tesseract OCR
要在 Ubuntu 上安裝 Tesseract OCR,請使用以下命令:
sudo apt-get install tesseract-ocr
在 Fedora 上,命令是:
須藤 dnf 安裝 tesseract
在 Manjaro 上,您需要輸入:
sudo pacman -Syu tesseract
使用 Tesseract OCR
我們將對 Tesseract OCR 提出一系列挑戰。 我們的第一個包含文本的圖像是從《通用數據保護條例》的第 63 條獨奏會中摘錄的。 讓我們看看 OCR 是否可以讀取(並保持清醒)。
這是一個棘手的圖像,因為每個句子都以微弱的上標數字開頭,這在立法文件中很常見。
我們需要給tesseract
命令一些信息,包括:
- 我們希望它處理的圖像文件的名稱。
- 它將創建以保存提取的文本的文本文件的名稱。 我們不必提供文件擴展名(它始終是 .txt)。 如果同名文件已經存在,它將被覆蓋。
- 我們可以使用
--dpi
選項告訴tesseract
圖像的每英寸點數 (dpi) 分辨率是多少。 如果我們不提供 dpi 值,tesseract
會嘗試找出它。
我們的圖像文件名為“recital-63.png”,其分辨率為 150 dpi。 我們將從它創建一個名為“recital.txt”的文本文件。
我們的命令如下所示:
tesseract 獨奏會-63.png 獨奏會--dpi 150
結果非常好。 唯一的問題是上標——它們太暗而無法正確閱讀。 高質量的圖像對於獲得良好的效果至關重要。
tesseract
已將上標數字解釋為引號 (") 和度數符號 (°),但實際文本已被完美提取(必須修剪圖像的右側以適合此處)。
最後一個字符是一個字節,十六進制值為0x0C,即回車。
下面是另一張不同大小的文字圖片,包括粗體和斜體。
該文件的名稱是“bold-italic.png”。 我們要創建一個名為“bold.txt”的文本文件,所以我們的命令是:
tesseract粗體斜體.png粗體--dpi 150
這篇沒有任何問題,文本被完美地提取出來。
使用不同的語言
Tesseract OCR 支持大約 100 種語言。 要使用一種語言,您必須先安裝它。 當您在列表中找到要使用的語言時,請記下其縮寫。 我們將安裝對威爾士語的支持。 它的縮寫是“cym”,是“Cymru”的縮寫,意思是威爾士語。
安裝包名為“tesseract-ocr-”,末尾標註語言縮寫。 要在 Ubuntu 中安裝威爾士語言文件,我們將使用:
sudo apt-get install tesseract-ocr-cym
帶有文字的圖像如下。 這是威爾士國歌的第一節。
讓我們看看 Tesseract OCR 是否能夠應對挑戰。 我們將使用-l
(語言)選項讓tesseract
知道我們想要使用的語言:
tesseract hen-wlad-fy-nhadau.png 國歌 -l cym --dpi 150
tesseract
完美應對,如下面的摘錄文本所示。 Da iawn ,正方體 OCR。
如果您的文檔包含兩種或多種語言(例如威爾士語到英語詞典),您可以使用加號 ( +
) 告訴tesseract
添加另一種語言,如下所示:
tesseract image.png 文本文件 -l eng+cym+fra
將 Tesseract OCR 與 PDF 結合使用
tesseract
命令旨在處理圖像文件,但它無法讀取 PDF。 但是,如果您需要從 PDF 中提取文本,您可以先使用另一個實用程序來生成一組圖像。 單個圖像將代表 PDF 的單個頁面。
您需要的pdftppm
實用程序應該已經安裝在您的 Linux 計算機上。 我們將用於示例的 PDF 是 Alan Turing 關於人工智能的開創性論文“計算機與智能”的副本。
我們使用-png
選項來指定我們要創建 PNG 文件。 我們的 PDF 文件名為“turing.pdf”。 我們將圖像文件命名為“turing-01.png”、“turing-02.png”等:
pdftoppm -png 圖靈.pdf 圖靈
要使用單個命令對每個圖像文件運行tesseract
,我們需要使用 for 循環。 對於我們的每個“turing- nn.png ”文件,我們運行tesseract
,並創建一個名為“text-”的文本文件,加上“turing- nn ”作為圖像文件名的一部分:
對於我在圖靈-??.png; 做 tesseract "$i" "text-$i" -l eng; 完畢;
要將所有文本文件合併為一個,我們可以使用cat
:
cat text-turing* > complete.txt
那麼,它是怎麼做的呢? 很好,如下所示。 不過,第一頁看起來很有挑戰性。 它具有不同的文本樣式和大小以及裝飾。 頁面右邊緣還有一個垂直的“水印”。
但是,輸出接近原始。 顯然,格式丟失了,但文本是正確的。
垂直水印被轉錄為頁面底部的一行亂碼。 文本太小,無法被tesseract
準確讀取,但很容易找到並刪除它。 最糟糕的結果將是每行末尾的雜散字符。
奇怪的是,第二頁問題和答案列表開頭的單個字母被忽略了。 PDF 中的部分如下所示。
正如您在下面看到的,問題仍然存在,但每行開頭的“Q”和“A”都丟失了。
圖表也不會被正確轉錄。 讓我們看看當我們嘗試從圖靈 PDF 中提取如下所示的內容時會發生什麼。
正如您在下面的結果中看到的那樣,字符被讀取,但圖表的格式丟失了。
再次, tesseract
與小尺寸的下標作鬥爭,並且它們被錯誤地渲染。
不過,平心而論,這仍然是一個不錯的結果。 我們無法提取簡單的文本,但後來故意選擇了這個示例,因為它提出了挑戰。
需要時的好解決方案
OCR 不是您每天都需要使用的東西。 但是,當確實需要時,很高興知道您擁有最好的 OCR 引擎之一。