使用Google的Tesseract和OpenCV構建光學字符識別(OCR)系統

總覽

  • 光學字符識別(OCR)是計算機視覺領域中廣泛使用的系統
  • 瞭解如何爲各種任務構建自己的OCR
  • 我們將利用OpenCV庫和Tesseract來構建OCR系統
    介紹
    你還記得考試期間我們必須填寫正確答案的日子嗎?或者你還記得在開始第一份工作之前進行的能力測驗呢?我可以回憶起奧林匹克競賽和多項選擇測試,大學和組織會使用光學字符識別(OCR)系統對答卷進行大量評分。
    老實說,OCR在廣泛的行業和功能中都有應用,因此從掃描文檔(包括銀行對帳單,收據,手寫文檔,優惠券等)到閱讀自動駕駛汽車的路牌,都在OCR的範疇內。
    OCR系統在幾十年前建造起來是非常昂貴和繁瑣的,但隨着計算機視覺和深度學習領域的進步意味着我們現在可以建立自己的OCR系統了!
    使用Google的Tesseract和OpenCV構建光學字符識別(OCR)系統
    但是,建立OCR系統並不是一件容易的事,對於初學者來說,面臨着諸如圖像中的字體不同,對比度差,圖像中有多個對象等問題。
    因此,在本文中,我們將探討OCR任務的一些非常著名且有效的方法,以及如何自己實施。
    如果你不熟悉目標檢測和計算機視覺,建議你先閱讀以下資源:







  • 基本目標檢測算法的介紹
    https://www.analyticsvidhya.com/blog/2018/10/a-step-by-step-introduction-to-the-basic-object-detection-algorithms-part-1
  • 計算機視覺課程
    https://courses.analyticsvidhya.com/courses/computer-vision-using-deep-learning-version2
    目錄

  • 什麼是光學字符識別(OCR)
  • 現實世界中流行的OCR應用
  • 使用Tesseract OCR進行文本識別
  • 文本檢測的不同方法
    什麼是光學字符識別(OCR)
    首先,讓我們瞭解一下什麼是OCR。
    OCR,或稱光學字符識別是一種識別圖像內文本並將其轉換爲電子形式的過程。這些圖像可以是手寫文字,文件,收據,名片等印刷文字,甚至是自然場景照片。
    OCR有兩個部分,第一部分是文本檢測,確定圖像中的文本部分,文本在圖像中的定位對於OCR的第二部分文本識別非常重要,其中文本是從圖像中提取出來的。結合使用這些技術可以從任何圖像中提取文本。
    使用Google的Tesseract和OpenCV構建光學字符識別(OCR)系統
    沒有什麼是完美的,OCR也不例外。但是,隨着深度學習的到來,對這一問題有可能得到更好、更普遍的解決方案。
    在我們深入研究如何構建自己的OCR之前,讓我們先看看OCR的一些流行應用程序。
    現實世界中流行的OCR應用
    OCR在各行各業有着廣泛的應用(主要是爲了減少人工操作)。它已經融入到我們的日常生活中,以至於我們幾乎沒有注意到它!但它肯定會努力帶來更好的用戶體驗。
    使用Google的Tesseract和OpenCV構建光學字符識別(OCR)系統
    OCR常用於在手寫識別任務中提取信息。該領域正在進行許多工作,也取得了一些非常重大的進步。Microsoft提出了一個很棒的數學應用程序,該應用程序以手寫的數學方程式作爲輸入,生成解決方案,並逐步解釋其工作原理。
    OCR越來越多地被各個行業用於數字化,以減少人工工作量。這使得從業務文檔,收據,發票,護照等中提取和存儲信息非常容易且高效,此外,當你爲KYC(Know Your Customer,瞭解客戶)上傳文檔時,OCR用於從這些文檔中提取信息並存儲它們以供將來參考。
    OCR還用於書籍掃描,它將原始圖像轉換爲數字文本格式。許多大型項目,例如Gutenberg項目,Million Book Project和Google Books,都使用OCR掃描和數字化書籍並將作品存儲爲檔案。
    銀行業也越來越多地使用OCR來歸檔與客戶相關的文書工作,例如入職資料,以輕鬆創建客戶資料庫,這顯着減少了上線時間,從而改善了用戶體驗。此外,銀行使用OCR從支票中提取諸如帳號,金額,支票號碼之類的信息,以加快處理速度。
    使用Google的Tesseract和OpenCV構建光學字符識別(OCR)系統
    說到OCR的應用,就必須提及它們在自動駕駛汽車中的使用。自動駕駛汽車在很大程度上依賴OCR來閱讀路標和交通標誌,對這些標誌的有效理解可以使自動駕駛汽車對行人和其他在道路上行駛的車輛保持安全。
    還有很多OCR應用,例如車牌識別,將掃描的文檔轉換爲可編輯的Word文檔等等。
    使用OCR進行數字化顯然具有廣泛的優勢,例如易於存儲和處理文本,更不用說可以應用到此數據的大量分析了!OCR絕對是計算機視覺最重要的領域之一。
    現在,讓我們看看最著名的和廣泛使用的文本識別技術之一——Tesseract。
    使用Tesseract OCR進行文本識別



















  • Tesseract:https://tesseract-ocr.github.io/tessdoc/Documentation.html
    Tesseract是一個開源的OCR引擎,最初是由HP(Hewlett-Packard)作爲專有軟件開發的,但後來在2005年被開源,從那時起,谷歌就採用了這個項目並贊助它的開發。
    使用Google的Tesseract和OpenCV構建光學字符識別(OCR)系統
    截至今天,Tesseract可以檢測100多種語言,甚至可以處理從右到左的文本,例如阿拉伯語或希伯來語!難怪Google會將其用於移動設備,視頻和Gmail的圖像垃圾郵件檢測算法中的文本檢測。
    從版本4開始,Google對該OCR引擎進行了重大改進。Tesseract 4.0添加了新的OCR引擎,該引擎使用基於LSTM(長期短期記憶,https://www.analyticsvidhya.com/blog/2017/12/fundamentals-of-deep-learning-introduction-to-lstm/) 的神經網絡系統,這是解決序列預測問題的最有效解決方案之一。儘管它以前使用模式匹配的OCR引擎仍可作爲舊代碼使用。
    將Tesseract下載(https://tesseract-ocr.github.io/tessdoc/Home.html) 到系統後,可以使用以下命令從命令行輕鬆運行它(https://tesseract-ocr.github.io/tessdoc/Command-Line-Usage.html):
    tesseract <test_image> <output_file_name> -l <language(s)> --oem <mode> --psm <mode>
    你可以更改Tesseract配置以獲得最適合你的圖像的結果:






  • 語言(-l) : 使用Tesseract可以檢測一種或多種語言
  • OCR引擎模式(-oem): 如你所知,Tesseract 4具有LSTM和Legacy OCR引擎。根據它們的組合,有4種有效的操作模式
    使用Google的Tesseract和OpenCV構建光學字符識別(OCR)系統
    頁面分割(–psm) : 可以根據圖像中的文本進行調整以獲得更好的結果
    使用Google的Tesseract和OpenCV構建光學字符識別(OCR)系統
    Pyteseract
    但是,除了命令行方法之外,你還可以使用Pytesseract(https://github.com/madmaze/pytesseract) :Tesseract的Python包裝器。使用此功能,你可以通過編寫簡單的Python腳本使用Tesseract OCR輕鬆實現自己的文本識別器。
    你可以使用pip install pytesseract命令下載Pytesseract 。
    Pytesseract的主要功能是image_to_text(),它將圖像和命令行選項作爲其參數:
    使用Google的Tesseract和OpenCV構建光學字符識別(OCR)系統
    Tesseract面臨的挑戰是什麼?
    Tesseract並不完美,這不是什麼祕密。當圖像有很多噪聲或者語言的字體是Tesseract OCR沒有經過訓練的字體時,它的性能很差。其他條件(如文本的亮度或傾斜度)也會影響Tesseract的性能。然而,它是文本識別的一個很好的起點,具有低努力和高產出的特點。
    文本檢測的不同方法
    Tesseract假定輸入文本圖像是乾淨的。不幸的是,許多輸入圖像將包含過多的對象,而不僅僅是乾淨的預處理文本,因此,必須具有一個良好的文本檢測系統,該系統可以檢測隨後可以輕鬆提取的文本。
    文本檢測有幾種方法:












  • 使用OpenCV的傳統方式
  • 使用當代深度學習模型
  • 建立自己的自定義模型
    使用OpenCV進行文本檢測
    使用OpenCV進行文本檢測是經典的處理方式。你可以應用各種操作(https://www.analyticsvidhya.com/blog/2019/03/opencv-functions-computer-vision-python/) ,如圖像調整大小,模糊,閾值化,形態學操作等,以清理圖像。
    使用Google的Tesseract和OpenCV構建光學字符識別(OCR)系統
    在這裏,我們有按灰度,模糊度和閾值順序排列的圖像。
    完成此操作後,可以使用OpenCV輪廓檢測來檢測輪廓以提取數據塊:
    最後,你可以在預測文本的輪廓上應用文本識別:
    使用Google的Tesseract和OpenCV構建光學字符識別(OCR)系統
    上面圖像中的結果是通過最少的預處理和輪廓檢測以及隨後使用Pytesseract進行文本識別實現的,顯然,輪廓並不是每次都檢測到文本。
    但是,使用OpenCV進行文本檢測仍然是一項繁瑣的任務,需要使用大量參數。同樣,它在泛化方面的表現也不好,更好的方法是使用EAST文本檢測模型。
    當代深度學習模型– EAST
    EAST是一種高效、準確的場景文本檢測器,是一種從自然場景圖像中檢測文本的深度學習模型,它非常快速和準確,因爲它能夠以13.2fps的速度檢測720p圖像,f值爲0.7820。
    該模型由一個完全卷積網絡和一個非最大抑制階段組成,用於預測單詞或文本行。但是,該模型不包括其他先前模型所涉及的可以優化模型的中間步驟,例如候選建議,文本區域形成和單詞劃分。
    你可以看一下作者在論文中提供的以下圖像,將EAST模型與其他先前模型進行了比較:
    使用Google的Tesseract和OpenCV構建光學字符識別(OCR)系統
    EAST具有U形網絡。網絡的第一部分包括在ImageNet數據集上訓練的卷積層。下一部分是特徵合併分支,該分支將當前特徵圖與上一階段的未合併特徵圖連接在一起。
    然後是卷積層,以減少計算並生成輸出特徵圖。最後,使用卷積層,輸出是顯示文本存在的得分圖和幾何圖,幾何圖可以是旋轉的框或覆蓋文本的四邊形,這可以從研究論文中包含的結構圖像中直觀地理解:
    使用Google的Tesseract和OpenCV構建光學字符識別(OCR)系統
    我強烈建議你親自閱讀本文(https://arxiv.org/abs/1704.03155) ,以更好地瞭解EAST模型。
    OpenCV從版本3.4開始包含EAST文本檢測器模型,這使得實現自己的文本檢測器變得超級方便。生成的本地化文本框可以通過Tesseract OCR傳遞以提取文本,這樣你將擁有一個完整的OCR端到端模型。
    使用Google的Tesseract和OpenCV構建光學字符識別(OCR)系統
    使用TensorFlow對象的API進行文本檢測的自定義模型




















  • TensorFlow Object API:https://github.com/tensorflow/models/tree/master/research/object_detection
    構建文本檢測器的最後一種方法是用使用了TensorFlow Object API的自定義文本檢測器模型。它是一個開放源代碼框架,用於爲目標檢測任務構建深度學習模型。要詳細瞭解它,我建議先閱讀下面這篇詳細的文章。
  • https://www.analyticsvidhya.com/blog/2020/04/build-your-own-object-detection-model-using-tensorflow-api/
    要構建你的自定義文本檢測器,你顯然需要一個包含很多圖像的數據集,至少要多於100個;然後你需要對這些圖像進行註釋,以便模型可以知道目標對象在哪裏並瞭解有關它的一切;最後,你可以從TensorFlow’s detection model zoo(https://github.com/tensorflow/models/blob/master/research/object_detection/g3doc/detection_model_zoo.md) 中根據性能和速度之間的權衡選擇一種預訓練的模型。你可以參考這個綜合性的博客來構建你的自定義模型。
  • 博客:https://tensorflow-object-detection-api-tutorial.readthedocs.io/en/latest/training.html#configuring-a-training-pipeline
    現在。訓練可能需要一些計算,但是如果你真的沒有足夠的計算能力,請不要擔心!你可以使用Google合作實驗室滿足所有要求!這篇文章(https://www.analyticsvidhya.com/blog/2020/03/google-colab-machine-learning-deep-learning) 將教你如何有效地使用它。
    最後,如果你想往前走了一步,並建立一個最先進的YOLO文本探測器模型,該文章(https://www.analyticsvidhya.com/blog/2018/12/practical-guide-object-detection-yolo-framewor-python/) 將是一個瞭解它的所有細節的敲門磚,是一個很好的入門教程!
    尾註
    在這篇文章中,我們討論了OCR中存在的問題以及可以用來解決這項任務的各種方法。我們還討論了這些方法的各種缺點,以及爲什麼OCR不像看起來那麼容易!
    原文鏈接:https://www.analyticsvidhya.com/blog/2020/05/build-your-own-ocr-google-tesseract-opencv/




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