Google OS実験室 ~Moonlight 明日香~

GoogleのAndroidで遊び始めて, すでに6年以上が経った. Androidは思った以上の発展を遂げている. この技術を使って, 新しいことにチャレンジだ!!

機械学習

Google ML Kit試してみた!

先日(2018/5/8-10)開催されたGoogleの開発者向けイベント「Google I/O 2018」で「ML Kit」[1]のβ版が発表された.
AndroidやiOS向けアプリでML Kitを使うことで, 機械学習を活用したテキスト認識, 顔検出, 画像のラベル付けなどが容易に利用できるようだ.

そこで, quickstart-android[2]を早速試してみた.

1. MK Kit概要
1.1 主な機能
現時点では, 5つのAPIが提供されており, APIによってOn-deviceとCloudでの対応状況が異なっている.
On-devieとCloudの両方に対応している場合でも, 認識精度や取得できる情報が異なっている.

MLKit02

FeatureOn-deviceCloud
テキスト認識
顔検出
バーコードスキャン
画像のラベル付け
ランドマーク認識

1.2 主な特徴
 ・ 「Firebase」上で利用でき, 「Android」向けと「iOS」向けの双方が用意されている.
 ・ On-device上の機能を利用する場合は, ネットワーク接続なしに無償で利用できる.
 ・ 独自のTensorFlow Liteモデルを利用できる.
など, など...

2. ML Kitデモのビルド
2.1 ソースコード取得
(1) リポジトリをクローンする.

 $ git clone https://github.com/firebase/quickstart-android.git

(2) Android Studioでquickstart-android/mlkitをインポートする.

MLKit

2.2 Firebaseのプロジェクト作成
(1) Firebase Consoleでプロジェクトを作成する.
(2) プロジェクトの設定ファイルgoogle-services.jsonをダウンロードする.
(3) Android Studioのmlkit/appの下に, google-services.jsonを配置する.

2.3 ビルド
今回は以下の環境でビルドした.
[ビルド環境]

 ・ Android Studio 3.1.2
 ・ buildToolVersion 27.0.3

 ・ compileSdkVersion 27
 ・ targetSdkVersion 27

3. ML Kitデモ
3.1 顔検出
単に顔位置を検出するだけでなく, 目の位置やhappiness度なども認識している.
上の二人は, happiness度低~い.

keyaki01
[出典:欅坂46公式サイト オフィシャルレポート]

3.2 テキスト認識
On-deviceの場合には, 行単位で認識するみたい.
まだ, 日本語は対応していないとのこと.

MLkit03

3.3 バーコードスキャン
バーコードもQRコードも認識できる.
ただ, バーコードは回転に弱い感じ.

MLKit05

3.4 ラベル認識
On-deviceでは400+ ラベル, Cloudでは10,000ラベルの認識ができるそうだ.
On-deviceだと, iPodをMobile phoneと間違えたので, iPod自体がラベルにないのだろう.

MLkit04

まずは, Quickstartのデモを動作させてみた.
On-device上でもラベル認識以外はそれなりに認識できている.
Cloudになると, もっと認識精度はいいだろうし...

だが, あくまでパターン認識なので, 100%正解ってことはない.
誤認識することもあると割り切って, うまくアプリで使ってやることが大事!!

それなりにおもしろいことができるのではとの期待が膨らんできたので, デモのソースコードやML Kitのドキュメントを読んで, 少しアプリへの実装の仕方を勉強してみよう.

----
参照URL:
[1] ML Kit for Firebase | Firebase
[2] firebase/quickstart-android: Firebase Quickstart Samples for Android

TensorFlowのデモを動かす

VMware Playerを快適にしたい」で, Google発の深層学習フレームワーク「TensorFlow」のAndroidデモをUbuntu 14.04 on VMware Playerでビルドしようとして, うまくいかなかったことを書いた.

ところが, 最近VMWare Player6をVMWare Workstation 12 Playerにupdateしたところ, ホストPCのRAMが8GBでも仮想マシンのRAMを最大6GB強まで設定できるようになった. (以前は4GB程度まで)

そこで, 再度Androidデモのビルドにチャレンジ.

0. ビルド環境
ホストマシン:
 CPU:Intel Core i7-2600K
 RAM:8.00GB
 OS:Windows 10 Pro
 VMware Workstation 12 Player
仮想マシン:
 プロセッサ数:4
 メモリ:6GB
 HDD:100GB
 OS:Ubuntu 14.04

1. ビルド手順[1][2]
基本的にはここに記載の手順でOK.
よくわからないという方は, こちらも参考に.

1.1 TensorFlowのダウンロード
 TensorFlowのソースをGitから取得する. 
   $ git clone -- recurse-submodules https://github.com/tensorflow/tensorflow

1.2 ビルド
 a) WEORKSPACEにAndorid SDK/NDKの場所を指定する.
   $ cd tensorflow
   $ emacs WORKSPACE &     // エディタで開く
  [修正内容]
   # Uncomment and update the paths in these entries to build the Android demo.
   android_sdk_repository(
        name = "androidsdk",
        api_level = 23,
        build_tools_version = "23.0.2",
        # Replace with path to Android SDK on your system
        path = "/home/xxxx/Android/Sdk",
   )

   android_ndk_repository(
      name="androidndk",
      path="/home/xxxx/Android/android-ndk-r10e",
      api_level=21)
 b) ビルドする.
   $ bazel build //tensorflow/examples/android:tensorflow_demo
        :
        :
   Target //tensorflow/examples/android:tensorflow_demo up-to-date:
   bazel-bin/tensorflow/examples/android/tensorflow_demo_deploy.jar
   bazel-bin/tensorflow/examples/android/tensorflow_demo_unsigned.apk
   bazel-bin/tensorflow/examples/android/tensorflow_demo.apk
   INFO: Elapsed time: 409.768s, Critical Path: 125.45s

 (注) メモリが不足した場合, 以下のようなエラーが発生する.
        :
   INFO: From Compiling tensorflow/core/kernels/cwise_op_mul.cc:
   virtual memory exhausted: Cannot allocate memory
   ERROR: /home/xxxx/work/tensorflow/tensorflow/core/BUILD:796:1: C++ compilation of rule '//tensorflow/core:android_tensorflow_lib' failed: arm-linux-androideabi-gcc failed: error executing command external/androidndk/ndk/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin/arm-linux-androideabi-gcc -fstack-protector-strong -fpic -ffunction-sections -funwind-tables ... (remaining 44 argument(s) skipped): com.google.devtools.build.lib.shell.BadExitStatusException: Process exited with status 1.
   Target //tensorflow/examples/android:tensorflow_demo failed to build
   Use --verbose_failures to see the command lines of failed build steps.
   INFO: Elapsed time: 292.118s, Critical Path: 145.50s

1.3 インストール
 Android端末(Android 5.0以降)にインストールする.
   $ adb install -r -g bazel-bin/tensorflow/examples/android/tensorflow_demo.apk

2. 動作例
- Nexus 7 (2013) / Android 6.0

2.1 成功例
tf01

tf02

2.2 失敗例
tf03

tf04

ちょっと試しただけだが, 認識しやすものと認識しにくいものの差が大きいな, といった感じを受けた.
   
----
参照URL:
[1] Tensorflow Android Camera Demo
[2] TensorFlowをアプリで使ってみる | GuildWorks Blog

プロフィール

明日香

アクセスカウンター
  • 今日:
  • 昨日:
  • 累計:

記事検索



  • ライブドアブログ