0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

在Raspberry Pi上使用Tesseract進行光學(xué)字符識別的方法

科技觀察員 ? 來源:circuitdigest ? 作者:Aswinth Raj ? 2022-08-25 16:03 ? 次閱讀

機器使用相機觀察現(xiàn)實世界并解釋其中數(shù)據(jù)的能力將對其應(yīng)用產(chǎn)生更大的影響。無論是像 Starship 機器人這樣的簡單送餐機器人,還是像特斯拉這樣的先進自動駕駛汽車,它們都依賴從高度復(fù)雜的攝像頭獲取的信息來做出決定。在本教程中,我們將學(xué)習(xí)如何通過閱讀圖像上的字符來識別圖像中的細節(jié)。這稱為光學(xué)字符識別(OCR)。

這為許多應(yīng)用程序打開了大門,例如自動讀取名片中的信息、從名稱板上識別商店或識別道路上的標志板等等。我們中的一些人可能已經(jīng)通過 Google Lens 體驗過這些功能,所以今天我們將使用來自Google Tesseract-OCR 引擎的光學(xué)字符識別 (OCR)工具以及 python 和 OpenCV 構(gòu)建類似的東西,以使用Raspberry Pi識別圖片中的字符。

Raspberry pi 是一種便攜式且功耗更低的設(shè)備,用于許多實時圖像處理應(yīng)用,如人臉檢測、 對象跟蹤、 家庭安全系統(tǒng)、監(jiān)控攝像頭等。

先決條件

如前所述,我們將使用 OpenCV 庫來檢測和識別人臉。因此,在繼續(xù)本教程之前,請確保在 Raspberry Pi 上安裝 OpenCV 庫。還可以使用 2A 適配器為您的 Pi 供電,并將其連接到顯示監(jiān)視器以便于調(diào)試。

本教程不會解釋OpenCV的工作原理,如果您有興趣學(xué)習(xí)圖像處理,請查看此OpenCV 基礎(chǔ)知識和高級圖像處理教程。您還可以在此使用 OpenCV 的圖像分割教程中了解輪廓、斑點檢測等。

樹莓派上安裝 Tesseract

要在 Raspberry Pi 上執(zhí)行光學(xué)字符識別,我們必須在 Pi 上安裝 Tesseract OCR 引擎。為此,我們必須首先配置 Debian 軟件包 (dpkg),這將幫助我們安裝 Tesseract OCR。在終端窗口中使用以下命令來配置 Debian Package。

sudo dpkg - -configure -a

然后我們可以繼續(xù)使用 apt-get 選項安裝 Tesseract OCR (光學(xué)字符識別)。下面給出了相同的命令。

sudo apt-get install tesseract-ocr

您的終端窗口將如下所示,安裝完成大約需要 5-10 分鐘。

pYYBAGMHKuOATGiEAACgOirBrI8627.png

現(xiàn)在我們已經(jīng)安裝了 Tesseract OCR,我們必須使用 pip install package 安裝 PyTesseract 包。Pytesseract 是圍繞 tesseract OCR 引擎的 python 包裝器,它幫助我們將 tesseract 與 python 一起使用。按照以下命令在 python 上安裝 pytesseract。

點安裝 pytesseract

在進行此步驟之前,請確保已經(jīng)安裝了枕頭。學(xué)過樹莓派人臉識別教程的人應(yīng)該已經(jīng)安裝好了。其他人可以使用該教程并立即安裝。pytesseract 安裝完成后,您的窗口將如下所示

poYBAGMHKt-ASZZuAACQlEnZaTk990.png

Windows/Ubuntu 上的 Tesseract 4.0

Tesseract 光學(xué)字符識別項目最初由 Hewlett Packard 于 1980 年啟動,然后被 Google 采用,該項目一直保持至今。多年來,Tesseract 不斷發(fā)展,但它仍然只在受控環(huán)境中運行良好。如果圖像有太多的背景噪音或失焦,則 tesseract 似乎無法正常工作。

