Android Kotlin ML Kit を使用してバーコード スキャン

Android Kotlin ML Kit を使用してバーコード スキャン

Google ML Kit のサンプルに、バーコード スキャン があったので、試してみました。
Android で、学習済Model を使って簡単に、機械学習の Object Detection が出来るみたい。
知らない間に、Android で此処までできるようになっていたとは、驚きじゃ!!

バーコード スキャン -> ML Kit を使用してバーコードをスキャンする(Android)

MLKit Samples の android/codescanner を試してみました。

1. ソースのダウンロード。
適当なディレクトリーで、
$ git clone https://github.com/googlesamples/mlkit.git
mlkit/android の下の、
codescanner と、internal ディレクトリーをそれぞれ、
~/AndroidStudioProjects/ 下へコピーします。

2. Android Studio で、codescanner の方だけを、プロジェクトとして、オープンして、こちらをビルドします。
注) internal の方は、codescanner のビルド時に参照するだけなので、そのままにしておきます。
codescanner をオープンすると、Gradle 等が古いなどのガイダンスが出てきて、バージョンアップを促されるので、それに従ってすべてバージョンアップします。

3. internal は、namespace の記述が古いままでエラーになるので、新しい記述に変更します。
1) build.grade(Module:internal:chooserx) の修正。


2) ~/AndroidStudioProjects/internal/chooserx/src/main/AndroidManifest.xml の修正。

4. ML Kit を使用してバーコードをスキャンする(Android) の記述に従って、修正します。
1) モデルをアプリにバンドルする場合: の設定。
build.grade(Module:app) を、修正。

以上で、Build 出来ると思います。
後は、実機で試すと、OK じゃ!!。

しかし、ソースを見てみると、全ては、ライブラリーの中ですべて処理しているので、 自分で、なにか、カスタマイズするとかは、なにも出来ない。
ちょっと、入口が違うみたいぞね。

1) Vision
サンプルアプリ(Vision) の中にありました。
git clone でダウンロードして、mlkit/android/ の下の、vision-quickstart フォルダーを、~/AndroidStudioProjects 下へコピーして、Android Studio で、インポートして、ビルドすれば使えました。

実機にアップロードして、ML Kit Vision を起動して、
-> Run the ML Kit quickstart written in Kotlin -> LivePreviewActivity を実行して
下の、 Objeect Detction の右の▽ の中の Barcode Scanning を選べば実行出来ました。
注) LivePreviewActivity 以外でも、CameraXSourceDemoActivity 以外は、Barcode scanning が入っているようです。

プログラムの階層。
EntryChoiceActivity.kt -> LivePreviewActivity.kt

LivePreviewActivity.kt をベースに、barcodescanner の部分と、カメラ入力を使えば、自分でカスタマイズ出来そうです。

2) material-showcase
マテリアル デザイン ショーケース アプリ の方みたい。
この中に、Barcode detection - An end to end barcode scanning solution と言うのがありました。
new Material for ML design guidelines. のリンクの先の、Barcode scanning のリンクにガイダンスがありました。
しかし、こちらは、Material Design と言って、新しいデザイン形式で面倒くさそう。
しかし、バーコードの判定のオペレーションは、こちらのほうが良いみたいぞね。

5. Android CameraX に、ML Kit Analyzer を組み込んで、バーコードスキャナーを、自分で作る。..... こちらが本命。 by nishi 2023.6.10

CameraX の概要CameraX のスタートガイド で、CameraX アプリを作って、
その中の 6. ImageAnalysis ユースケースを実装する で、ML Kit の Barcode Scanner Detect モデルを組み込めば、出来そうです。

さっそく、おんちゃんは、こっこれを、作るぞね。!!

5.1 CameraX のスタートガイド "6. ImageAnalysis ユースケースを実装する" まで作って、 プロジェクトをコピーして、プロジェクト名を変更する。
方法は、Android Studio:プロジェクトをコピーして名前を変更する方法 を参照すると良い。
新しいプロジェクト名:CameraXBarcode_kt (何でも良い)

足りない部分の補足
1) build.gradle(Module:app)


2) res/values/themes/themes.xml


5.2 ML Kitで私物を認識してもらうまで(Kotlin) を参考に、ML Kit barcode scan モデルを組み込む。
この部分は、ML Kit を使用してバーコードをスキャンする(Android) が参考になる。

build.gradle(Module:app)


MainActivity.kt


一応、これで、MlKit の barcode scan が実行できて、結果を取得できます。
ただし、今回の方法は、barcode scan の実行結果は、ログ出力になります。
プレビュー画面上に、同時に結果を出すことはできません。

ターミナルで、ログを出して、結果を、確認します。
$ adb logcat -s CameraXBarcode_kt


5.3 プレビュー画面上に、MlKit の結果を同時に出す方法。
CameraX | 高度なトピック | ML Kit Analyzer の方法を利用するようです。

以下抜粋。
.......
ML Kit Analyzer を実装する
ML Kit Analyzer を実装するには、PreviewView と連携して UI 要素を表示する CameraController クラスを使用することをおすすめします。CameraController を使用して実装すると、ML Kit Analyzer は、元の ImageAnalysis ストリームと PreviewView の間の座標変換を処理します。CameraX からターゲット座標系を受け取り、座標変換を計算し、ML Kit の Detector クラスに転送して分析します。

CameraController で ML Kit Analyzer を使用するには、setImageAnalysisAnalyzer() を呼び出し、コンストラクタに以下のものを含む、新しい ML Kit Analyzer オブジェクトを渡します。
......


CameraController を使った、サンプルがありました。
CameraX-MLKit
なんのことはない、上記を試せば、OK ぞね!!

6. メモ
1) Android Camera のサンプル
android / camera-samples
2) ML Kit での、イメージ分類の例
ML Kitで私物を認識してもらうまで(Kotlin)
3) BarcodeScanningActivity.kt

このブログ記事について

このページは、おんちゃんが2023年6月 7日 00:30に書いたブログ記事です。

ひとつ前のブログ記事は「T100TA Ubuntu 20.04 Sound 設定」です。

次のブログ記事は「Android Kotlin TensorFlow Lite で、Object Detection を試す。」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。

カテゴリ

ウェブページ

サイトナビ