如何構建識別圖像中字符的自動程序?一文解讀OCR與HTR

2020-12-13 機器之心Pro

選自Medium

作者:Ajinkya Khalwadekar

機器之心編譯

參與:Panda、蛋醬

在機器學習和計算機視覺領域,光學字符識別(OCR)和手寫文本識別(HTR)長期以來都是人們研究的重要主題。本文將幫助計算機視覺愛好者大致了解如何對文檔圖像中的文本進行識別。

光學字符識別和手寫文本識別是人工智慧領域裡非常經典的問題。OCR 很簡單,就是將文檔照片或場景照片轉換為機器編碼的文本;而 HTR 就是對手寫文本進行同樣的操作。作者在文章中將這個問題分解成了一組更小型的問題,並製作了如下的流程圖。

圖 1.1:應用流程圖

按文檔邊框裁剪圖像

在圖像處理中,通常需要對圖像進行預先編輯,以便獲得更好的表徵。裁剪是圖像編輯中最常用的操作之一,這可以移除圖像中不需要的部分,也可以向圖像添加所需的特徵。

你可以使用 OpenCV 來輕鬆地找到圖像中文檔的邊緣,查找圖像中文檔邊緣的最佳方法是使用閾值圖像。OpenCV 提供了不同的閾值樣式,這是由其函數的第 4 個參數決定的。在這個函數中,第一個參數是源圖像,這應該是一張灰度圖像;第二個參數是用於分類像素值的閾值;第三個參數是 maxVal,這是當像素值超過(有時是低於)閾值時所要給出的值。

下面的代碼將能幫助你找到閾值圖像,然後確定文檔邊緣的輪廓,你可以將這些輪廓點與圖像邊緣進行比較,然後確定文檔的邊緣。

# threshold imageret, thresh = cv2.threshold(imgray, 150, 255, 0)cv2.imwrite('thresh.jpg', thresh)# edge contourscontours, hierarchy = cv2.findContours(thresh, 1, 2)

檢測和裁剪/分割文檔中的所有詞

在有約束的受控環境中進行詞檢測通常可以使用啟發式方法實現,比如利用梯度信息或者這樣的事實:文本通常會被分組成段落以及排列成直線的字符。但是,使用啟發式方法是存在缺陷的,圖像中很多不需要的區域也會被檢測為詞,所以我們可以使用 OpenCV 的 EAST(Efficient and Accurate Scene Text)檢測器。

可以參考 Adrian Rosebrock 寫的 EAST 檢測器相關文章:https://www.pyimagesearch.com/2018/08/20/opencv-text-detection-east-text-detector/

然後再根據 Tom Hoag 分享的方法對其進行改進:https://medium.com/@tomhoag/opencv-text-detection-548950e3494c

這種方法能以很高的準確度檢測出手寫文本以及機器列印的文本。檢測出圖像中的詞之後,再將它們裁剪出來並將它們全部保存下來。

預處理詞圖像

應該怎麼樣對圖像進行預處理?這完全取決於你接下來要做什麼。如果想要分類手寫的和機器列印的詞,需要所有圖像都處於灰度模式。為了將圖像轉換為灰度圖像,還需要使用 OpenCV:

imgray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

這是手寫詞嗎?

這是一個分類問題:確定一張特定圖像中的詞是「手寫詞」還是「機打詞」。作者瀏覽了多篇文章和研究論文,發現支持向量機(SVM)是解決這一問題的最佳方案,然後使用了來自 sklearn 軟體包的 SVM 分類器來完成這一任務。

對於用於分類的數據集,作者提到了一個很好的手寫詞圖像有標註數據集 IAM:http://www.fki.inf.unibe.ch/databases/iam-handwriting-database

對於機器列印的詞圖像,作者收集了大約 2000 張詞圖像。下面是用於預測的特徵:

1. 平均像素強度

2. 像素強度的標準差

3. Otsu 閾值

4. 像素強度直方圖中局部最大值的數量

5. 屬於像素強度上面的四分之一的像素的百分比

6. 屬於像素強度下面的四分之一的像素的百分比

按照上面來看,所有特徵都與圖像的像素強度有關聯。下一個問題是:如何找到像素強度?