為了克服這個問題,最新版本的 tesseract Tesseract 4.0 使用深度學(xué)習(xí)模型來識別字符甚至筆跡。Tesseract 4.0 使用長短期記憶 (LSTM) 和循環(huán)神經(jīng)網(wǎng)絡(luò) (RNN) 來提高其 OCR 引擎的準確性。不幸的是,在本教程的這個時候,Tesseract 4.0 僅適用于 Windows 和 Ubuntu,但仍處于 Raspberry Pi 的 beta 階段。所以我們決定在 Windows 上試用 Tesseract 4.0,在 Raspberry Pi 上試用 Tesseract 3.04。

Pi上的簡單字符識別程序

因為我們已經(jīng)在 PI 中安裝了Tesseract OCR和 Pytesseract 包。我們可以快速編寫一個小程序來檢查字符識別是如何處理測試圖像的。我使用的測試圖像、程序和結(jié)果可以在下圖中找到。

pYYBAGMHKtuARTBKAAAvuamRkRQ114.png

如您所見,該程序非常簡單,我們甚至沒有使用任何 OpenCV 包。上面的程序在下面給出

from PIL import Image

img =Image.open (‘1.png’)

text = pytesseract.image_to_string(img, config=‘’)

print (text)

在上面的程序中,我們試圖從位于程序同一目錄內(nèi)的名為“1.png”的圖像中讀取文本。Pillow 包用于打開此圖像并將其保存在變量名img下。然后我們使用pytesseract 包中的image_to_sting方法檢測圖像中的任何文本,并將其保存為變量 text 中的字符串。最后我們打印文本的值來檢查結(jié)果。

如您所見,原始圖像實際上包含文本“解釋那些東西!01234567890 ”這是一個完美的測試圖像,因為我們在圖像中有字母、符號和數(shù)字。但是我們從 pi 得到的輸出是“解釋那些東西!Sdfosiefoewufv”這意味著 out 程序無法識別圖像中的任何數(shù)字。為了克服這個問題,人們通常使用 OpenCV 從程序中去除噪聲,然后根據(jù)圖像配置 Tesseract OCR 引擎以獲得更好的結(jié)果。但請記住,您不能期望 Tesseract OCR Python 提供 100% 可靠的輸出。

配置 Tesseract OCR 以改進結(jié)果

Pytesseract 允許我們通過設(shè)置更改圖像搜索字符方式的標志來配置 Tesseract OCR 引擎。配置 Tesseract OCR 時使用的三個主要標志是語言 (-l)、OCR 引擎模式 (--oem) 和頁面分段模式 (- -psm )。

除了默認的英語,Tesseract 還支持許多其他語言,包括印地語、土耳其語、法語等。我們在這里只使用英語,但您可以從官方github 頁面下載訓(xùn)練數(shù)據(jù)并將其添加到您的包中以識別其他語言。 還可以從同一圖像中識別兩種或多種不同的語言。語言由標志 -l設(shè)置,要將其設(shè)置為一種語言,請使用代碼和標志,例如對于英語,它將是-l eng,其中 eng 是英語的代碼。

下一個標志是 OCR Engine Mode,它有四種不同的模式。每種模式都使用不同的算法來識別圖像中的字符。默認情況下,它使用隨包安裝的算法。但我們可以將其更改為使用 LSTM 或神經(jīng)網(wǎng)絡(luò)。四種不同的引擎模式如下所示。該標志由--oem 指示,因此要將其設(shè)置為模式 1,只需使用--oem 1。

pYYBAGMHKtaAc8QPAAAg_Kl1xo4964.png

最后也是最重要的標志是頁面分割模式標志。當您的圖像具有如此多的背景細節(jié)以及字符或字符以不同的方向或大小書寫時,這些非常有用。共有 14 種不同的頁面分割模式,所有這些都在下面列出。該標志由–psm指示,因此設(shè)置模式為 11。它將是–psm 11。

poYBAGMHKtGAOq3CAAIHbUNwxYQ417.png

在 Tesseract Raspberry Pi 中使用 oem 和 psm 以獲得更好的結(jié)果

