TensorFlowをアプリで使ってみる

水谷です。

先週、Googleが機械学習システム「TensorFlow」をオープンソースで公開しました。

曖昧な言葉や口語を的確に理解して検索結果をだすRankBrain、最近Inboxアプリに搭載された自動応答機能や、スマートフォンのカメラで看板の文字などを写して、その文字を翻訳してくれるGoogle翻訳アプリも、このTensorFlowをベースに開発されているようです。

詳しくはこちらなどを参照してください。

http://googledevjp.blogspot.jp/2015/11/tensorflow-google.html
http://www.publickey1.jp/blog/15/googletensorflow.html
http://www.itmedia.co.jp/news/articles/1511/10/news055.html

ここでは、手っ取り早くアプリを動かしてその技術を体験していきたいと思います。

準備

Java JDK

まずJDKが必要になるので以下よりダウンロードします。

http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html

私の場合は、Macなのでjdk-8u66-macosx-x64.dmgをダウンロードして、ダウンロードしたファイルを開いて「JDK 8 Update 66.pkg」ダブルクリックして、その後ウィザードに従ってインストールします。

Android SDK

次にAndroid SDKを以下のページからダウンドールしていれます。

https://developer.android.com/sdk/index.html

ページの下の方にある「android-sdk_r24.4.1-macosx.zip」をダウンロードします。

ダウンロードしたファイルを解凍して、アプリケーションフォルダに配置しておきます。

$ cd ~/Downloads
$ unzip android-sdk_r24.4.1-macosx.zip
$ mv android-sdk-macosx ~/Applications

NDK

あと、NDKも必要になるので、以下よりダウンロードします。

http://developer.android.com/ndk/downloads/index.html

実行形式のファイルになっているので実行権を付与して実行します。できたファイルをアプリケーションフォルダに配置します。

$ cd ~/Downloads
$ chmod +x android-ndk-r10e-darwin-x86_64.bin
$ ./android-ndk-r10e-darwin-x86_64.bin
$ mv android-ndk-r10e ~/Applications

Bazel

Bazelも以下よりダウンロードします。

https://github.com/bazelbuild/bazel/releases

インストールスクリプトを実行します。

$ cd ~/Downloads
$ chmod +x bazel-0.1.1-installer-darwin-x86_64.sh
$ ./bazel-0.1.1-installer-darwin-x86_64.sh --user

PATHの設定

SDKとNDKのPATHを設定しときます。

# android
export ANDROID_HOME="$HOME/Applications/android-sdk-macosx"
export NDK_HOME="$HOME/Applications/android-ndk-r10e"
export PATH=$PATH:$ANDROID_HOME/tools:$ANDROID_HOME/platform-tools:$NDK_HOME

# bazel
export PATH="$PATH:$HOME/bin"

Build Tools

SDK Managerで23.0.2をいれます。

SDK Managerを起動します。

$ android

23.0.2をチェックしてインストールします。

Android_SDK_Manager

アプリのビルドとインストール

準備ができたのでアプリをビルドして実機にいれていきます。

TensorFlow

TensorFlowのソースをGitからcloneします。

$ git clone --recurse-submodules https://github.com/tensorflow/tensorflow

ビルド

SDKとNDKの場所を指定する必要があるのでWORKSPACEというファイルを編集します。

$ cd tensorflow
$ vi WORKSPACE

上記の手順のとおりであれば以下を追加します。

android_sdk_repository(
name = "androidsdk",
api_level = 23,
build_tools_version = "23.0.2",
# Replace with path to Android SDK on your system
path = "/Users/hirotaka/Applications/android-sdk-macosx",
)

android_ndk_repository(
name="androidndk",
path="/Users/hirotaka/Applications/android-ndk-r10e",
api_level=21)

ビルドをします。

$ bazel build //tensorflow/examples/android:tensorflow_demo -c opt --copt=-mfpu=neon
.
.
THIS TOOL IS DEPRECATED. See --help for more information.

INFO: From Generating signed apk:

THIS TOOL IS DEPRECATED. See --help for more information.

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: 294.089s, Critical Path: 283.02s

ワーニングはいくつかでるのですが、エラーがなければ5分くらいでパッケージができます。

実機にいれます。

$ adb install -r bazel-bin/tensorflow/examples/android/tensorflow_demo.apk
5101 KB/s (97789592 bytes in 18.718s)
pkg: /data/local/tmp/tensorflow_demo.apk
Success

試してみる

アプリが追加されているのでアイコンをタップして起動します。

カメラが起動している状態になるので、その画面をとおして何かを表示します。そうすると、アプリがそれが何なのかを青い部分に名称を表示します。

これは、事前にいくつかの画像を学習して、いままでみたことない画像でも学習した内容からアプリが推測しているのです。

とはいえ、あまりにもいままで学習した内容からかけ離れているとうまく表示されないようですね。

学習している内容は以下にまとめてあります。

https://github.com/tensorflow/tensorflow/blob/master/tensorflow/examples/android/assets/imagenet_comp_graph_label_strings.txt

なるべく特徴のあるのが認識されやすいみたいです。ふぐ(puffer)は見事に認識しました!

IMG_1288

まとめ

今回はアプリを動かすまでで終わってしまいましたが、機会があれば中の処理もおっていきたいと思います。

実際のサービスで使われている技術が、こうして手軽に使えるのは非常にうれしいですね。これでどんなアプリをつくろうか考えるとわくわくします。

この記事を読んでギルドワークスに興味を持たれた方はお気軽に【ギルドワークスに依頼する】をご覧の上、お問合せください。

TensorFlowをアプリで使ってみる」への1件のフィードバック

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中