天天看點

HaaS輕應用(Python):基于HaaS-AI的文字識别1、序言2、方案2.1、總體思路2.2、具備功能2.3、效果呈現3、OCR技術介紹3.1、概念介紹3.2、文本檢測之DB技術分析3.3、文本識别3.4、CRNN3.4.1、卷積層3.4.2、循環層3.4.3、轉錄層4、Demo體驗4.1、代碼下載下傳和編譯4.2、示例代碼4.3、裝置端配置4.3.1、賬号注冊4.3.2、OSS參數擷取4.3.3、Bucket檔案夾建立4.4.4、Bucket檔案夾權限開發者技術支援

1、序言

HaaS 即 Hardware as a Service,它是加速AIoT開發者創新的一個積木平台.

Python輕應用是跑在HaaS積木平台上的一套應用架構.他是基于MicroPython進行開發,繼承了python優美簡介的文法,同時提供了便捷的嵌入式硬體操作庫。HaaS100作為阿裡雲IoT推出的一款 Iot 開發闆,它适配了MicroPython的運作引擎,提供了各種豐富的硬體操作接口,同時提供阿裡雲物聯網平台和雲端AI相關的能力。通過這塊晶片,可以輕松通過python程式實作硬體控制,雲端AI以及雲端互通的能力。

今天就來講解下,怎麼基于Python輕應用架構,來實作文字識别(OCR)功能.

2、方案

2.1、總體思路

方案涉及主要涉及Minicv,Alibaba Cloud SDK 等功能子產品.

MiniCV 是一套輕量級視覺架構,支援資料擷取,圖像處理,圖像編解碼,視訊編解碼,機器學習,UI呈現。

Alibaba Cloud SDK是阿裡達摩院視覺智能開放平台的端上的引覆寫人臉、人體、視訊、文字等150+場景。

關于視覺視覺智能平台的詳細資訊可以參考官網:

https://vision.aliyun.com/

資料處理流程為:通過MiniCV子產品,完成資料源的封裝處理,圖檔的解碼,圖檔資料的格式轉換和縮放等功能,最後将處理好的資料喂給ML 子產品,ML 子產品通過Alibaba Cloud SDK引擎和達摩院的視覺開放智能平台進行互動,得到預期結果.

由于HaaS100的闆子預設沒有配置LCD,是以為了友善開發者使用,我通過列印LOG 的方式将結果輸出.

HaaS輕應用(Python):基于HaaS-AI的文字識别1、序言2、方案2.1、總體思路2.2、具備功能2.3、效果呈現3、OCR技術介紹3.1、概念介紹3.2、文本檢測之DB技術分析3.3、文本識别3.4、CRNN3.4.1、卷積層3.4.2、循環層3.4.3、轉錄層4、Demo體驗4.1、代碼下載下傳和編譯4.2、示例代碼4.3、裝置端配置4.3.1、賬号注冊4.3.2、OSS參數擷取4.3.3、Bucket檔案夾建立4.4.4、Bucket檔案夾權限開發者技術支援

2.2、具備功能

文字識别技術基于阿裡雲深度學習技術,為您提供通用的印刷文字識别和文檔結構化等能力。文字識别技術可以靈活應用于證件文字識别、發票文字識别、文檔識别與整理等行業場景,滿足認證、鑒權、票據流轉稽核等業務需求

2.3、效果呈現

測試資源圖檔:"/data/python-apps/ml/recognize-character/res/test.jpg"

HaaS輕應用(Python):基于HaaS-AI的文字識别1、序言2、方案2.1、總體思路2.2、具備功能2.3、效果呈現3、OCR技術介紹3.1、概念介紹3.2、文本檢測之DB技術分析3.3、文本識别3.4、CRNN3.4.1、卷積層3.4.2、循環層3.4.3、轉錄層4、Demo體驗4.1、代碼下載下傳和編譯4.2、示例代碼4.3、裝置端配置4.3.1、賬号注冊4.3.2、OSS參數擷取4.3.3、Bucket檔案夾建立4.4.4、Bucket檔案夾權限開發者技術支援

輸出結果:

# -------------------Welcome HaasAI MicroPython--------------------
 
-----ml ucloud RecognizeCharacter demo start-----
 
 
 
results size:1
 
index:0
 
probability:0.441612
 
text:飛豬旅行
 
left:199
 
angle:-5
 
top:166
 
height:373
 
width:781
 
 
 
