一般社団法人 全国個人事業主支援協会

COLUMN コラム

Code Polaris 2021 Advent Calendar 2021の12/19(土)に投稿しました♪
https://qiita.com/advent-calendar/2021/code-polaris

はじめに

Androidモバイル開発向けバーコードリーダーライブラリについて調査していたところ、ML Kitなるものを発見した。
Android向けバーコードリーダーライブラリといえば、主流なのがXZing(読み方は「ゼブラクロッシング」)があるが、XZingが優秀で実装も比較的難しくないため逆にそれ以外のライブラリに触れる機会があまりなかった。
Android向けに提供されているバーコードリーダーライブラリを幅広くしらべてみて、ML Kitのコード認識機能にも興味をもったため、どのような機能が使えるのか、アプリに取り込んで実装するにはどうしたらよいか等調査してみることにした。

ML Kitとは何か?

Googleから提供されている、AndroidまたはiOSモバイル向けの機械学習インターフェース。カメラまたは写真などのイメージからの物体認識機能や、文字認識、顔認証、バーコード認識機能などが提供されている。

公式ガイドはこちら。
https://developers.google.com/ml-kit/guides
主に、以下の機能が機械学習APIによって実装可能とのこと。
・バーコード認識
・顔検出
・画像のラベリング
・物体の検出と認識
・文字認識
・デジタルインク認識(手書きのテキストから文字の形状を検出)
・ポーズ認識
・焦点認識

以前、TensorFlowによるモーションキャプチャ機能(Webカメラから読み取った人体の動きに自動的にマーカーをつけて、人物の動きを追跡する)を調査したことがあるが、これと同様のポーズ認識もあるみたい。ML Kitって奥深い。

今回は、バーコード認識機能について、クイックスタートのサンプルアプリを触りながら動作確認し、自作アプリにカスタマイズする方法について調査した。

バーコード認識についてのガイドはこちら。
https://developers.google.com/ml-kit/vision/barcode-scanning

テストアプリを使ってバーコードリーダー認識をお試ししてみた

今回試してみたアプリはこちら。
ソースコードをzip形式でダウンロードして、Android Studioで「既存のプロジェクトを開く」で取り込み、そのまま自前のAndroid端末でデバック実行した。
https://github.com/googlesamples/mlkit/tree/master/android/vision-quickstart

複数のバーコードを同時認識できる!
一方はJANコード、もう片方はQRコードというように、異なる種類のコードが混じっていてもそれぞれ別のコードとして正しく認識されている。
認識のスピードも早く、カメラにかざしてから認識内容が表示されるまでほとんど待たされることがなかった。

サンプルアプリのコードをのぞいてみた

パーコード認識結果がどのような形式で検出されているのか、ソースコードを見て確認してみた。
バーコード認識結果を取得しているのはどうやら下記の箇所らしい。

BarcodeScannerProcessor.java

@Override
protected void onSuccess(
@NonNull List<Barcode> barcodes, @NonNull GraphicOverlay graphicOverlay) {
    if (barcodes.isEmpty()) {
        Log.v(MANUAL_TESTING_LOG, "No barcode has been detected");
    }
    for (int i = 0; i < barcodes.size(); ++i) {
        Barcode barcode = barcodes.get(i);
        graphicOverlay.add(new BarcodeGraphic(graphicOverlay, barcode));
        logExtrasForTesting(barcode);
    }
}

引数のbarcodesが取得できたバーコード情報のリスト
graphicOverlay.add(new BarcodeGraphic(graphicOverlay, barcode));
を行い、画面上に認識結果を表示している。

GraphicOverlayに認識結果を追加することによって、以下のようにカメラキャプチャーの上に認識結果が表示される。

使ってみた感想

以前から使っていたお馴染みのZXingライブラリに比べて、アプリ実装の難易度は上がるものの認識機能としては遜色なく、サンプルアプリを使用した限りでは十分実用できるものと感じた。
アプリのカスタマイズの幅も広そう。
Android版では、Android標準のカメラAPIを組み合わせて実装できるため、Androidの端末の種類によっては高性能なカメラ機能を十分に生かした認識機能が実装できるのではないか?と考える。

次回予告(やってみたいことまとめ)

冒頭で、ML Kitでは機械学習機能を使っていろいろな画像・動画認識ができるとのことを書いたが、やはり自分として興味があるのはポーズ認識(モーションキャプチャ)。ML Kitでは3D的な検出は行わずあくまで2Dの動画上での動き認識になるとのことだが、インタラクティブなアプリと組み合わせると面白いことができそう、と勝手に想像している。いや、想像だけでなくやってみたい。

…ということで、次回以降ポーズ認識や他の機能の検証もやっていきたい。

参考資料

●公式ページ
AndroidでMLキットを使用してバーコードをスキャンする
https://developers.google.com/ml-kit/vision/barcode-scanning/android#java

クイックスタート(Androidサンプルアプリ)
https://github.com/googlesamples/mlkit/tree/master/android/vision-quickstart

この記事をシェアする

  • Twitterでシェア
  • Facebookでシェア
  • LINEでシェア