安裝Tesseract實現(xiàn)OCR

本教程翻譯自PyImageSearch英文原文

實現(xiàn)效果

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

OCR可以自動對手寫或者印刷字體進(jìn)行類型轉(zhuǎn)化為機(jī)器編碼文本字符串,供我們存取和操作。

本系列第一部分將專注于在你的機(jī)器上安裝和配置Tesseract,其次是利用tesseract命令實現(xiàn)對輸入圖片的OCR應(yīng)用。

下一章我們將講述如何通過Python綁定Tesseract庫去實現(xiàn)調(diào)用Tesseract方法。

安裝 Tesseract

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

Tesseract可以處理很多自然語音,英語、葡萄牙語系、意第緒語等。截止到2015年為止支持超過100種書面語言,并且可以通過訓(xùn)練學(xué)習(xí)輕松掌握其他語言。

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

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

這篇文章分三部分:

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

學(xué)習(xí)完這篇文章你將學(xué)會使用Tesseract處理你的圖片。

步驟1: 安裝Tesseract

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

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

$ brew install tesseract
在macOS上安裝Tesseract OCR.

如果使用Ubuntu系統(tǒng),使用apt-get 安裝Tesseract。

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

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

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

執(zhí)行如下命令,可以驗證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
驗證Tesseract是否安裝成功.

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

如果你安裝失?。?/p>

-bash: tesseract: command not found

如果看到以上結(jié)果,證明你的機(jī)器沒有安裝Tesseract。請返回到步驟1重寫開始?;蛘吣阈枰履愕腜ATH環(huán)境。

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

我們將使用干凈的預(yù)處理過的圖片,以便獲取更好的識別結(jié)果。

當(dāng)使用Tesseract時,我建議:

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

如果因為如上問題導(dǎo)致的識別偏差,我們將在后續(xù)的章節(jié)中介紹如何處理。

現(xiàn)在,讓我們來實現(xiàn)對圖片的OCR識別吧:

示例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中打印出來。

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


示例2

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

$ tesseract tesseract_inputs/example_02.png stdout 
Warning in pixReadMemPng: work-around: writing to a temp file
PyImageSearch
Tesseract可以正確的識別出圖片內(nèi)容

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

下面,讓我們嘗試去識別數(shù)字。

數(shù)字圖片

這個示例使用命令行識別數(shù)字:

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

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

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

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

Tesseract的局限性

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

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

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

定位信用卡上的一組四位數(shù)字

但是,當(dāng)我嘗試使用Tesseract去識別以下圖片的時候,結(jié)果并不理想:

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

這里看到Tesseract的識別結(jié)果是 5513,但是圖片顯示的數(shù)字是5678。

不幸的是,這是Tesseract限制的最好的一個例子。當(dāng)我們將前景文本和背景區(qū)分開后,文本的像素化特性使Tesseract混淆了。換個說法應(yīng)該使Tesseract并沒有對信用卡的字體進(jìn)行學(xué)習(xí)訓(xùn)練。

Tesseract最適合在構(gòu)建掃描圖像,預(yù)處理圖像的文檔處理管道時,需要應(yīng)用光學(xué)字符識別的情況。

我們應(yīng)該了解Tesseract并不是一個OCR識別的現(xiàn)成的解決方案,不能應(yīng)用所有的圖片。

為了實現(xiàn)這個目標(biāo),我們將需要應(yīng)用特征提取,機(jī)器學(xué)習(xí)和深度學(xué)習(xí)技術(shù)。

一個非常好的學(xué)習(xí)特征提取和機(jī)器學(xué)習(xí)去構(gòu)建手寫字體識別系統(tǒng)的列子可以在我的書中找到。 Practical Python and OpenCV.

本章摘要

今天我們在學(xué)習(xí)Tesseract進(jìn)行OCR識別的教程的第一部分,學(xué)習(xí)到了如何在計算機(jī)上安裝和配置Tesseract。并且我們使用tesseract庫去識別一些圖片示例。

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

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

下周我們將要學(xué)習(xí)通過Python代碼,更多的與Tesseract交互,請繼續(xù)關(guān)注。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容