1. 程式人生 > >Android 影象識別之OCR識別身份證,銀行卡等證件資訊

Android 影象識別之OCR識別身份證,銀行卡等證件資訊

尊重作者勞動成果,轉載請註明出處

原文連結:https://mp.weixin.qq.com/s/oRpW9AWLx60GpINHJ__BNw

前言

        OCR (Optical Character Recognition,光學字元識別)是指電子裝置(例如掃描器或數碼相機)檢查紙上列印的字元,通過檢測暗、亮的模式確定其形狀,然後用字元識別方法將形狀翻譯成計算機文字的過程;

效果圖


        關於OCR文字識別技術,它的官方文件搞得很複雜,而且最終的效果也不理想,但是還好,百度的AI平臺已經在此基礎上改進了,於是,今天就給大家帶來百度AI平臺的文字識別技術,可識別身份證,銀行卡,駕駛證,車牌等多種證件。

1、我們需要進入百度雲文字識別的開發平臺,進行一系列的註冊,登陸。
https://cloud.baidu.com/product/ocr

2、建立應用



        在建立應用的時候,應用名稱我們可以隨便寫一個,但是我們要注意的是:我們在寫文字識別包名的時候一定要寫我們專案的包名,不然在識別的時候會提示你獲取Token出錯,接下來我們就直接建立我們的應用。

3、檢視管理應用列表


        這個就是我們剛剛建立的應用,我們需要記住它的API Key和Secret Key,在我們的專案中可能會用到

4、點選應用列表左邊最下面的sdk下載,就會到下載介面下載我們需要的技術文件和sdk。在sdk裡面也有一份技術文件

        下載下來sdk後,解壓後,目錄如下:


        關於這幾個檔案的作用,引用官方文件的一張圖來說明



  • libs:包含核心jar包以及so檔案,直接拷貝到你專案的libs中即可

  • ocr-ui:是它提供的一個掃描的預設ui,我們可以用,也可以不用,

  • OCRDemo :官方提供的一個包含多種功能,可以直接執行的demo,但是必須要自己配置AK和SK才能執行,否則會提示獲取Token失敗。

必要的說明:看完了這裡,你就可以少踩坑

        直接執行官方demo,會失敗,他會提示獲取AccessToken失敗。那什麼是AccessToken?怎麼獲取?別急,筆者這就為大家講述

注意:我們在使用百度AI平臺的SDK之前必須先獲取AccessToken成功

百度AI開放平臺使用OAuth2.0授權呼叫開放API,呼叫API時必須在URL中帶上accesss_token引數。AccessToken可用AK/SK或者授權檔案的方式獲得。

        OCR Android SDK提供了以下3種獲取AccessToken的方法.

方案一、API Key / Secret Key獲取Token

        也就是說呼叫下面這段程式碼獲取AccessToken時,需要填寫剛才你建立的應用的API Key / Secret Key,注意包名必須和你專案的包名一致,否則會失敗。

OCR.getInstance().initAccessTokenWithAkSk(new OnResultListener<AccessToken>() {
   @Override    public void onResult(AccessToken result) {
       // 呼叫成功,返回AccessToken物件        String token = result.getAccessToken();    }
   @Override    public void onError(OCRError error) {
       // 呼叫失敗,返回OCRError子類SDKError物件    } }, getApplicationContext(), "您的應用AK", "您的應用SK");

        雖然SDK對網路傳輸的敏感資料進行了二次加密,但由於AK/SK是明文填寫在程式碼中,在移動裝置中可能會存在AK/SK被盜取的風險。有安全考慮的開發者可使用第二種授權方案。

方案二、授權檔案(安全模式)獲取Token

        此種身份驗證方案使用授權檔案獲得AccessToken,快取在本地。建議有安全考慮的開發者使用此種身份驗證方式。在您的移動APP分發出去之後,APP存在被反編譯的可能,所以直接將AK / SK 置於APP原始碼之中,存在被盜取的風險。採用授權檔案的身份驗證方法,可有效保護AK/SK在移動裝置中的安全。攻擊者即使攔截了流量,盜取了授權檔案,也難以盜用您的配額。

這時候應該有人就在想 什麼是授權檔案?如何獲取?


  • 在應用列表找到對應的應用

  • 下載對應應用的授權檔案

  • 將授權檔案新增至工程assets資料夾,檔名必須為aip.license

  • 呼叫initAccessToken方法,初始化OCR單例,來獲取AccessToken:

OCR.getInstance().initAccessToken(new OnResultListener<AccessToken>() {
   @Override    public void onResult(AccessToken result) {
       // 呼叫成功,返回AccessToken物件        String token = result.getAccessToken();    }    
   @Override    public void onError(OCRError error) {        
       // 呼叫失敗,返回OCRError子類SDKError物件    } }, getApplicationContext());

        通過這種方式,你就不需要填寫你的ak和sk了,這種授權檔案的方式較為安全,推薦使用。

3、自助AccessToken管理(不推薦)

        此種身份驗證方案直接使用開發者提供的AccessToken,鑑於安全性考慮不推薦此方式,使用此模式將不能開啟身份證本地質量控制能力。
        若開發者的應用有自行搭建的服務端,也可在自己的服務端進行token的獲取與管理,然後分配給移動客戶端使用。token的獲得可以參考API鑑權認證機制。此種授權方案在移動客戶端上沒有任何AK/SK資訊,風險係數低,但需要開發者自行管理token的獲取與分配,適合有條件的開發者使用。

使用步驟:
        將您需要使用的token傳入對應的建構函式,初始化OCR單例:

OCR.getInstance().initWithToken(getApplicationContext(), "自行獲取的access_token");

        到這裡,核心部分就講完了,你只需要按照文件上面的SDK匯入就好,註釋很清楚,在此提供一個官方的接入文件的地址