1前言
查看華爲開發者聯盟網站的機器學習服務業務介紹(https://developer.huawei.com/consumer/cn/doc/development/HMS-Guides/ml-introduction-4)android
能夠看到華爲HMS把機器學習服務歸入了文本類,語言類,圖片類,人臉人體類四大服務,後面新特性同時不斷增長中,其中某些類是文本類服務,文本類服務裏面又含了文本識別,文檔識別,身份證識別,銀行卡識別,通用卡證識別,這些子服務之間都有一些差別和關聯呢,可能不少小夥伴會傻傻分不清,今天小編重點剖析下文本類服務,來看下這幾個子服務間的差別和關聯。正則表達式
2應用場景差別
首先看下文本類服務包含的子服務內容和對應的場景差別算法
服務 | 場景差別 | 說明 |
---|---|---|
文字識別 | 稀疏的文本,收據,名片 | 支持的識別範圍和場景「廣」,啥都能識別,只要是拉丁字符,日韓,中英的文字均可以識別。 |
文檔識別 | 包含文檔的密集文本圖片,尺寸文章,合同等 | 須要識別出帶一級格式的文本信息,此處須要更多雲端的運算能力,有更普遍的語言種類支持能力。 |
身份證識別 | 中國大陸二代身份證識別 | 支持的識別範圍和場景很「專」,只識別大陸身份證,準確率高。 |
銀行卡識別 | 全球常見的銀行卡(銀聯,運通,萬事達,Visa,JCB)卡號等關鍵信息識別 | 支持的識別範圍和場景很「專」,只識別銀行卡,準確率高。 |
通用卡證識別 | 任意固定板式的卡證,包括會員卡,通行證,工卡等 | 支持和識別範圍和場景介於文本識別和身份證,銀行卡識別之間,只要是卡證均可以進行識別。 |
文本類服務SDK有設備端API和雲側API接口兩種,設備端的API只在設備端進行處理和分析,使用的是設備自身CPU,GPU等器件的算力,雲端的API則須要把數據送到雲端,利用雲端的服務器資源進行處理和分析,以上服務除文檔識別經過計算量吞吐量須要在雲端進行處理外,其餘服務共用設備端API,本次爲了簡化分析的範圍,咱們只講設備端API服務部分。服務器
2.1場景對比總結
經過以上對比表格咱們能夠看到,不一樣能力對應的應用場景是有所不一樣的:框架
-
2.1.1文本識別:更像是一個全科考生,上知天文下知地理,只要是文本,均可以識別。機器學習
文本識別使用場景 async
文本識別服務自己不提供界面,界面由開發者實現ide
2.1.2身份證識別,銀行卡識別:更像是一個偏科生,其餘不會,只會成爲科,但這一科學的極好。函數
針對身份證,銀行卡提供了更改的定製框,直接對齊框就能夠快速進行身份證,銀行卡號的提取和識別。學習
銀行卡識別校準界面
二代身份證識別校準界面
-
2.1.3通用卡證:則介於以上兩類中間,在某些領域有必定的造詣,橫向廣度和垂直深度都位於中間位置。
能夠對全部的卡證進行文本類識別,同時提供了卡證類的對齊框,提示用戶對準待識別的卡證。
通用卡證識別校準界面
2.2該怎麼選
很簡單,身份證,銀行卡識別確定選身份證識別服務,銀行卡識別服務啦,其餘卡證類的識別就用通用卡證識別,剩下的場景就用文本識別服務。
3服務集成差別
編譯依賴差別
爲了便於你們理解,先解釋下以下幾個概念:
-
基礎SDK
-
相關服務對開發者呈現的接口,全部的API經過基礎SDK對外開放
-
插件
-
就是前面場景對比總結中講到的校準框,提供界面針對圖像幀的輸入質量作校訂,不知足要求的能夠提示用戶從新放置放。
-
模型包
-
這個是華爲HMS ML Kit的各個服務的核心所在,它包含經過機器學習平臺輸入大量樣本進行學習並生成的推理模型文件,以及執行這些推理模型所依賴的輕量化推理框架,承載了全部的圖像檢測與分析,我面我會在技術差別雙向展開分析。
下面小編經過一張表來總結下不一樣服務對應的編譯依賴:
-
服務 編譯依賴 示例代碼(版本號以官方最新發布爲準) 文字識別 基礎SDK +通用模型包(任選拉丁,日韓,中英)
// 引入基礎SDK
implementation 'com.huawei.hms:ml-computer-vision-ocr:1.0.3.300'
// 引入拉丁語文字識別模型包
implementation 'com.huawei.hms:ml-computer-vision-ocr-latin-model:1.0.3.315'
// 引入日韓語文字識別模型包
implementation 'com.huawei.hms:ml-computer-vision-ocr-jk-model:1.0.3.300' // 引入中英文文字識別模型包
implementation 'com.huawei.hms:ml-computer-vision-ocr-cn-model:1.0.3.300'
身份證識別 基礎SDK +插件(身份證)+專有模型包(身份證) // 引入基礎SDK
implementation 'com.huawei.hms:ml-computer-vision-icr:1.0.3.300'
// 引入身份證識別plugin包
implementation 'com.huawei.hms:ml-computer-card-icr-cn-plugin:1.0.3.315' // 引入身份證識別模型包
implementation 'com.huawei.hms:ml-computer-card-icr-cn-model:1.0.3.315'銀行卡識別 基礎SDK +插件(銀行卡)+專有模型包(銀行卡) // 引入基礎SDK
implementation 'com.huawei.hms:ml-computer-vision-bcr:1.0.3.303'
// 引入銀行卡識別plugin包
implementation 'com.huawei.hms:ml-computer-card-bcr-plugin:1.0.3.300' // 引入銀行卡識別模型包
implementation 'com.huawei.hms:ml-computer-card-bcr-model:1.0.3.300'通用卡證識別 基礎SDK +插件(通用卡證)+通用模型包(拉丁) // 引入基礎SDK
implementation 'com.huawei.hms:ml-computer-vision-ocr:1.0.3.300'
// 引入拉丁語文字識別模型包
implementation 'com.huawei.hms:ml-computer-vision-ocr-latin-model:1.0.3.315'
// 引入銀行卡識別plugin包
implementation 'com.huawei.hms:ml-computer-card-gcr-plugin:1.0.3.300''
編譯依賴總結
經過以上編譯依賴能夠拋光,全部的服務均須要集成對應基礎SDK和模型包,但身份證識別,銀行卡識別以及通用卡證識別都有對應的插件,也就是前面講到的校準框。方面,身份證識別和銀行卡識別都使用了專有的模型包,而通用卡證識別則使用了通用模型包。
開發差別
先分別看下都是怎麼集成的,詳細步驟就不在細數了,你們能夠直接到開發者聯盟上查看對應服務的開發步驟
https://developer.huawei.com/consumer/cn/doc/development/HMS-Guides/ml-introduction-4
在這裏簡單總結下對應服務的開發步驟:
文字識別
-
建立識別器
MLTextAnalyzer analyzer = MLAnalyzerFactory.getInstance().getLocalTextAnalyzer(setting);
-
建立fram對象,重構圖像bitmap
MLFrame frame = MLFrame.fromBitmap(bitmap);
-
把frame對象傳給識別器進行識別
Task<MLText> task = analyzer.asyncAnalyseFrame(frame);
-
結果處理
Task<MLText> task = analyzer.asyncAnalyseFrame(frame); task.addOnSuccessListener(new OnSuccessListener<MLText>() { @Override public void onSuccess(MLText text) { // 識別成功。 } }).addOnFailureListener(new OnFailureListener() { @Override public void onFailure(Exception e) { // 識別失敗。 } });
身份證識別
-
啓動界面進行身份證識別
private void startCaptureActivity(MLCnIcrCapture.Callback callback, boolean isFront, boolean isRemote)
-
重寫callback回調函數,實現對識別結果的處理 private MLCnIcrCapture.Callback idCallback = new MLCnIcrCapture.Callback() { @Override public void onSuccess(MLCnIcrCaptureResult idCardResult){ // 識別成功處理。 } };
銀行卡識別
-
啓動界面進行銀行卡識別
private void startCaptureActivity(MLCnIcrCapture.Callback callback, boolean isFront, boolean isRemote)
-
重建法定函數,實現對識別結果處理
private MLBcrCapture.Callback callback = new MLBcrCapture.Callback() { @Override public void onSuccess(MLBcrCaptureResult bankCardResult){ // 識別成功處理。 } };
通用卡證識別
-
啓動界面進行通用卡證識別
private void startCaptureActivity(Object object, MLGcrCapture.Callback callback) {
-
重建法定函數,實現對識別結果處理
private MLBcrCapture.Callback callback = new MLBcrCapture.Callback() { @Override public void onSuccess(MLBcrCaptureResult bankCardResult){ // 識別成功處理。 } };
開發總結
經過以上對比能夠發現,除了文本識別不提供界面外,其處理邏輯大同小異,基本都是傳要識別的圖像給SDK,而後經過經過函數得到識別的結果,這裏最核心的差別在於返回內容的結構化數據不一樣,爲了便於理解,小編整理了表格出來:
-
返回內容總結
服務 返回內容 返回內容說明 文字識別 MLText text 表示圖像檢測出的文本信息。包含兩個屬性:
1,getStringValue():圖像中檢測到的全部文本內容;2,getBlocks():圖像中檢測到的全部文本區塊,包含文本內容,文本區塊邊界和語種等信息。每一個文本塊又包含了不少行getContents(),以及行的文本內容getStringValue(),邊界getBorder()和語種getLanguageList()等信息,行內又包含了不少個字word,以及字的內容,邊界和語種信息身份證識別 MLCnIcrCaptureResult idCardResult
public Bitmap cardBitmap 身份證圖片
public String idNum 身份證號碼
public String name 姓名
public String sex 性別
public String validDate 有效期限銀行卡識別 MLBcrCaptureResult bankCardResult
public String getNumber() 獲取銀行卡號。
public android.graphics.Bitmap getNumberBitmap() 獲取校訂後的銀行卡號圖片。
public android.graphics.Bitmap getOriginalBitmap() 獲取原始送檢的未經校訂的銀行卡圖片。
通用卡證識別 MLGcrCaptureResult cardResult public static final int CAPTURE_CONTINUE 對識別結果不滿意,要求繼續檢測。
public static final int CAPTURE_STOP 退出檢測並銷燬插件頁面。
public Bitmap cardBitmap 送檢的通用卡證圖片。
public MLText text 通用卡證識別結果。和上面的文本識別並沒有區別經過以上對比能夠發現,身份證和銀行卡返回的是直接處理好的識別內容,直接經過接口便可獲取身份證號碼,銀行卡號這些信息,而不須要關心這些內容是如何提取出來的,而文本識別和通用卡證識別規則是返回了識別到的全量信息,裏面包含了塊,行,字等一級級的文本內容,此時若是開發者想獲取本身想要的信息,須要針對識別到的全量信息作提取,至少經過正則表達式匹配連續的x位數字識別爲卡號,或者匹配識別到的某些關鍵字後面的內容。
經過以上分析咱們能夠得出開發缺點對比:
-
開發傑出對比總結
服務 開發難度 開發說明 文字識別 簡單 須要開發者獲取圖片傳給SDK,須要對識別後的結果進行信息提取,提取出本身想要的內容 通用卡證識別 很簡單 直接經過接口便可啓動圖像獲取界面,須要對識別後的結果進行信息提取,提取出本身想要的內容 身份證識別 極簡單 直接經過接口便可啓動圖像獲取界面,直接經過接口獲取已經提取好的文字內容,無需後處理 銀行卡識別 極簡單 直接經過接口便可啓動圖像獲取界面,直接經過接口獲取已經提取好的文字內容,無需後處理
4技術差別分析
經過以上的差別分析,咱們能夠看到文本類服務既存在場景,服務集成上的差別,也存在某些關聯,某些文本識別和通用卡證識別服務實際上用了相同的通用模型,下面小編前面經過編譯依賴分析已經介紹過,文本類服務一般須要集成基礎SDK和模型包,有的服務則須要集成插件用於生成校準框,那麼模型包又是個什麼東西呢?對機器學習有必定了解的小夥伴可能比較清楚,機器學習一般分爲收集訓練樣本,特徵捕捉,數據建模,預測等幾部分,模型實際上就是機器學習中經過訓練樣本,特徵抽取等動做學習到一個「映射函數」。在華爲HMS ML Kit機器學習服務中,僅有這個映射函數還不行,還須要有個東西能夠執行它,咱們能夠推斷框架,還有一些算法須要對圖像進行先後處理,某些把圖像 爲了使理解,咱們統稱以上全部內容爲模型文件。爲了使這些模型文件能夠運行在手機上,還須要對這些模型文件進行優化處理,從而在手機終端上進行優化速度,以及同軸模型文件的大小等等。
差別和關聯分析
有了以上基礎概念介紹,再來看下文本類服各服務間的差別和關聯,爲了方便理解,小編畫了張圖,以下所示:
文本類服務集成模式解析圖
文字識別
使用的是通用文本數據集進行的訓練,只要是文本均可以識別,他的優勢是適用範圍廣,靈活度高,只要是文字內容,都可以識別。
通用卡證識別
和文本識別採用的數據集是相同的,所以模型文件也不會重複,只是增長了通用卡證插件,主要的做用是確保用戶將卡證對準相機正中位置,另外對反光,模糊圖像進行識別和過濾,不知足要求提示用戶從新調整,這樣就能夠提升卡證的識別準確率。
身份證&銀行卡識別
身份證,銀行卡識別服務,採用了身份證,銀行卡的專有數據培訓集,咱們都知道該銀行卡上的文字跟普通的印刷體問題有很大的區別,並且存在可能的現象,若是使用通用模型的話,則很難達到很是高的準確率,採用銀行卡,身份證專有數據集進行訓練,可讓ID,銀行卡識別準確率更高,卻沒有針對身份證,銀行卡作了正確性的識別前處理,能夠實時動態檢測圖像質量和傾斜角度,能夠生成對準框用於限制卡證的位置擺放,若是模糊,反光和未對準校準框則提示用戶從新對準。
5總結
經過以上分析,總結以下:
尺寸 | 總結說明 |
---|---|
場景 | 1,文本識別適用範圍更普遍,適合任何須要識別文字文本的場景 2,身份證和銀行卡識別適用於專門的身份證銀行卡識別場景,能夠提供超高的識別準確率 3,通用卡證能夠適用於全部卡證類的識別場景,而且可以提供相對較高的識別準確率。 |
服務集成 | 1,文本類各服務識別內容後返回的結構化數據不一樣,銀行卡,身份證返回的是通過處理後的結構化數據(如卡號,有效期),可供開發者直接獲取使用,通用文本和通用卡證則是返回識別到的全部內容,須要開發者經過必定後處理代碼作有效信息提取。 2,銀行卡,身份證相對通用卡證和文本識別集成開發更加簡單 3,文本類各服務須要集成不一樣的SDK和模型文件 |
技術差別 | 1,文本識別和通用卡證識別,使用的是通用模型文件,是經過通用文本數據集進行訓練生成的2,銀行卡,身份證使用的是專有模型文件,是經過專有的銀行卡,身份證數據集訓練生成的 |
怎麼樣,看完這篇文章後,有什麼感想,快來發表你的觀點吧