灰度圖像的像素值就是像素的強度,同樣也可以使用 OpenCV 和數學運算來完成這一任務。

使用 TensorFlow 的 HTR

這是本文所有問題中最具有挑戰性的問題。在嘗試了不同的解決方案之後(包括在手寫字符數據集上重新訓練 Tesseract),結果顯示 Harald Scheidl 這篇文章的方法最佳:https://towardsdatascience.com/build-a-handwritten-text-recognition-system-using-tensorflow-2326a3487cd5

作者使用了類似的方法,不過做了一些小修改,在這裡使用了神經網絡,由 5 個卷積神經網絡(CNN)層、2 個循環神經網絡(RNN)層和 1 個連接主義時間分類(CTC)層構成。用於訓練這個神經網絡的數據集是 IAM 數據集,但你也可以使用任何有標註的詞圖像數據集。

圖 1.2:來自 Herald Scheidl 文章的示意圖

CNN 層的輸入是大小為 128×32 的灰度值圖像。CNN 層的輸出是一個序列,其包含 32 項,其中每一項都有 256 個特徵。這些特徵再進一步由 RNN 層處理,但是,某些特徵已經表現出了與輸入圖像的特定高層面性質的高度相關性。

圖 1.3:來自 Herald Scheidl 的文章的示意圖

圖 1.3 展示了處理一張包含文本「little」的圖像時,可視化的 RNN 輸出矩陣。最上面的圖表中的矩陣包含了字符的分數,這些字符中的最後一項(第 80 個)是一個 CTC 空白標籤。其它矩陣項,從上到下分別對應於如下字符:!」#&』()*+,-./0123456789:;?ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz

可以看到,大多數時間裡,被預測的字符都剛好出現在它們在圖像中的位置處(比如,你可以比較看看圖像與圖表中 i 的位置。只有最後一個字符 e 沒有對齊。但這其實沒有問題,因為 CTC 操作是無分割的,而且不在乎絕對位置。最下面的圖表展示了字符 l、i、t、e 和 CTC 空白標籤的分數,該文本可以輕鬆地被解碼:我們只需要從每個時間步驟取出最可能的字符即可,這會構成所謂的最佳路徑,然後我們丟棄重複的字符,最後丟棄所有空白,得到:「l—-ii—t-t—l-…-e」→「l—-i—t-t—l-…-e」→「little」。

更多有關如何實現這一方法的細節信息,請參看 Herald Scheidl 的文章。

Tesseract(OCR)

Tesseract 是目前最好的用於機器列印字符識別的開源 OCR 工具。Tesseract 支持 Unicode(UTF-8)字符集,可以識別超過 100 種語言,還包含多種輸出支持,比如純文本、PDF、TSV 等。但是為了得到更好的 OCR 結果,還必須提升提供給 Tesseract 的圖像的質量。

注意,在執行實際的 OCR 之前,Tesseract 會在內部執行多種不同的圖像處理操作(使用 Leptonica 庫)。通常它表現不錯,但在某些情況下的效果卻不夠好,導致準確度顯著下降。

在將圖像傳遞給 Tesseract 之前,可以嘗試以下圖像處理技術,但具體使用哪些技術取決於你想要讀取的圖像:

1. 反轉圖像

2. 重新縮放

3. 二值化

4. 移除噪聲

5. 旋轉/調整傾斜角度

6. 移除邊緣

所有這些操作都可以使用 OpenCV 或通過 Python 使用 numpy 實現。

簡單總結一下,本文介紹了與 OCR 和 HTR 相關的一些問題和可能的解決方案。如果你想要真正理解,一定要親自動手實現它們看看。

原文連結:https://medium.com/@ajinkya.khalwadekar/building-ocr-and-handwriting-recognition-for-document-images-f7630ee95d46

相關焦點

  • OCR(字符識別)軟體
    ● 2.3 天若批量文字識別(WIN)軟體支持jpg,jpeg,png,bmp以及pdf幾種格式,識別文字之後自動轉換成word文件,支持簡單的排版同樣的必須聯網才能OCR識別測試了很多小程序,只有這一款能把左邊這段文字完美一字不差(符號也不差)的識別出來。
  • OCR光學字符識別方法匯總(含原理與開源項目)
    光學字符識別(OCR)相信大家都不陌生,就是指電子設備(例如掃描儀或數位相機)檢查紙上列印的字符,通過檢測暗、亮的模式確定其形狀,然後用字符識別方法將形狀翻譯成計算機文字的過程。工業場景的圖像文字識別更加複雜,出現在很多不同的場合。
  • Halcon OCR識別
    圖像預處理對原始圖像進行灰度化,二值化,模板匹配,降噪,增強等!2.目標區域分割(ROI)對預處理後的圖像進行ROI提取,分割出單個字符組成的區域3.字符識別,即模式識別技術4.結果處理將識別完的文字按特定的次序和規則組合輸出!
  • Tesseract-OCR本文結構與旋轉分析,識別字符白名單配置
    之前一篇介紹了Tesseract-OCR安裝與測試,已經對中文字符的識別支持。大家反饋比較多,所以決定在寫一篇,主要是介紹用它做項目時候需要注意的問題與一些比較重要的函數使用。主要介紹一下Tesseract-OCR中如何實現結構化的文檔分析以及相關區域的定位識別。
  • 推薦幾款OCR識別App(提取圖像中的文字,適用安卓與ios)
    Ocr識別技術,說直白一點,就是把以圖像形式存在的文字變成可編輯的文字.>控制模式必須因時制宜,一藥不能治百疾現在讓我們來看看人的行為如何被控制或影響。市面有很多軟體都有這樣的功能, 這邊就推薦幾款手機上的ocr識別應用.
  • 輕鬆識別文字,這款Python OCR庫支持超過80種語言
    有一款軟體叫掃描全能王,想必一些小夥伴聽過,這是一個OCR集成軟體,可以將圖像內容掃描成文字。所以說,OCR作用是對文本資料的圖像文件進行分析識別處理,獲取文字及版面信息。先將圖像中的特徵的提取並檢測目標區域,之後對目標區域的的字符進行分割和分類。
  • 輕鬆識別文字,這款 Python OCR 庫支持超過 80 種語言
    有一款軟體叫掃描全能王,想必一些小夥伴聽過,這是一個OCR集成軟體,可以將圖像內容掃描成文字。所以說,OCR作用是對文本資料的圖像文件進行分析識別處理,獲取文字及版面信息。OCR本質是圖像識別,其包含兩大關鍵技術:文本檢測和文字識別。先將圖像中的特徵的提取並檢測目標區域,之後對目標區域的的字符進行分割和分類。
  • OCR多彩世界
    軟體介紹:清華識別軟體能夠適應超過一百種Windows字體,識別全部簡體國標一二級6763個字符,繁體13000多字符;識別彩色圖象,並轉換成帶有彩色圖片的RTF格式(WORD可編輯)。使用特點:需要連接網際網路註冊使用,精確的版面自動分析、傾斜的文檔自動校正;支持多種圖像文件格式(BMP、JPG、TIF、多頁TIF、PDF等);可自主設定識別區域,設定豎版、單欄、圖像、表格、公式局部定義;可去除印章,圖像修正(擦除、連線、圖像平衡);持批處理識別; 5. 捷速OCR——
  • OCR文字識別——手寫漢字識別(一)
    一、引言  OCR識別目前來說已經很成熟了,像百度、騰訊、訊飛等大佬都有自己的OCR識別技術,比如騰訊,可以登入騰訊AI開放平臺:https://ai.qq.com/product/ocr.shtml#handwrite上傳一張圖片,它可以識別出圖片中的文字及其位置,其準確率還是不錯的。
  • 《紙質檔案數字複製件光學字符識別(OCR)工作規範》
    3.3 光學字符識別 optical character recognition;OCR通過信息技術對圖像文件中的字符形狀進行識別、文字轉換和文本輸出、呈現的過程。亮度和對比度值的設定以調整後的圖像中文文字的筆畫連貫清晰為準。7.2.2 圖像降噪7.2.2.1對圖像中印刷體字符進行識別處理前,需要根據噪聲的特徵對待識別圖像進行降噪處理,提升識別處理的精確度。
  • 通過Python寫一個OCR圖片識別小程序
    在我們的日常辦公中,經常有識別圖片中的大段文字的需求。
  • Android 圖像識別之OCR識別身份證,銀行卡等證件信息
    )是指電子設備(例如掃描儀或數位相機)檢查紙上列印的字符,通過檢測暗、亮的模式確定其形狀,然後用字符識別方法將形狀翻譯成計算機文字的過程;效果圖1、我們需要進入百度雲文字識別的開發平臺,進行一系列的註冊,登陸。
  • 你們要的快準狠的漢王PDF OCR光學識別神器-它來了
    漢王pdf ocr8.1簡體中文版是來自北京漢王科技開發的一款優秀的專業orc文字識別軟體,擁有所見即所得的版面還原功能
  • 截屏、文字提取一氣呵成,超實用OCR開源小工具
    今天我們就為大家介紹一款 GitHub 用戶 ianzhao05 剛發布的小工具——textshot,只需要截屏就能實時生成文字。讀者也可以通過此項目大致了解如何對圖像中的文本進行識別。Tessract 的使用Tesseract 是目前最好的用於機器列印字符識別的開源 OCR 工具。20 世紀 80 年代由 Hewlett Packard 開發,2005 年開源,自 2006 年起由谷歌贊助開發。該工具在受控條件下也能很好地運行,但是如果存在大量噪聲或者圖像輸入 Tesseract 前未經恰當處理,則性能較差。
  • 文字識別(OCR)
    一 ,文字識別簡介計算機文字識別,俗稱光學字符識別,英文全稱是Optical Character Recognition(簡稱OCR),它是利用光學技術和計算機技術把印在或寫在紙上的文字讀取出來,並轉換成一種計算機能夠接受、人又可以理解的格式。OCR技術是實現文字高速錄入的一項關鍵技術。在OCR技術中,印刷體文字識別是開展最早,技術上最為成熟的一個。
  • 從手機到電腦,究竟哪款OCR圖片文字識別軟體最好用?
    OCR (Optical Character Recognition,光學字符識別)是指電子設備檢查紙上列印的字符,通過檢測暗、亮的模式確定其形狀,然後用字符識別方法將形狀翻譯成計算機文字的過程。說白了就是識別圖片上的文字,然後提取出來,變成可編輯的文檔
  • 超輕量級中文OCR,支持豎排文字識別、ncnn推理,總模型僅17M
    整理 | AI科技大本營光學字符識別(OCR)技術已經得到了廣泛應用。比如發票上用來識別關鍵字樣,搜題App用來識別書本上的試題。近期,這個叫做chineseocr_lite的OCR項目開源了,這是一個超輕量級中文ocr,支持豎排文字識別,支持 ncnn 推理,psenet (8.5M) + crnn (6.3M) + anglenet (1.5M) 總模型僅17M。目前,這個開源項目已在GitHub上標星2400+。
  • iText for Mac(OCR識別圖中文字工具)v1.7.6
    itext mac中文特別版是一款從圖片中識別文字的OCR(光學字符識別)工具。通過截圖、拖拽圖片,即可以從掃描版的PDF等任意圖片中識字,並且可以很好的解決摘抄和批註需求。而且itext mac版使用騰訊、Google 雙引擎,識別效果驚人地準確。此軟體測試環境為10.14.4系統!
  • 手把手教你用PaddleOCR與PyQT實現多語言文字識別的程序
    他了解到這屬於OCR文字識別技術,OCR實現了對圖片中的文字進行提取、識別。還可以自動截屏並進行識別支持識別結果的可視化, 可以手動修正識別結果, 並導出文件(.docx, .txt)及對應圖片小張越研究越感興趣,想更加深入地分析實現的原理,他根據軟體裡面的信息很快找到了作者。
  • 圖像驗證碼和大規模圖像識別技術
    通常這些事情如果用電腦程式來做,可以做到數量很大,或者速度很快,或者兼而有之,從而破壞正常用戶的使用秩序。例如註冊大量免費電子郵箱來發廣告郵件,在微博等社會化媒體中註冊大量虛假用戶作為某人的「殭屍粉」,以及自動搶票軟體,等等。早期的驗證碼大多用扭曲的文字來實現,用以避開OCR(自動光學字符識別技術)的自動識別,例如Yahoo早期的驗證碼版本EZ-Gimpy。