讓我們檢查一下這些配置模式的有效性。在下圖中,我嘗試識別限速板上的字符,上面寫著“ SPEED LIMIT 35 ”。如您所見,與其他字母相比,數(shù)字 35 的尺寸更大,這使 Tesseract 感到困惑,因此我們僅得到“SPEED LIMIT”的輸出,并且缺少數(shù)字。

poYBAGMHKs2ABJiDAAD9VouBzaY050.png

為了克服這個問題,我們可以設(shè)置配置標志。在上面的程序中,配置標志是空的 config=‘’,現(xiàn)在讓我們使用上面提供的詳細信息來設(shè)置它。圖像中的所有文本都是英文,所以語言標志是 -l eng,OCR 引擎可以保留為默認模式 3 所以 -oem 3?,F(xiàn)在終于在 psm 模式下,我們需要從圖像中找到更多的字符,所以我們在這里使用模式 11,它變成了 –psm 11。最后的配置行看起來像

測試= pytesseract.image_to_string(灰色,配置=‘-l eng --oem 3 --psm 12’)

相同的結(jié)果可以在下面找到。正如您現(xiàn)在所看到的,Tesseract 能夠從圖像中找到所有字符,包括數(shù)字。

pYYBAGMHKsiAJyxiAAFUqHSH-M8059.png

通過置信水平提高準確性

Tesseract 中另一個有趣的特性是image_to_data方法。該方法可以為我們提供詳細信息,例如圖像中字符的位置、檢測的置信度、行和頁碼。讓我們嘗試在示例圖像上使用它

poYBAGMHKsSAP9poAAH8yBfkKlE177.png

在這個特定的例子中,我們得到了很多噪聲信息以及原始信息。圖片是一家名為“富通醫(yī)院”的醫(yī)院的名字牌。但是除了名稱之外,圖像還具有其他背景細節(jié),例如徽標構(gòu)建等。因此,Tesseract 嘗試將所有內(nèi)容都轉(zhuǎn)換為文本,并給我們帶來了很多噪音,例如“$C”“|” “S_______S==+”等。

現(xiàn)在在這些情況下image_to_data方法就派上用場了。如您所見,上述光學(xué)字符識別算法返回其已識別的每個字符的置信度,F(xiàn)ortis 的置信度為 64,HOSPITAL 的置信度為 24。對于其他噪聲信息,置信度值為 10 或以下大于 10。這樣我們就可以過濾掉有用的信息,利用置信度的值來提高準確率。

樹莓派上的 OCR

雖然使用 Tesseract 時在 Pi 上的結(jié)果不是很令人滿意,但它可以與 OpenCV 結(jié)合以濾除圖像中的噪聲,如果圖像良好,可以使用其他配置技術(shù)獲得不錯的結(jié)果。我們已經(jīng)在 Pi 上使用 tesseract 嘗試了大約 7 種不同的圖像,并且通過相應(yīng)地調(diào)整每張圖片的模式來獲得接近的結(jié)果。完整的項目文件可以下載為該位置的 Zip,其中包含所有測試圖像和基本代碼。

讓我們在 Raspberry Pi 上再嘗試一個示例板標志,這一次非常簡單明了。下面給出了相同的代碼

從 PIL 導(dǎo)入 pytesseract 導(dǎo)入圖像

導(dǎo)入cv2

img = cv2.imread(‘4.png’,cv2.IMREAD_COLOR) #打開要識別字符的圖像

#img = cv2.resize(img, (620,480) ) #如果需要,調(diào)整圖像大小

gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) #轉(zhuǎn)換為灰色以減少

細節(jié) gray = cv2.bilateralFilter(gray, 11, 17, 17) #模糊以減少噪點

original = pytesseract.image_to_string(gray, config=‘’)

#test = (pytesseract.image_to_data(gray, lang=None, config=‘’, nice=0) ) #get confidence level if required

#print(pytesseract.image_to_boxes(灰色的))

打?。ㄔ?/p>

