安裝Tesseract實現OCR

本教程翻譯自PyImageSearch英文原文

97652-c644c24ebb4035bb.png
實現效果

今天的博客文章是安裝和使用Tesseract library 進行OCR識別的兩章系列中的第一部分。

OCR可以自動對手寫或者印刷字體進行類型轉化爲機器編碼文本字符串,供我們存取和操作。

本系列第一部分將專注於在你的機器上安裝和配置Tesseract,其次是利用tesseract命令實現對輸入圖片的OCR應用。

下一章我們將講述如何通過Python綁定Tesseract庫去實現調用Tesseract方法。

安裝 Tesseract

Tesseract,最初是由Hewlett Packard在1980年代開發的,在2005年開源。2006年以後Google開始贊助這個項目。

Tesseract可以處理很多自然語音,英語、葡萄牙語系、意第緒語等。截止到2015年爲止支持超過100種書面語言,並且可以通過訓練學習輕鬆掌握其他語言。

最初Tesseract是用C語言寫的,在1998年改用C++。Tesseract是無GUI交互的,可以通過命令後被執行。但是有一些其他軟件提供GUI對Tesseract進行了封裝。

更多Tesseract的介紹可以訪問GitHub或者Wikipedia article

這篇文章分三部分:

  • 安裝Tesseract
  • 驗證Tesseract是否正確
  • 對輸入圖片進行OCR識別

學習完這篇文章你將學會使用Tesseract處理你的圖片。

步驟1: 安裝Tesseract

如果要使用Tesseract庫,首先需要安裝它到你的機器上。

針對macOS用戶,我們使用Homebrew 去安裝Tesseract:

$ brew install tesseract
97652-023543af3ac72930.png
在macOS上安裝Tesseract OCR.

如果使用Ubuntu系統,使用apt-get 安裝Tesseract。

$ sudo apt-get install tesseract-ocr
97652-6e43e3885b85b396.png
在Ubuntu上安裝Tesseract OCR.

Windows,請參考 Tesseract documentation PyImageSearch不支持或者不推薦使用Windows去開發。

步驟2: 驗證Tesseract是否安裝成功

執行如下命令,可以驗證Tesseract是否安裝成功:

$ tesseract -v
tesseract 3.05.00
 leptonica-1.74.1
  libjpeg 8d : libpng 1.6.29 : libtiff 4.0.7 : zlib 1.2.8
97652-0da866c8b3fbf5c5.png
驗證Tesseract是否安裝成功.

如果你看到Tesseract的版本和其依賴的庫的版本列表,證明你已經安裝成功。

如果你安裝失敗:

-bash: tesseract: command not found

如果看到以上結果,證明你的機器沒有安裝Tesseract。請返回到步驟1重寫開始。或者你需要更新你的PATH環境。

步驟 3: 使用Tesseract對圖片OCR識別

我們將使用乾淨的預處理過的圖片,以便獲取更好的識別結果。

當使用Tesseract時,我建議:

  • 儘可能使用高分辨率和高DPI的圖片。
  • 應用閾值處理從背景中分割文本。
  • 確保前景色和背景色可以清晰的分開。(例如:沒有像素化或字符變形)
  • 應用text skew correction處理輸入圖片確保文字合理的對其。

如果因爲如上問題導致的識別偏差,我們將在後續的章節中介紹如何處理。

現在,讓我們來實現對圖片的OCR識別吧:

97652-9d3497d4b9f6b0f5.png
示例1

只需要在terminal中使用如下命令即可:

$ tesseract tesseract_inputs/example_01.png stdout 
Warning in pixReadMemPng: work-around: writing to a temp file
Testing Tesseract OCR

識別正確! Tesseract 非常正確的識別出, “Testing Tesseract OCR”, 並且在terminal中打印出來。

下面,我們試試另外的圖片:


97652-598eff978bf14b40.png
示例2

在Terminal中輸入下面的命令,注意輸入文字名的改變:

$ tesseract tesseract_inputs/example_02.png stdout 
Warning in pixReadMemPng: work-around: writing to a temp file
PyImageSearch
97652-5efce7b1d12096c0.jpg
Tesseract可以正確的識別出圖片內容

成功!Tesseract正確識別出圖片包含的文本“PyImageSearch”

下面,讓我們嘗試去識別數字

97652-acca457a700ff449.png
數字圖片

這個示例使用命令行識別數字:

$ tesseract tesseract_inputs/example_03.png stdout digits
Warning in pixReadMemPng: work-around: writing to a temp file
650 3428

又一次,Tesseract成功識別出我們要識別的字符串(這個例子使純數字)。

在上面的三個示例中,Tesseract都能成功的識別出我們的圖片。你可以會以爲Tesseract可以識別你所有的情況。

但是,我們將要在下個段落列出,Tesseract使用的侷限性。

Tesseract的侷限性

幾周之前,我正在做的工作是通過OCR識別信用卡上面的16爲數字。

我非常容易的通過python代碼定位四組四位數的每一組。

以下是4位數字ROI(region of interest)的示例:

97652-22a94b3cca5aab6a.jpg
定位信用卡上的一組四位數字

但是,當我嘗試使用Tesseract去識別以下圖片的時候,結果並不理想:

97652-5b7088320b9015c4.png
嘗試識別有噪音的圖片
$ tesseract tesseract_inputs/example_04.png stdout digits
Warning in pixReadMemPng: work-around: writing to a temp file
5513

這裏看到Tesseract的識別結果是 5513,但是圖片顯示的數字是5678。

不幸的是,這是Tesseract限制的最好的一個例子。當我們將前景文本和背景區分開後,文本的像素化特性使Tesseract混淆了。換個說法應該使Tesseract並沒有對信用卡的字體進行學習訓練。

Tesseract最適合在構建掃描圖像,預處理圖像的文檔處理管道時,需要應用光學字符識別的情況。

我們應該瞭解Tesseract並不是一個OCR識別的現成的解決方案,不能應用所有的圖片。

爲了實現這個目標,我們將需要應用特徵提取,機器學習和深度學習技術。

一個非常好的學習特徵提取和機器學習去構建手寫字體識別系統的列子可以在我的書中找到。 Practical Python and OpenCV.

本章摘要

今天我們在學習Tesseract進行OCR識別的教程的第一部分,學習到了如何在計算機上安裝和配置Tesseract。並且我們使用tesseract庫去識別一些圖片示例。

但是,我們發現除非我們的圖片非常清晰的分離的前景和背景才能被Tesseract很好的識別出結果。在有"噪點"的圖片情況,我們需要獲取更好的,更精確的訓練模型去適應這種特別的情況。

對於具有高分辨率輸入的情況,其中前景文本被乾淨地從背景中分割的圖片,Tesseract 是最適合的。

下週我們將要學習通過Python代碼,更多的與Tesseract交互,請繼續關注。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章