【TensorFlow】Androidで機械学習した物体を検出をする

Uncategorized
795 words

Android のカメラを使って、機械学習した物体を検出させます。

今回はサンプルを動かせるようにして、次回は自分で機械学習させたモデルで試してみたいと思います。

環境

  • Windows 11 Home 21H2 22000.556
  • Android Studio Bumblebee | 2021.1.1 Patch 1

準備

サンプルプロジェクトをダウンロード、展開しておきます。

こちら からサンプルプロジェクトをダウンロード。

ダウンロード

ダウンロードできたら展開しておきます。

展開

手順

プロジェクトの読み込み

Android Studio でプロジェクトを読み込みます。

プロジェクト読み込み

いろいろサンプルがありますが、今回使うサンプルは「object_detection」になります。

展開したフォルダーから次のフォルダーを辿って Androidプロジェクト を選択し開きます。

「.\examples-master\lite\examples\object_detection\android」

object_detection

プロジェクトを開いた直後はいろいろダウンロードや設定が入るので、右下が落ち着くまでしばらく待ちます。

右下が落ち着くまでしばらく待つ

APKビルド

右下が落ち着いたら、APKビルドをします。

Buildメニューから「Build Bundle / APK > Build APK」と選択していくと APKビルドができます。

Build APK

ビルドエラー

今回一番手こずったのは、この部分になります。

1
Errors while building APK. You can find the errors in the 'Messages' view.

Errors while building APK. You can find the errors in the 'Messages' view.

1
Deprecated Gradle features were used in this build, making it incompatible with Gradle 8.0.

Deprecated Gradle features were used in this build, making it incompatible with Gradle 8.0.

エラーを読むと「Gradle 8.0 との互換性がないから無理」って言っていますね。

つまり Gradle 8.0 では使えない関数が使われているってことになります。

もう少し上にスクロールすると、エラーとなった関数が表示されています。

1
2
3
Execution failed for task ':lib_task_api:compileDebugJavaWithJavac'.
Failed to calculate the value of task ':lib_task_api:compileDebugJavaWithJavac' property 'options.generatedSourceOutputDirectory'.
Querying the mapped value of map(java.io.File property(org.gradle.api.file.Directory, fixed(class org.gradle.api.internal.file.DefaultFilePropertyFactory$FixedDirectory, D:\android\examples-master\lite\examples\object_detection\android\lib_task_api\build\generated\ap_generated_sources\debug\out)) org.gradle.api.internal.file.DefaultFilePropertyFactory$ToFileTransformer@6f3ff1b9) before task ':lib_task_api:compileDebugJavaWithJavac' has completed is not supported

Execution failed for task ':lib_task_api:compileDebugJavaWithJavac'.

今回は「:lib_task_api:compileDebugJavaWithJavac」が原因でビルドできなかったみたいです。

Gradleバージョン確認

プロジェクトが使ってるGradleバージョンを確認します。

Fileメニューの「Project Structure」をクリックするとGradleバージョンを確認することができます。

Project Structure

今回は Gradle 7.4 が使われていました。

Gradle 7.4

Gradleバージョン 8.0 はまだリリースされていないので、今回はプラグインバージョンを最新まで上げて対応することにしました。

アルファ版やベータ版は使いたくないため、今最新の「7.1.2」に変更します。

プラグインバージョン

再度ビルドをすると、エラーも出ずにビルドできるようになります。

ビルド

実行

USBで端末をつなぐと、実機で動作確認することができます。

再生ボタン

カメラでいろいろなものを表示させると、リアルタイムで何か表示されます。

マウス

おわりに

object_detectionのプロジェクト内に、ラズパイ用のプロジェクトもあったので、いつか挑戦してみたいです。

追記

物体検出モデル作成の記事を書きました。興味がある方、ぜひご覧ください。

https://noitaro.github.io/tensorflow-object-detection/