該程序打開我們需要從中識別字符的文件,然后將其轉(zhuǎn)換為灰度。這將減少圖像中的細節(jié),使 Tesseract 更容易識別字符。為了進一步減少背景噪聲,我們使用 OpenCV 中的一種雙邊濾波器對圖像進行模糊處理。最后,我們開始從圖像中識別字符并將其打印在屏幕上。最終的結(jié)果將是這樣的。

pYYBAGMHKr6AGavIAAQLcAbCxbM861.png

希望您理解本教程并喜歡學(xué)習(xí)新知識。OCR 用于許多地方,如自動駕駛汽車、車牌識別、路牌識別導(dǎo)航等,在 Raspberry Pi 上使用它為更多可能性打開了大門,因為它可以便攜且緊湊。

導(dǎo)入 pytesseract

從 PIL 導(dǎo)入圖像

導(dǎo)入簡歷2





img = cv2.imread('4.png',cv2.IMREAD_COLOR) #打開要識別字符的圖像

#img = cv2.resize(img, (620,480) ) #如果需要調(diào)整圖像大小



gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) #轉(zhuǎn)換為灰色以減少細節(jié)

gray = cv2.bilateralFilter(gray, 11, 17, 17) #Blur 去噪



原始= pytesseract.image_to_string(灰色,配置='')

#test = (pytesseract.image_to_data(gray, lang=None, config='', nice=0) ) #get confidence level if required

#print(pytesseract.image_to_boxes(灰色))



打?。ㄔ?br />