bytearray(b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00')
 
-----ml ucloud RecognizeCharacter demo end-----           

3、OCR技術介紹

3.1、概念介紹

OCR是Optical Character Recognition的縮寫,意思是光學字元識别,簡稱文本識别。

  • 光學輸入: 掃描器,錄影機等
  • 算法處理,文字提取和識别
  • 文本輸出

簡單來說就是提取圖像中文本資訊。

一張圖檔上能涵蓋的文本資訊是非常多的,如果我們手工錄入這些文本,勢必會很慢。但是通過OCR,就能一次性擷取圖檔中所有的文本資訊,效率大幅提升。

正是由于OCR是一種非常快捷、省力的文字輸入方式,是以在文字量比較大的今天,很受人們歡迎。比如說銀行卡識别,身份證識别,電子名片。

3.2、文本檢測之DB技術分析

DB即Differentiable Binarization,從字面意思就可以知道,它的主要特點就是一個可變的二值化門檻值。它可以通過訓練,動态設定不同場景,不同像素點的二值化門檻值,進而更加精準的定位文本的位置。

HaaS輕應用(Python):基于HaaS-AI的文字識别1、序言2、方案2.1、總體思路2.2、具備功能2.3、效果呈現3、OCR技術介紹3.1、概念介紹3.2、文本檢測之DB技術分析3.3、文本識别3.4、CRNN3.4.1、卷積層3.4.2、循環層3.4.3、轉錄層4、Demo體驗4.1、代碼下載下傳和編譯4.2、示例代碼4.3、裝置端配置4.3.1、賬号注冊4.3.2、OSS參數擷取4.3.3、Bucket檔案夾建立4.4.4、Bucket檔案夾權限開發者技術支援

如上圖所示:

藍色箭頭部分代表了傳統的分割流程。

原始圖-->分割圖-->二值圖-->目标圖,在這個流程中,分割圖到二值圖的轉換是通過一個固定的門檻值來完成的,是以,當文字比較密集,并且不規則的時候,生成的二值圖的文字邊界就不太準确。

紅色部分是DB的流程。它的主要功能就是在進行圖檔分割的同時,會基于文本邊界生成一個動态的門檻值圖,也就是圖中的threshold map. 通過segmentation map 和 threshold map 共同決定如何生成二值圖。

segmentation map: 有文字的區域有值P

threshhold map: 文字邊界才有值T

binary map: B = 1或者B=0

HaaS輕應用(Python):基于HaaS-AI的文字識别1、序言2、方案2.1、總體思路2.2、具備功能2.3、效果呈現3、OCR技術介紹3.1、概念介紹3.2、文本檢測之DB技術分析3.3、文本識别3.4、CRNN3.4.1、卷積層3.4.2、循環層3.4.3、轉錄層4、Demo體驗4.1、代碼下載下傳和編譯4.2、示例代碼4.3、裝置端配置4.3.1、賬号注冊4.3.2、OSS參數擷取4.3.3、Bucket檔案夾建立4.4.4、Bucket檔案夾權限開發者技術支援

如果上圖所示

文字區域内部:

P = 0.99 , T= 0.2 , P –T > 0, B = 1

文字區域邊界:

P = 0 , T= 0.99 , P –T < 0, B = 0

非文字區域:

P = 0 , T= 0.2 , P –T < 0, B = 0

對于原始圖中的每個像素點,都計算依據P 和T 值的不同,計算得到最終的二值圖B,最後将二值圖還原到原始圖檔中,生成精确的文本區域。

3.3、文本識别

文本識别指的是将 文本檢測得到的文本框的的内容,轉化為具體文字的過程。通常情況下,文本識别可以分為兩大類:

定長文字識别

定長文字的識别比較簡單,使用場景也比較有限,常見的有驗證碼識别。這種文字識别的網絡結果也會比較簡單,可以參考LeNet ,建構一個CNN網絡,通常情況下三個卷積和一個全連接配接層就可以實作,本文中不做詳細介紹。

不定長文字識别

在日常生活,很多場景我們是不知道需要被識别的文字長度。是以我們需要一個更加複雜的網絡,通過深度學習,自主判定文字的長度,并加以分割可轉換。目前不定長文字的識别通常有兩種實作方式:

  • CNN + Seq2Seq + Attention
  • CRNN 這兩種方法主要差别在輸出層,他們都抛棄了softMax, 分辨采用拉Attention 和 CTC 來将序列特征資訊轉化為識别結果。Attention 由于機制原因,模型比較大,是以在Iot 端上我們采用的是CRNN 。

3.4、CRNN

CRNN(Convolutional Recurrent Neural Network,卷積循環神經網絡)是目前比較流行的文字識别模型,不需要對樣本資料進行字元分割,可識别任意長度的文本序列,模型速度快、性能好。

CRNN的主要特點是:

  • 可訓練
  • 序列化識别任意長度字元,無需分割
  • 速度快,性能好,模型小

CRNN模型主要由以下三部分組成:

  • 卷積層:從輸入圖像中提取出特征序列
  • 循環層:預測從卷積層擷取的特征序列的标簽分布;
  • 轉錄層:把從循環層擷取的标簽分布通過去重、整合等操作轉換成最終的識别結果。
HaaS輕應用(Python):基于HaaS-AI的文字識别1、序言2、方案2.1、總體思路2.2、具備功能2.3、效果呈現3、OCR技術介紹3.1、概念介紹3.2、文本檢測之DB技術分析3.3、文本識别3.4、CRNN3.4.1、卷積層3.4.2、循環層3.4.3、轉錄層4、Demo體驗4.1、代碼下載下傳和編譯4.2、示例代碼4.3、裝置端配置4.3.1、賬号注冊4.3.2、OSS參數擷取4.3.3、Bucket檔案夾建立4.4.4、Bucket檔案夾權限開發者技術支援

3.4.1、卷積層

  1. 預處理 對輸入圖像先做了縮放處理,把所有輸入圖像縮放到相同高度
  2. 卷積運算 7個卷積 加上 4 pooling , 引入 2 個bn(BatchNormalization) 加速模型收斂,縮短訓練過程
  3. 特征提取 從左到右,按列生成特征向量,作為循環層的輸入

3.4.2、循環層

循環層由一個雙向的 LSTM 組成。

LSTM(Long Short Term Memory,長短期記憶網絡)是一種特殊結構的RNN(循環神經網絡),用于解決RNN的長期依賴問題,也即随着輸入RNN網絡的資訊的時間間隔不斷增大,普通RNN就會出現“梯度消失”或“梯度爆炸”的現象

HaaS輕應用(Python):基于HaaS-AI的文字識别1、序言2、方案2.1、總體思路2.2、具備功能2.3、效果呈現3、OCR技術介紹3.1、概念介紹3.2、文本檢測之DB技術分析3.3、文本識别3.4、CRNN3.4.1、卷積層3.4.2、循環層3.4.3、轉錄層4、Demo體驗4.1、代碼下載下傳和編譯4.2、示例代碼4.3、裝置端配置4.3.1、賬号注冊4.3.2、OSS參數擷取4.3.3、Bucket檔案夾建立4.4.4、Bucket檔案夾權限開發者技術支援

從上圖可以看出,LSTM跟RNN最大的差別就是增加一個儲存長期狀态的單元,并且通過三個門開關,控制這個單元的狀态

  • 輸入門:決定目前時刻的網絡狀态,儲存多少到這個長期狀态
  • 遺忘門:決定上一個時刻的長期狀态,保留多少到目前時刻的長期狀态
  • 輸出門:目前的長期狀态,有多少作為目前網絡的結果輸出

3.4.3、轉錄層

轉錄層是将LSTM網絡預測的特征序列的結果通過CTC進行整合,轉換為最終輸出的結果。

CTC模型(Connectionist Temporal Classification,聯接時間分類),主要用于解決訓練時字元無法對齊問題。

HaaS輕應用(Python):基于HaaS-AI的文字識别1、序言2、方案2.1、總體思路2.2、具備功能2.3、效果呈現3、OCR技術介紹3.1、概念介紹3.2、文本檢測之DB技術分析3.3、文本識别3.4、CRNN3.4.1、卷積層3.4.2、循環層3.4.3、轉錄層4、Demo體驗4.1、代碼下載下傳和編譯4.2、示例代碼4.3、裝置端配置4.3.1、賬号注冊4.3.2、OSS參數擷取4.3.3、Bucket檔案夾建立4.4.4、Bucket檔案夾權限開發者技術支援

如上圖所示:輸入字元CTC ,由于字元間隔,圖像變形等原因,導緻經過CNN+RNN 處理後的結果變成--CC----TT--CC

其中-代表空白區域,它是在CTC在訓練階段加上去的,目的就是為了避免解碼的去重友善。

在解碼階段,先去掉連貫的重複字元,然後去掉插入的空白字元,最後得到識别結果CTC。

4、Demo體驗

4.1、代碼下載下傳和編譯

參考

《HaaS100快速開始》

下載下傳,編譯,燒錄,AliOS Things代碼.(解決方案選擇:py_engine_demo)

燒錄完成,啟動裝置,通過序列槽輸入:

(指令中的 ssid password 是開發者自己工作環境的wifi 使用者名和密碼)

python /data/python-apps/wifi/main.py ssid  password
 
python /data/python-apps/ml/recognize-character/main.py           

4.2、示例代碼

from minicv import ML
 
print("-------------------Welcome HaasAI MicroPython--------------------")
print("-----ml ucloud RecognizeCharacter demo start-----")
OSS_ACCESS_KEY = "xxxx"
OSS_ACCESS_SECRET = "xxxx"
OSS_ENDPOINT = "xxxx"
OSS_BUCKET = "xxxx"
ml = ML()
ml.open(ml.ML_ENGINE_CLOUD)
ml.config(OSS_ACCESS_KEY, OSS_ACCESS_SECRET, OSS_ENDPOINT, OSS_BUCKET, "NULL")
ml.setInputData("/data/python-apps/ml/recognize-character/res/test.jpg")
ml.loadNet("RecognizeCharacter")
ml.predict()
responses_value = bytearray(10)
ml.getPredictResponses(responses_value)
print(responses_value)
ml.unLoadNet()
ml.close()
print("-----ml ucloud RecognizeCharacter demo end-----")           

4.3、裝置端配置

4.3.1、賬号注冊

注冊連結:

https://www.aliyun.com/

點選紅色框圈中的“立即注冊”按鈕進行注冊.

HaaS輕應用(Python):基于HaaS-AI的文字識别1、序言2、方案2.1、總體思路2.2、具備功能2.3、效果呈現3、OCR技術介紹3.1、概念介紹3.2、文本檢測之DB技術分析3.3、文本識别3.4、CRNN3.4.1、卷積層3.4.2、循環層3.4.3、轉錄層4、Demo體驗4.1、代碼下載下傳和編譯4.2、示例代碼4.3、裝置端配置4.3.1、賬号注冊4.3.2、OSS參數擷取4.3.3、Bucket檔案夾建立4.4.4、Bucket檔案夾權限開發者技術支援

4.3.2、OSS參數擷取

使用OSS功能的時候涉及到四個配置參數:AccessKeyId,AccessKeySecret,Endpoint,BucketName.

AccessKey 擷取:

登入

https://ram.console.aliyun.com/賬号管理平台檢視AccessKeyId

,AccessKeySecret(賬号為上一節中注冊的賬号)

點選賬号頭像框中的"AccessKey管理"按鈕.

HaaS輕應用(Python):基于HaaS-AI的文字識别1、序言2、方案2.1、總體思路2.2、具備功能2.3、效果呈現3、OCR技術介紹3.1、概念介紹3.2、文本檢測之DB技術分析3.3、文本識别3.4、CRNN3.4.1、卷積層3.4.2、循環層3.4.3、轉錄層4、Demo體驗4.1、代碼下載下傳和編譯4.2、示例代碼4.3、裝置端配置4.3.1、賬号注冊4.3.2、OSS參數擷取4.3.3、Bucket檔案夾建立4.4.4、Bucket檔案夾權限開發者技術支援

點選按鈕"檢視Select",擷取AccessKeyId,AccessKeySecret

HaaS輕應用(Python):基于HaaS-AI的文字識别1、序言2、方案2.1、總體思路2.2、具備功能2.3、效果呈現3、OCR技術介紹3.1、概念介紹3.2、文本檢測之DB技術分析3.3、文本識别3.4、CRNN3.4.1、卷積層3.4.2、循環層3.4.3、轉錄層4、Demo體驗4.1、代碼下載下傳和編譯4.2、示例代碼4.3、裝置端配置4.3.1、賬号注冊4.3.2、OSS參數擷取4.3.3、Bucket檔案夾建立4.4.4、Bucket檔案夾權限開發者技術支援

Bucket賬号擷取:

登陸OSS控制台

https://oss.console.aliyun.com/建立Bucket

,建立時地域一定要選擇上海

HaaS輕應用(Python):基于HaaS-AI的文字識别1、序言2、方案2.1、總體思路2.2、具備功能2.3、效果呈現3、OCR技術介紹3.1、概念介紹3.2、文本檢測之DB技術分析3.3、文本識别3.4、CRNN3.4.1、卷積層3.4.2、循環層3.4.3、轉錄層4、Demo體驗4.1、代碼下載下傳和編譯4.2、示例代碼4.3、裝置端配置4.3.1、賬号注冊4.3.2、OSS參數擷取4.3.3、Bucket檔案夾建立4.4.4、Bucket檔案夾權限開發者技術支援
HaaS輕應用(Python):基于HaaS-AI的文字識别1、序言2、方案2.1、總體思路2.2、具備功能2.3、效果呈現3、OCR技術介紹3.1、概念介紹3.2、文本檢測之DB技術分析3.3、文本識别3.4、CRNN3.4.1、卷積層3.4.2、循環層3.4.3、轉錄層4、Demo體驗4.1、代碼下載下傳和編譯4.2、示例代碼4.3、裝置端配置4.3.1、賬号注冊4.3.2、OSS參數擷取4.3.3、Bucket檔案夾建立4.4.4、Bucket檔案夾權限開發者技術支援
HaaS輕應用(Python):基于HaaS-AI的文字識别1、序言2、方案2.1、總體思路2.2、具備功能2.3、效果呈現3、OCR技術介紹3.1、概念介紹3.2、文本檢測之DB技術分析3.3、文本識别3.4、CRNN3.4.1、卷積層3.4.2、循環層3.4.3、轉錄層4、Demo體驗4.1、代碼下載下傳和編譯4.2、示例代碼4.3、裝置端配置4.3.1、賬号注冊4.3.2、OSS參數擷取4.3.3、Bucket檔案夾建立4.4.4、Bucket檔案夾權限開發者技術支援

在Bucket建立好後,從上圖我們可以看到:

Endpoint:oss-cn-shanghai.aliyuncs.com

BucketName就是我們建立Bucket取的名字oss-ai-dev。

4.3.3、Bucket檔案夾建立

HaaS輕應用(Python):基于HaaS-AI的文字識别1、序言2、方案2.1、總體思路2.2、具備功能2.3、效果呈現3、OCR技術介紹3.1、概念介紹3.2、文本檢測之DB技術分析3.3、文本識别3.4、CRNN3.4.1、卷積層3.4.2、循環層3.4.3、轉錄層4、Demo體驗4.1、代碼下載下傳和編譯4.2、示例代碼4.3、裝置端配置4.3.1、賬号注冊4.3.2、OSS參數擷取4.3.3、Bucket檔案夾建立4.4.4、Bucket檔案夾權限開發者技術支援

4.4.4、Bucket檔案夾權限

建立好檔案夾後,記住一定要修改檔案夾權限,否則通路失敗.

HaaS輕應用(Python):基于HaaS-AI的文字識别1、序言2、方案2.1、總體思路2.2、具備功能2.3、效果呈現3、OCR技術介紹3.1、概念介紹3.2、文本檢測之DB技術分析3.3、文本識别3.4、CRNN3.4.1、卷積層3.4.2、循環層3.4.3、轉錄層4、Demo體驗4.1、代碼下載下傳和編譯4.2、示例代碼4.3、裝置端配置4.3.1、賬号注冊4.3.2、OSS參數擷取4.3.3、Bucket檔案夾建立4.4.4、Bucket檔案夾權限開發者技術支援

開發者技術支援

Python輕應用繼承了Python易學易用的特點,同時提供了基于嵌入式硬體的基礎庫封裝,讓開發者可以很友善的通過互動式的環境,實時進行嵌入式開發,讓嵌入式開發也變得簡單友善。

如需更多技術支援,可加入釘釘開發者群,擷取一對一的技術支援!

HaaS輕應用(Python):基于HaaS-AI的文字識别1、序言2、方案2.1、總體思路2.2、具備功能2.3、效果呈現3、OCR技術介紹3.1、概念介紹3.2、文本檢測之DB技術分析3.3、文本識别3.4、CRNN3.4.1、卷積層3.4.2、循環層3.4.3、轉錄層4、Demo體驗4.1、代碼下載下傳和編譯4.2、示例代碼4.3、裝置端配置4.3.1、賬号注冊4.3.2、OSS參數擷取4.3.3、Bucket檔案夾建立4.4.4、Bucket檔案夾權限開發者技術支援

更多技術與解決方案介紹,請通路HaaS官方網站

https://haas.iot.aliyun.com/

繼續閱讀