HUAWEI ML Kitを使用した銀行カード認識の実装方法


## 概要
以前の投稿では、HUAWEI ML Kitを使用してSmile-CameraとID用写真のDIYアプレットを実装する方法について検討しました。今回の投稿では、銀行カード認識機能の実装方法をご紹介します。この機能により、ユーザーは銀行カードを瞬時に紐付けることができます。
![1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/696852/60ab3e77-c3a4-7d16-2e63-f52657c0a6bc.png)
## 銀行カード認識の用途
開発に着手する前に、銀行カード認識機能の用途について確認しましょう。銀行アプリやeコマースアプリなど、支払い機能を備えたアプリに最適です。このようなアプリには、いくつか共通の要件がある場合が多いです。

- 銀行カードの紐付け

ユーザーは自分の銀行カードを紐付けて、オンライン決済を素早く行うことができます。

- 銀行振込

ユーザーは同一銀行内または異なる銀行の口座間でお金を振り込むことができます。

 - 本名での認証とID確認
 
ユーザーは、自分の銀行カードに紐付けられた情報使用して、本名での認証とID確認を素早く実施できます。

このような機能ではそれぞれ、ユーザーはカード番号や有効期限など、銀行カード情報を入力する必要があります。当然、このような情報を手入力するのは時間がかかり、誤入力も発生しやすくなります。しかし、HUAWEI ML Kitの銀行カード認識サービスにより、ユーザーは情報を簡単かつ正確に入力できます。

## 銀行認識サービスの利用方法
銀行カード認識サービスは、カメラストリームで銀行カードを認識し、カード番号や有効期限など重要な情報を抽出します。このサービスはIDカード認識サービスと連携しており、ID確認や銀行カード番号入力など、幅広い一般向け機能を提供します。
![2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/696852/d8084056-6679-151c-b7ee-19fe22222fa8.png)

内蔵して、アプリでサービスを利用できるようにする、銀行カード認識プラグインがあります。プラグインは、ユーザーに代わってカメラストリームを処理します。
## 開発を始める
### 1.準備
#### 1.1 Huawei Mavenリポジトリをプロジェクトレベルのbuild.gradleファイルに追加する
**Android Studio**プロジェクトのルートディレクトリにある**build.gradle**ファイルを開き、Mavenリポジトリアドレスを追加します

 ```javascript
buildscript {
    repositories {        
        maven {url 'http://developer.huawei.com/repo/'}
    }    }allprojects {
    repositories {       
        maven { url 'http://developer.huawei.com/repo/'}
    }}
 ```
#### 1.2 SDK依存関係をアプリレベルのbuild.gradleファイルに追加する
 ```javascript
dependencies{  
  implementation 'com.huawei.hms:ml-computer-vision-bcr:1.0.3.303' 
  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' 
 ```
#### 1.3 アプリのモデルが自動的に最新版に更新されるようにする
アプリがHUAWEI AppGalleryからダウンロードされるとすぐに、アプリの機械学習モデルが自動的に最新版に更新されるようにするには、以下の内容を**AndroidManifest.xml**ファイルに追加します。

 ```javascript
   <manifest 
   ... 
   <meta-data              
       android:name="com.huawei.hms.ml.DEPENDENCY"   
       android:value= "bcr"/> 
       <!--If multiple models are required,set the parameter as follows:        
       android:value="object,ocr,face,label,icr,bcr,imgseg"-->  
   ... </manifest>
 ```
#### 1.4 AndroidManifest.xmlファイルでカメラとストレージの権限を適用する
 ```javascript
<uses-permission android:name="android.permission.CAMERA" /> 
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
 ```
### 2 コードの開発
#### 2.1 認識結果の取得後に呼び出されるコールバック関数を作成する
**onSuccess**、**onCanceled**、**onFailure**、および**onDenied**関数をオーバーライドします。

 - **onSuccess**：認識が成功すると呼び出されます。**MLBcrCaptureResult**は認識結果を示します。
  
 - **onCanceled**：ユーザーが認識をキャンセルすると呼び出されます
 
 - **onFailure**：認識が失敗すると呼び出されます。
  
 - **onDenied**：何らかの理由で認識要求が却下される（カメラが使用できないなど）と呼び出されます。

  ```java
 private MLBcrCapture.Callback callback = new MLBcrCapture.Callback() { 
    @Override 
    public void onSuccess(MLBcrCaptureResult bankCardResult){ 
    }  
    @Override 
    public void onCanceled(){  
    }   
    @Override 
    public void onFailure(int retCode, Bitmap bitmap){  
    } 
    @Override 
    public void onDenied(){  
    }   };
 ```
#### 2.2 認識機能のcaptureFrame APIを呼び出すための認識パラメータを設定する
認識結果は、2.1で作成したコールバック関数を通して返されます。

 ```java
private void startCaptureActivity(MLBcrCapture.Callback callback) { 
    MLBcrCaptureConfig config = new MLBcrCaptureConfig.Factory() 
        .setOrientation(MLBcrCaptureConfig.ORIENTATION_AUTO) 
        .create(); 
    MLBcrCapture bankCapture = MLBcrCaptureFactory.getInstance().getBcrCapture(config); 
    bankCapture.captureFrame(this, callback); }
 ```
#### 2.3 Recognitionボタンのコールバックで、2.2で定義したメソッドを呼び出す

 ```java
@Override 
public void onClick(View v) { 
    switch (v.getId()) {  
        case R.id.detect: 
            startCaptureActivity(callback); 
            break; 
        default: 
            break; 
    } }
 ```
## 試してみましょう
銀行カード認識機能がどのようなものか見てみましょう。
![3.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/696852/4291c161-0ee9-32dd-a9db-95951e09a476.gif)

## ソースコード
ソースコードを[GitHub](https://github.com/HMS-MLKit/HUAWEI-HMS-MLKit-Sample) にアップロードしているので、機能の向上など自由にお試しください。
銀行カード認識のデモコードは**MLKit-Sample\module-text\src\main\java\com\mlkit\sample\activity\BankCardRecognitionActivity.java**をご覧ください。
詳しくは、当社の[公式ウェブサイト](https://developer.huawei.com/consumer/en/doc/development/HMS-Guides/ml-introduction-4)をご覧ください。
## 近日公開予定
これからも、実用的な場面でのHUAWEI ML Kitの使用方法をお知らせしますので、ワクワクするような内容に是非ご注目ください。