JavaShuo
欄目
標籤
使用Google的Tesseract和OpenCV構建光學字符識別(OCR)系統
時間 2021-01-07
標籤
html
python
git
github
算法
api
安全
網絡
框架
ide
欄目
Google
简体版
原文
原文鏈接
總覽
html
光學字符識別(OCR)是計算機視覺領域中普遍使用的系統
瞭解如何爲各類任務構建本身的OCR
咱們將利用OpenCV庫和Tesseract來構建OCR系統
介紹
你還記得考試期間咱們必須填寫正確答案的日子嗎?或者你還記得在開始第一份工做以前進行的能力測驗呢?我能夠回憶起奧林匹克競賽和多項選擇測試,大學和組織會使用光學字符識別(OCR)系統對答卷進行大量評分。
老實說,OCR在普遍的行業和功能中都有應用,所以從掃描文檔(包括銀行對賬單,收據,手寫文檔,優惠券等)到閱讀自動駕駛汽車的路牌,都在OCR的範疇內。
OCR系統在幾十年前建造起來是很是昂貴和繁瑣的,但隨着計算機視覺和深度學習領域的進步意味着咱們如今能夠創建本身的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的第二部分文本識別很是重要,其中文本是從圖像中提取出來的。結合使用這些技術能夠從任何圖像中提取文本。
沒有什麼是完美的,OCR也不例外。可是,隨着深度學習的到來,對這一問題有可能獲得更好、更廣泛的解決方案。
在咱們深刻研究如何構建本身的OCR以前,讓咱們先看看OCR的一些流行應用程序。
現實世界中流行的OCR應用
OCR在各行各業有着普遍的應用(主要是爲了減小人工操做)。它已經融入到咱們的平常生活中,以致於咱們幾乎沒有注意到它!但它確定會努力帶來更好的用戶體驗。
OCR經常使用於在手寫識別任務中提取信息。該領域正在進行許多工做,也取得了一些很是重大的進步。Microsoft提出了一個很棒的數學應用程序,該應用程序以手寫的數學方程式做爲輸入,生成解決方案,並逐步解釋其工做原理。
OCR愈來愈多地被各個行業用於數字化,以減小人工工做量。這使得從業務文檔,收據,發票,護照等中提取和存儲信息很是容易且高效,此外,當你爲KYC(Know Your Customer,瞭解客戶)上傳文檔時,OCR用於從這些文檔中提取信息並存儲它們以供未來參考。
OCR還用於書籍掃描,它將原始圖像轉換爲數字文本格式。許多大型項目,例如Gutenberg項目,Million Book Project和Google Books,都使用OCR掃描和數字化書籍並將做品存儲爲檔案。
銀行業也愈來愈多地使用OCR來歸檔與客戶相關的文書工做,例如入職資料,以輕鬆建立客戶資料庫,這顯着減小了上線時間,從而改善了用戶體驗。此外,銀行使用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年被開源,從那時起,谷歌就採用了這個項目並贊助它的開發。
截至今天,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種有效的操做模式
頁面分割(–psm) : 能夠根據圖像中的文本進行調整以得到更好的結果
Pyteseract
可是,除了命令行方法以外,你還可使用Pytesseract(
https://github.com/madmaze/pytesseract
) :Tesseract的Python包裝器。使用此功能,你能夠經過編寫簡單的Python腳本使用Tesseract OCR輕鬆實現本身的文本識別器。
你可使用pip install pytesseract命令下載Pytesseract 。
Pytesseract的主要功能是image_to_text(),它將圖像和命令行選項做爲其參數:
Tesseract面臨的挑戰是什麼?
Tesseract並不完美,這不是什麼祕密。當圖像有不少噪聲或者語言的字體是Tesseract OCR沒有通過訓練的字體時,它的性能不好。其餘條件(如文本的亮度或傾斜度)也會影響Tesseract的性能。然而,它是文本識別的一個很好的起點,具備低努力和高產出的特色。
文本檢測的不一樣方法
Tesseract假定輸入文本圖像是乾淨的。不幸的是,許多輸入圖像將包含過多的對象,而不只僅是乾淨的預處理文本,所以,必須具備一個良好的文本檢測系統,該系統能夠檢測隨後能夠輕鬆提取的文本。
文本檢測有幾種方法:
使用OpenCV的傳統方式
使用當代深度學習模型
創建本身的自定義模型
使用OpenCV進行文本檢測
使用OpenCV進行文本檢測是經典的處理方式。你能夠應用各類操做(
https://www.analyticsvidhya.com/blog/2019/03/opencv-functions-computer-vision-python/
) ,如圖像調整大小,模糊,閾值化,形態學操做等,以清理圖像。
在這裏,咱們有按灰度,模糊度和閾值順序排列的圖像。
完成此操做後,可使用OpenCV輪廓檢測來檢測輪廓以提取數據塊:
最後,你能夠在預測文本的輪廓上應用文本識別:
上面圖像中的結果是經過最少的預處理和輪廓檢測以及隨後使用Pytesseract進行文本識別實現的,顯然,輪廓並非每次都檢測到文本。
可是,使用OpenCV進行文本檢測仍然是一項繁瑣的任務,須要使用大量參數。一樣,它在泛化方面的表現也很差,更好的方法是使用EAST文本檢測模型。
當代深度學習模型– EAST
EAST是一種高效、準確的場景文本檢測器,是一種從天然場景圖像中檢測文本的深度學習模型,它很是快速和準確,由於它可以以13.2fps的速度檢測720p圖像,f值爲0.7820。
該模型由一個徹底卷積網絡和一個非最大抑制階段組成,用於預測單詞或文本行。可是,該模型不包括其餘先前模型所涉及的能夠優化模型的中間步驟,例如候選建議,文本區域造成和單詞劃分。
你能夠看一下做者在論文中提供的如下圖像,將EAST模型與其餘先前模型進行了比較:
EAST具備U形網絡。網絡的第一部分包括在ImageNet數據集上訓練的卷積層。下一部分是特徵合併分支,該分支將當前特徵圖與上一階段的未合併特徵圖鏈接在一塊兒。
而後是卷積層,以減小計算並生成輸出特徵圖。最後,使用卷積層,輸出是顯示文本存在的得分圖和幾何圖,幾何圖能夠是旋轉的框或覆蓋文本的四邊形,這能夠從研究論文中包含的結構圖像中直觀地理解:
我強烈建議你親自閱讀本文(
https://arxiv.org/abs/1704.03155
) ,以更好地瞭解EAST模型。
OpenCV從版本3.4開始包含EAST文本檢測器模型,這使得實現本身的文本檢測器變得超級方便。生成的本地化文本框能夠經過Tesseract OCR傳遞以提取文本,這樣你將擁有一個完整的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/
相關文章
1.
使用Python,OpenCV或Tesseract的光學字符識別(OCR)
2.
Tesseract OCR(光學字符識別)教程
3.
[譯]OpenCV的基礎光學字符識別(Basic OCR in OpenCV)
4.
光學字符識別引擎 Tesseract-ocr 安裝過程
5.
文本識別 使用 Tesseract 進行 OpenCV OCR 和 文本識別
6.
Tesseract-OCR 字符識別---樣本訓練
7.
Tesseract-OCR 字符識別技術
8.
OCR光學字符識別(一)
9.
使用Tesseract和OpenCV-EAST進行OCR和文本識別
10.
Tesseract-ocr文字識別
更多相關文章...
•
系統定義的TypeHandler
-
MyBatis教程
•
網絡體系的構成和類型
-
TCP/IP教程
•
適用於PHP初學者的學習線路和建議
•
Docker容器實戰(七) - 容器眼光下的文件系統
相關標籤/搜索
Tesseract-OCR
tesseract+opencv
ocr+opencv
opencv+tesseract
opencv+ocr
字符知識
文字識別
字符
ocr
tesseract
Python
Git
Google
系統安全
HTML
系統網絡
MySQL教程
XLink 和 XPointer 教程
網站建設指南
文件系統
架構
應用
0
分享到微博
分享到微信
分享到QQ
每日一句
每一个你不满意的现在,都有一个你没有努力的曾经。
最新文章
1.
Android Studio3.4中出現某個項目全部亂碼的情況之解決方式
2.
Packet Capture
3.
Android 開發之 仿騰訊視頻全部頻道 RecyclerView 拖拽 + 固定首個
4.
rg.exe佔用cpu導致卡頓解決辦法
5.
X64內核之IA32e模式
6.
DIY(也即Build Your Own) vSAN時,選擇SSD需要注意的事項
7.
選擇深圳網絡推廣外包要注意哪些問題
8.
店鋪運營做好選款、測款的工作需要注意哪些東西?
9.
企業找SEO外包公司需要注意哪幾點
10.
Fluid Mask 摳圖 換背景教程
本站公眾號
歡迎關注本站公眾號,獲取更多信息
相關文章
1.
使用Python,OpenCV或Tesseract的光學字符識別(OCR)
2.
Tesseract OCR(光學字符識別)教程
3.
[譯]OpenCV的基礎光學字符識別(Basic OCR in OpenCV)
4.
光學字符識別引擎 Tesseract-ocr 安裝過程
5.
文本識別 使用 Tesseract 進行 OpenCV OCR 和 文本識別
6.
Tesseract-OCR 字符識別---樣本訓練
7.
Tesseract-OCR 字符識別技術
8.
OCR光學字符識別(一)
9.
使用Tesseract和OpenCV-EAST進行OCR和文本識別
10.
Tesseract-ocr文字識別
>>更多相關文章<<