Python,OpenCV中的光学字符识别(OCR Optical Character Recognition)
Python,OpenCV中的光學字符識別(OCR Optical Character Recognition
- 1. 什么是OCR?
- 2. 光學字符識別簡史
- 3. 光學字符識別的應用
- 4. OSD 方向和腳本檢測
- 5. 前處理和后處理的重要性
- 6. OCR工具和API
- 參考
這篇博客將介紹什么是光學字符識別OCR,介紹OCR發展的簡短歷史,了解OCR真實的應用場景,了解OCR與方向和腳本檢測(OSD)之間的區別。并了解圖像預處理和后處理對于提高OCR結果的重要性。
- OSD是任何OCR系統的基本組件。
- 圖像預處理和OCR結果后處理步驟,通常用于提高OCR精度。
1. 什么是OCR?
光學字符識別(Optical Character Recognition)簡稱OCR,是用于描述將文本圖像轉換為機器編碼文本的算法和技術。主要包括以下3步:
OCR表面上看起來很簡單,盡管計算機視覺領域已經存在了50多年,但研究人員尚未創建高度準確的通用OCR系統,依然道阻且長。
另外鑒于人類通過書寫進行交流的方式有很多細微差別——有自然語言處理(NLP Natural Language Processing)的所有問題,并且計算機視覺系統在從圖像讀取文本時永遠無法獲得100%的準確度。噪聲、書寫風格、圖像質量等方面的變量太多。OCR實現并不容易。
2. 光學字符識別簡史
-
1914年,早期的OCR技術完全是機械式的,伊曼紐爾·戈德伯格開發了可以讀取字符并將其轉換為標準電報代碼的機器;
-
1920~1930年,伊曼紐爾·戈德伯格開發了搜索縮微膠片(縮小的文檔,通常是電影、報紙、期刊等)中的字符OCR。
-
1974年,OCR主要致力于創建“盲人閱讀機器”。
-
1980年,惠普(HP)實驗室開始研究Tesseract,2005年開源后很快成為世界上最流行的OCR引擎。
-
2010年,Tesseart繼續發展,稱為長短時記憶(LSTM long short-term memory)網絡的專門體系結構極大地提高了OCR的準確性。
LSTM引擎提供了顯著的精度增益,使得即使在較差的非最佳條件下也能準確地識別OCR文本。
LSTM引擎接受了超過123種語言的培訓,使得除英語以外的語言(包括基于腳本的語言,如漢語、阿拉伯語等)進行OCR文本更加容易。 -
2020年,OCR被谷歌、微軟和亞馬遜等科技巨頭日益商業化。
3. 光學字符識別的應用
OCR有許多應用,最初的應用是為盲人創建閱讀機器。自那時以來,OCR應用有了顯著的發展,包括但不限于:
- 自動車牌識別(ALPR/ANPR Automatic license/number plate recognition)
- 交通標志識別(Traffic sign recognition)
- 分析并擊敗網站上的CAPTCHA(區分計算機和人類的完全自動化公共圖靈測試Analyzing and defeating CAPTCHAs (Completely Automated Public Turing tests to tell Computers and Humans Apart) on websites)
- 從名片中提取信息(Extracting information from business cards)
- 自動讀取護照的機器可讀區(MRZ machine-readable zone)和其他相關部分(Automatically reading the machine-readable zone and other relevant parts of a passport)
- 解析銀行支票中的路由號碼、帳號和貨幣金額(Parsing the routing number, account number, and currency amount from a bank check)
- 理解自然場景中的文本,如從智能手機拍攝的照片(Understanding text in natural scenes such as the photos captured from smartphone )
4. OSD 方向和腳本檢測
OSD:Orientation and Script Detection方向和腳本檢測
- OCR是獲取輸入圖像并以人類可讀和機器可讀格式返回文本的過程;
- OSD是分析圖像中文本元數據,特別是方向和腳本/書寫風格的過程。
可以說OSD信息是提高OCR準確性的前置步驟。
文本的方向是輸入圖像中文本的角度(以度為單位)。為了獲得更高的OCR精度,需要應用OSD來確定文本方向,糾正它然后應用OCR。
腳本和書寫風格是指用于書面和打字交流的一組字符和符號。OCR系統對特定腳本或書寫系統所能做出的任何規則、啟發或假設都將使OCR引擎在應用于給定腳本時更加準確。
5. 前處理和后處理的重要性
創建一個成功的OCR應用程序部分是科學,部分是藝術。
盡管 Tesseract OCR引擎的進步,OCR系統可以進行自動分割和頁面分析。然而這些系統還是遠不如人類智能,人類幾乎可以即時解析復雜背景中的文本。
-
如果在OCR前應用一些基本的圖像處理操作,如閾值、距離變換和形態學操作,最終將得到清晰的圖像。OCR將獲得更好的效果;
-
如果先對文本進行適當的清理和分割,OCR系統將更容易識別文本。
-
后處理OCR文本。OCR系統永遠不會100%準確,所以應該假設會有一些錯誤。為了幫助解決這個問題,可以應用一些規則和啟發法。
6. OCR工具和API
接下來將介紹4部分內容:
Tesseract OCR引擎是一個OCR軟件包,最初開發于20世紀80年代,經歷了多次修訂和更新,現在是世界上最流行的OCR系統。
幾乎每種流行編程語言(Java、C/C++、PHP等)都有Tesseract綁定。
PyTesseract庫是一個Python包,它是與tesseract命令行進行交互的二進制文件。只需使用一個或兩個函數調用,就可以輕松地將Tesseract OCR應用于OCR項目。
為提升OCR的準確性,基于計算機視覺和圖像處理,使用OpenCV或者Keras, TensorFlow, scikit-learn 對圖像進行預處理或者后處理。
- scikit學習庫是使用Python訓練機器學習模型時使用的標準包。
- Keras和TensorFlow在一個易于使用的API中提供了所有深入學習的能力。
當Tesseract從未訓練過圖像中的某種字體;或者經過預先訓練的“現成”模型均不能夠正確定位圖像中的文本;或者開發自定義OCR可能需要花費太多的精力,可以考慮使用基于云的OCR API,例如微軟Azure認知服務、Amazon RekGoNeNoint和谷歌云平臺(Google Cloud Platform GCP)API。
缺點是付費使用;需要網絡連接才可以提交圖像并獲取識別結果;有延遲不能用于實時應用;并不擁有整個OCR管道,只能用提供的一部分。
參考
- https://www.pyimagesearch.com/2021/08/09/what-is-optical-character-recognition-ocr/
總結
以上是生活随笔為你收集整理的Python,OpenCV中的光学字符识别(OCR Optical Character Recognition)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 船舶自动识别系统
- 下一篇: Python:异常值检测箱型图(附:正态