'''必需 = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'

最終 = ''



對于原始的 c:

對于需要的ch:

如果 c==ch:

最終 = 最終 + c

休息



打?。y試)



在測試中:

如果 a == "\n":

打?。ā罢业健保?''

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 字符識別
    +關(guān)注

    關(guān)注

    0

    文章

    17

    瀏覽量

    8621
  • OCR
    OCR
    +關(guān)注

    關(guān)注

    0

    文章

    141

    瀏覽量

    16264
收藏 人收藏

    評論

    相關(guān)推薦

    求DSP字符識別源程序

    有沒有哪位大神有DSP車牌字符識別的源程序,跪求分享,謝謝
    發(fā)表于 05-15 17:20

    運用Labview如何進行圖像采集與字符識別?

    運用Labview如何進行圖像采集與字符識別?
    發(fā)表于 04-27 16:06

    OCR光學(xué)字符識別技術(shù)與市場完美的融合到了一起

    移動端車牌識別,OCR光學(xué)字符識別技術(shù)
    發(fā)表于 06-04 15:55

    有沒有專門針對光學(xué)字符識別的功能包?

    有沒有專門針對“光學(xué)字符識別”的功能包?我有一個套件STM32H747I-Disco,打算做一些字符識別方面的項目。
    發(fā)表于 12-07 12:11

    模式識別中三種字符識別的方法

    本文總結(jié)出三種字符識別的方法基于模板匹配的字符識別法、完全基于字符的結(jié)構(gòu)特點和筆畫類型的識別法以及利用神經(jīng)網(wǎng)絡(luò)的
    發(fā)表于 10-09 16:15 ?0次下載

    兩級分類實現(xiàn)車牌字符識別

    車牌識別系統(tǒng)LPR(License Plate Recognition)包括車牌定位、字符分割和字符識別三大部分。其中,字符識別的準確及高效成為整個車牌
    發(fā)表于 11-30 11:31 ?1次下載
    兩級分類實現(xiàn)車牌<b class='flag-5'>字符識別</b>

    基于卷積神經(jīng)網(wǎng)絡(luò)CNN的車牌字符識別方法

    車牌字符識別是智能車牌識別系統(tǒng)中的重要組成部分。針對車牌字符類別多、背景復(fù)雜影響正確識別率的問題,提出了一種基于卷積神經(jīng)網(wǎng)絡(luò)(CNN)的車牌字符識別
    發(fā)表于 11-30 14:24 ?21次下載
    基于卷積神經(jīng)網(wǎng)絡(luò)CNN的車牌<b class='flag-5'>字符識別方法</b>

    光學(xué)字符識別讀表系統(tǒng)設(shè)計

    ,基于此需求進行系統(tǒng)研制,通過圖像處理和字符識別的應(yīng)用來實現(xiàn)管理系統(tǒng)的統(tǒng)一化、標準化、實時性。 圖像識別的主要目的是利用計算機自動處理圖片信息,用來取代人工去對圖像進行分類和
    發(fā)表于 02-28 11:15 ?1次下載
    <b class='flag-5'>光學(xué)</b><b class='flag-5'>字符識別</b>讀表系統(tǒng)設(shè)計

    采用機器視覺軟件的高速光學(xué)字符識別系統(tǒng)

    該視頻演示比較了利用Zynq-7000 All Programmable SoC和MVTec的HALCON機器視覺軟件執(zhí)行實時硅器件代碼識別的兩個高速光學(xué)字符識別(OCR)系統(tǒng)。
    的頭像 發(fā)表于 11-23 06:44 ?2243次閱讀

    OCR光學(xué)字符識別技術(shù)原理講解

     OCR (光學(xué)字符識別)是指電子設(shè)備(例如掃描儀或數(shù)碼相機)檢查紙上打印的字符,通過檢測暗、亮的模式確定其形狀,然后用字符識別方法將形狀翻譯成計算機文字的過程;即,針對印刷體
    的頭像 發(fā)表于 03-02 13:49 ?2.1w次閱讀

    使用低成本實現(xiàn)光學(xué)字符識別讀表系統(tǒng)的研究說明

    為了實現(xiàn)低成本的光學(xué)識別以及對識別數(shù)據(jù)的云傳輸和儲存,基于Raspberry Pi建立了通過光學(xué)字符識別
    發(fā)表于 10-28 11:57 ?3次下載
    使用低成本實現(xiàn)<b class='flag-5'>光學(xué)</b><b class='flag-5'>字符識別</b>讀表系統(tǒng)的研究說明

    了解光學(xué)字符識別技術(shù)識別票據(jù)原理

    ,翻譯內(nèi)容略作修改。 光學(xué)字符識別技術(shù)(OCR)目前被廣泛利用在手寫識別、打印識別及文本圖像識別等相關(guān)領(lǐng)域。小到文檔
    的頭像 發(fā)表于 11-27 10:28 ?2388次閱讀

    機器視覺運動控制一體機應(yīng)用例程|OCR字符識別應(yīng)用

    應(yīng)用背景 OCR字符識別的應(yīng)用場景非常廣泛,例如在生產(chǎn)型企業(yè)領(lǐng)域中,OCR具有多樣性的應(yīng)用,比如讀取儀表儀器的文本,進行實時監(jiān)控、讀取產(chǎn)品的生產(chǎn)日期、批號,以此來獲得產(chǎn)品的信息和可
    的頭像 發(fā)表于 02-24 17:27 ?1301次閱讀
    機器視覺運動控制一體機應(yīng)用例程|OCR<b class='flag-5'>字符識別</b>應(yīng)用

    Raspberry Pi安裝Android的方法

    Raspberry Pi 中使用的流行操作系統(tǒng)是 Raspbian,它是一個基于 linux 的 Raspberry Pi 官方操作系統(tǒng),我們使用它構(gòu)建了許多
    的頭像 發(fā)表于 09-05 15:10 ?1.8w次閱讀
    <b class='flag-5'>在</b><b class='flag-5'>Raspberry</b> <b class='flag-5'>Pi</b><b class='flag-5'>上</b>安裝Android的<b class='flag-5'>方法</b>

    Raspberry Pi和Arduino的手寫數(shù)字識別

    電子發(fā)燒友網(wǎng)站提供《Raspberry Pi和Arduino的手寫數(shù)字識別.zip》資料免費下載
    發(fā)表于 10-19 09:23 ?0次下載
    <b class='flag-5'>Raspberry</b> <b class='flag-5'>Pi</b>和Arduino<b class='flag-5'>上</b>的手寫數(shù)字<b class='flag-5'>識別</b>