【新視野】【關于 OCR 光學字符識別】 那些你不知道的事
作者簡介
作者:楊夕
推薦系統 百面百搭地址:
(相關資料圖)
https://github.com/km1994/RES-Interview-Notes
NLP 百面百搭地址:
https://github.com/km1994/NLP-Interview-Notes
個人筆記:
https://github.com/km1994/nlp_paper_study
關注公眾號 【關于NLP那些你不知道的事】 加入 【NLP && 推薦學習群】一起學習?。?!
NLP && 推薦學習群【人數滿了,加微信 blqkm601】
一、什么是 OCR?光學字符識別(Optical Character Recognition, OCR)是指對文本資料的圖像文件進行分析識別處理,獲取文字及版面信息的過程。亦即將圖像中的文字進行識別,并以文本的形式返回。
OCR的分類:
印刷體識別
介紹:印刷體大多都是規則的字體,這些字體都是計算機生成再通過打印技術印刷到紙上;
存在問題:在印刷過程中字體很有可能變得斷裂或者墨水粘連,使得OCR識別異常困難
手寫體識別
介紹:人手寫文字;
存在問題:因為人類手寫的字往往帶有個人特色,每個人寫字的風格基本不一樣,雖然人類可以讀懂你寫的文字,但是機器缺很難
二、OCR 應用場景?OCR的應用場景 可以分為兩種:
識別特定場景的專用OCR
應用:證件識別、車牌識別
車輛識別代碼
機票識別
識別多種場景的通用OCR
應用:場景不固定;
難度:由于通用圖片的場景不固定,文字布局多樣,因此難度更高;
三、OCR 技術路線是怎么樣?OCR 技術路線 可以 分為以下 技術路線:
3.1 圖像預處理動機:常見圖片存在 文字布局多樣,扭曲,模糊,光線不均和等問題,如果不做處理,直接使用,容易丟失大量有效信息,從而導致 識別效果低下;
常用的圖像預處理:幾何變換(透視、扭曲、旋轉等)、畸變校正、去除模糊、圖像增強和光線校正等;
采用的 圖像預處理方法:
傳統 OCR 圖像預處理方法:
介紹:基于數字圖像處理和傳統機器學習等方法對圖像進行處理和特征提??;
常用方法:HoG
優點:有利于增強簡單場景的文本信息;
缺點:對于圖像模糊、扭曲等問題魯棒性很差,對于復雜場景泛化能力不佳;
基于 深度學習 OCR 圖像預處理方法:
介紹:使用基于深度學習的神經網絡作為特征提取手段;
常用方法:基于CNN的神經網絡
優點:CNN強大的學習能力,配合大量的數據可以增強特征提取的魯棒性,面臨模糊、扭曲、畸變、復雜背景和光線不清等圖像問題均可以表現良好的魯棒性;
缺點:需要大量標注數據;
3.2 文字檢測動機:常見的圖片 不僅 包含 有用的文字,還存在 大量的背景信息,這些背景信息 對于 模型容易存在誤導作用;
介紹:文字檢測即檢測文本的所在位置和范圍及其布局,即 識別哪里有文字,文字的范圍有多大 等問題;
采用的 圖像預處理方法:Faster R-CNN、FCN、RRPN、TextBoxes、DMPNet、CTPN、SegLink 等;
3.3 文本識別動機:雖然 知道 圖片中文字的具體位置,但是 如何知道這些文字是什么呢?
介紹:在文本檢測的基礎上,對文本內容進行識別,將圖像中的文本信息轉化為文本信息;
采用的 圖像預處理方法:CNN+Softmax、CNN+RNN+CTC、CNN+RNN+Attention 等;
四、OCR 識別庫 有哪些?4.1 pytesseract介紹:pytesseract是基于Python的OCR工具, 底層使用的是Google的Tesseract-OCR 引擎,支持識別圖片中的文字,支持jpeg, png, gif, bmp, tiff等圖片格式。本文介紹如何使用pytesseract 實現圖片文字識別。
環境配置
Python 3.6+
PIL庫
安裝Google Tesseract OCR
系統:windows/mac/linux,我的系統是Windows10
安裝
安裝Google Tesseract
Tesseract 下載地址
Tesseract OCR github地址:https://github.com/tesseract-ocr/tesseract Windows Tesseract下載地址:https://digi.bib.uni-mannheim.de/tesseract/ Mac和Linux安裝方法參考:https://tesseract-ocr.github.io/tessdoc/Installation.html
Tesseract 安裝(記得下載 中文語言包)
Tesseract 配置
安裝完成后,添加到環境變量PATH中
測試 是否安裝成功
$ tesseractUsage: tesseract --help | --help-extra | --version tesseract --list-langs tesseract imagename outputbase [options...] [configfile...]OCR options: -l LANG[+LANG] Specify language(s) used for OCR.NOTE: These options must occur before any configfile.Single options: --help Show this help message. --help-extra Show extra help for advanced users. --version Show version information. --list-langs List available languages for tesseract engine.
安裝 pytesseract
Tesseract 下載地址
Python tesseract:https://github.com/madmaze/pytesseract
pip安裝pytesseract
$pip install Pillow $pip install pytesseract
pytesseract 使用
先準備一張包含英文字符的圖片,下面的代碼實現提取圖片中的中文和英文字符,并識別為字符串:
import pytesseracttry: from PIL import Imageexcept ImportError: import Image# 列出支持的語言print(pytesseract.get_languages(config=""))print(pytesseract.image_to_string(Image.open("test.png"), lang="chi_sim+eng"))>>>生 63 211 80 227 0存 81 209 118 227 0是 122 211 139 226 0文 126 200 154 231 0明 142 210 157 226 0的 162 209 197 227 0第 200 217 218 219 0一 221 209 236 226 0需 217 200 253 231 0要 239 209 259 226 0。 260 211 266 216 0猜 325 64 364 82 0疑 364 64 481 82 0鏈 373 54 393 86 0和 383 54 403 86 0技 403 54 435 86 0術 419 54 451 86 0爆 441 54 477 86 0炸 469 54 485 86 0##############################levelpage_numblock_numpar_numline_numword_numlefttopwidthheightconftext11000000566279-1211000635220318-1311100635220318-1411110635220318-15111116352551896生存51111212253171596是51111312648313196文明51111416252351896的5111152006018291第51111622153151793一51111721748423193需要511118260636591。21200032519715618-131210032519715618-141211032519715618-15121113251971561894猜疑512112373193203277鏈512113383193203292和512114403193483296技術512115441193443294爆炸4.2 PaddleOCR4.2.1 PaddleOCR 介紹
PaddleOCR是百度開源的一款基于深度學習的ocr識別庫,對中文的識別精度相當不錯,可以應付絕大多數的文字提取需求。
4.2.2 PaddleOCR 預訓練權重 介紹關于預訓練權重,PaddleOCR 官網根據提供權重文件大小分為兩類:
一類為輕量級,(檢測+分類+識別)三類權重加起來大小一共才 9.4 M,適用于手機端和服務器部署;
另一類(檢測+分類+識別)三類權重內存加起來一共 143.4 MB ,適用于服務器部署;無論模型是否輕量級,識別效果都能與商業效果相比,在本期教程中將選用輕量級權重用于測試;
4.2.3 PaddleOCR 環境介紹PaddlePaddle 2.0.0 Python 3.7 glibc 2.23 cuDNN 7.6+(GPU)4.2.4 PaddleOCR 使用
新建環境
$ conda create -n paddle38 python=3.8
安裝paddlepaddle-gpu
$ pip install paddlepaddle-gpu
PaddleOCR 使用
import osimport csvimport timefrom paddleocr import PaddleOCR, draw_ocr # Paddleocr目前支持中英文、英文、法語、德語、韓語、日語,可以通過修改lang參數進行切換# 參數依次為`ch`, `en`, `french`, `german`, `korean`, `japan`。ocr = PaddleOCR(use_angle_cls=True, use_gpu=True, lang="ch") # need to run only once to download and load model into memory# 選擇你要識別的圖片路徑def test_ocr(img_path): result = ocr.ocr(img_path, cls=True) OCR_result = [] for line in result: OCR_result.append(line[1][0]) res = " ".join(OCR_result) print(res) return res if __name__ == "__main__": """ 讀取filepath下的所有jpg文件,圖片識別之后存入save_file中,加上識別每張圖片的時間 """ save_file = "result_1223.csv" filePath = "pics/" paths = os.listdir(filePath) with open(save_file, "w", encoding="utf-8",newline="") as save_f: writer = csv.writer(save_f) # 先寫入columns_name writer.writerow(["url", "paddle_ocr", "ocr_time"]) for i in paths: a = time.time() img_path = f"{filePath}{i}" baidu_res = test_ocr(img_path) b1 = time.time() - a line = [i, baidu_res, b1] # 寫入多行用writerows writer.writerow(line)
PaddleOCR 識別結果
4.2.5 PaddleOCR 安裝過程中問題列表問題一:Microsoft Visual C++ 14.0 is required. Get it with "Microsoft Visual C++ Build Tools":http://landinghub.visualstudio.com/visual-cpp-build-tools
問題介紹
error: Microsoft Visual C++ 14.0 is required. Get it with "Microsoft Visual C++ Build Tools": http://landinghub.visualstudio.com/visual-cpp-build-tools
【解決】:python_Levenshtein?0.12.0?cp36?cp36m?win_amd64.whl
下載地址:https://www.lfd.uci.edu/~gohlke/pythonlibs/
pip install C:\Users\IMMOTOR\Desktop\python_Levenshtein-0.12.0-cp36-cp36m-win_amd64.whl
問題二:Could not find a version that satisfies the requirement fasttext
0.9.1 (from paddleocr) (from versions: )No matching distribution found for fasttext0.9.1 (from paddleocr)
Could not find a version that satisfies the requirement fasttext==0.9.1 (from paddleocr) (from versions: )No matching distribution found for fasttext==0.9.1 (from paddleocr)
【解決】:安裝之,pip install fasttext==0.9.1
問題三:升級jinja2:
pip install Jinja2 --upgrade
問題四:No module named "paddle"
ModuleNotFoundError: No module named "paddle"
【解決】:python -m pip install paddlepaddle -ihttps://mirror.baidu.com/pypi/simple
問題五:xlrd.biffh.XLRDError: Excel xlsx file
pip uninstall xlrd pip install xlrd==1.2.0
問題五:paddleOCR識別速度過慢
python paddleocr 增加識別速度的方法
切記長度不要超過960px
【解決】:
模型壓縮 enable_mkldnn=True,use_tensorrt=True,use_angle_cls=False
ocr = PaddleOCR(enable_mkldnn=True,use_tensorrt=True,use_angle_cls=False,use_gpu= False) text=ocr.ocr(img_name) #打開圖片文件參考
OCR技術簡介
【OCR技術系列一】光學字符識別技術介紹
適合小白的幾個入門級Python ocr識別庫
Python OCR工具pytesseract詳解
PaddleOCR
PaddleOCR詳解
十分鐘掌握PaddleOCR使用
所有文章
五谷雜糧
超1900星標!自然語言處理論文學習筆記
超500星標!自然語言處理 面經
超500星標!推薦系統 面經
推廣搜 軍火庫【持續更新】
NLP百面百搭
【算法基礎篇】
【關于 過擬合和欠擬合】那些你不知道的事
【關于 BatchNorm vs LayerNorm】那些你不知道的事
【關于 激活函數】那些你不知道的事
【關于 正則化】那些你不知道的事
【關于 優化算法】那些你不知道的事
【關于 歸一化】那些你不知道的事
【關于 判別式(discriminative)模型 vs. 生成式(generative)模型】 那些你不知道的事
【機器學習篇】
【關于 邏輯回歸】那些你不知道的事
【關于 支持向量機】 那些你不知道的事
【關于 集成學習】那些你不知道的事
【深度學習篇】
【關于 CNN】那些你不知道的事(上)
【關于 CNN】那些你不知道的事(下)
【關于 Attention 】那些你不知道的事
【關于Transformer】 那些的你不知道的事(上)
【關于Transformer】 那些的你不知道的事(中)
【關于Transformer】 那些的你不知道的事 (下)
【預訓練模型篇】
【關于 TF-idf】 那些你不知道的事
【關于 Word2vec】 那些你不知道的事
【關于 fastText】 那些你不知道的事
【關于Bert】 那些的你不知道的事(上)
【關于Bert】 那些的你不知道的事(下)
【關于 Bert 源碼解析I 之 主體篇 】 那些的你不知道的事
【關于 Bert 源碼解析II 之 預訓練篇 】 那些的你不知道的事
【關于 Bert 源碼解析III 之 微調 篇 】 那些的你不知道的事
【關于 Bert 源碼解析IV 之 句向量生成篇 】 那些的你不知道的事
【Bert 越大越精篇】
XLNet->RoBERTa->ELECTRA->ERNIE 1.0->... 】那些的你不知道的事(一)" linktype="text" imgurl="" imgdata="null" data-itemshowtype="0" tab="innerlink" data-linktype="2" wah-hotarea="click" hasload="1">【關于 Bert 越大越精序列】那些的你不知道的事(一)
【關于 Bert 越大越精序列】那些的你不知道的事(二)
【關于 Bert 越大越精序列】那些的你不知道的事(三)
【Bert 短小精悍篇】
【關于 Bert 壓縮】 那些你不知道的事
【關于 BERT to TextCNN】那些你不知道的事
【關于 FastBERT 實現】那些你不知道的事
【關于自訓練 + 預訓練 = 更好的自然語言理解模型 】 那些的你不知道的事
【文本分類篇】
【關于 文本分類】那些你不知道的事
【關于 文本分類 trick】那些你不知道的事
【關鍵詞提取】
【關于 關鍵詞提取】 那些你不知道的事
【關于 KeyBERT 】 那些你不知道的事
【命名實體識別】
【關于 HMM】 那些你不知道的事
【關于 MEMM】 那些你不知道的事
【關于 CRF】 那些你不知道的事
【關于 DNN-CRF】 那些你不知道的事
【關于 中文領域 NER】 那些你不知道的事
【關于 NER trick】 那些你不知道的事
【問答系統】
【關于 FAQ 檢索式問答系統】 那些你不知道的事
【關于 KBQA】 那些你不知道的事
【關于 對話系統】那些你不知道的事
【多標簽文本分類篇】
Multi-Class is Multi-Label ???
【trick 篇】
NLP常見trick匯總及代碼實現
【關于BERT如何處理篇章級長文本】那些你不知道的事
當Bert遇到未登錄詞?也許你應該這樣做!
【其他】
NLP論文學習篇【文本摘要】自然語言處理任務系列——文本摘要【指代消歧】自然語言處理任務系列——指代消解(共指消解【文本糾錯】自然語言處理任務系列——文本糾錯【其他】推薦系統 百面百搭
【關于 推薦系統 導論篇】 那些你不知道的事
【關于 推薦系統百面百搭 導論篇】 那些你不知道的事
推薦系統機器學習篇
【關于 協同過濾篇】 那些你不知道的事
【關于 矩陣分解篇】 那些你不知道的事
torch 學習篇
Bert4torch 快速入門實戰
Rasa 對話系統《【社區說】一起來聊聊 Rasa 3.0》 不完全筆記
(一)對話機器人概述
(二)RASA開源引擎介紹
(三)RASA NLU語言模型
(四)RASA NLU分詞器
(五)RASA NLU特征生成器
(六)RASA NLU意圖分類器
(七)RASA NLU實體提取器
(九)RASA自定義pipeline組件
(十)RASA CORE Policy
(十一)RASA CORE Action
(十二)RASA Domain
(十三)RASA 訓練數據
(十四)RASA story
(十五)Rasa Rules
(十六)RASA最佳實踐
(十七)基于RASA開始中文機器人
(十八)基于RASA開始中文機器人實現機制
(十九)基于知識圖譜的問答系統(KBQA)
(二十)基于閱讀理解的問答系統
(二十一)RASA應用常見問題
(二十二)RASA的超參數優化
(二十三)機器人測試與評估
(二十四)利用Rasa Forms創建上下文對話助手
DIET:Dual Intent and Entity Transformer——RASA論文翻譯
知識圖譜入門
浙大圖譜講義 | 第一講-知識圖譜概論 — 第1節-語言與知識
浙大圖譜講義 | 第一講-知識圖譜概論 — 第2節-知識圖譜的起源
圖譜講義 | 第一講-第3節-知識圖譜的價值
圖譜講義 | 第一講-第4節-知識圖譜的技術內涵
圖譜講義 | 第二講-第1節-什么是知識表示
轉載記錄
Bert與TensorRT部署手冊,享受絲滑的順暢
句向量新方案CoSENT實踐記錄
CHIP2021|臨床術語標準化第三名方案開源
CHIP2021 | 醫學對話臨床發現陰陽性判別任務第一名方案開源
破解transformer八股,快問快答
BERT可視化工具bertviz體驗
PRGC:一種新的聯合關系抽取模型
給神經網絡加入先驗知識!
CBLUE中文醫學語言理解測評Baseline
相關閱讀
-
【新視野】【關于 OCR 光學字符識別】...
作者簡介作者:楊夕推薦系統百面百搭地址:https: github com ... -
熱點聚焦:SaaS創業的起點不是“賽道”...
我們經常會遇到一個情景,就是無論聊SaaS的什么話題,大家都很難聊... -
天天新動態:這真是我們最近做的最有意...
很多人會把工作當作任務,然后把自己私下做的練習才當作進步!其實... -
了解一下企業融資?
我的文章大概率跟我看到的一些現象有關,如果你以后想要創業或者身... -
當前通訊!為什么這個直播間火了?
最近抖音上有一個直播間很火,如果你刷到過一個大嘴妹的魔性喊麥的... -
環球新消息丨能不能好好說話?
以前做產品的時候,我也遇到過一些不好溝通的合作方,和他們說話很...