LoginSignup
6
8

More than 5 years have passed since last update.

TensorflowをiOSで試してみた その2

Last updated at Posted at 2016-10-25

まずは、Tensorflowで用意されているサンプルを動かしてみるところから始めたかったのですが。

ビルドの時に、OSのアップデートの関係の問題が起こっているようで(2016/10/13)、詰まってしまったので、うまくできた方法を記述します。

以下、参考にしたページ
Tensorflowのビルド
TensorFlowにiOSサポートが追加されたそうなので試してみた
Tensorflow iOS Examples

ビルドエラーの解決
Building TensorFlow for iOS failed on macOS Sierra and xCode 8.0 #4640
Temporary workaround for ios examples on macOS Sierra. Works on devic…

アプリをビルドする

まず、githubからソースコードをダウンロードします。

ソースを置いた場所に移動してから、シェルスクリプトを実行して、必要な依存ライブラリを取得します。

command
cd tensorflow-master
tensorflow/contrib/makefile/download_dependencies.sh

protobufをインストール

command
cd tensorflow/contrib/makefile/downloads/protobuf/
./autogen.sh
./configure
make
sudo make install

ここで、macOS sierra, Xcode8環境下でサンプルを動かしたい方は、
compile_ios_protobuf.sh
compile_ios_tensorflow.sh
に少し修正を加える必要があります。

まず、compile_ios_protobuf.shに修正を加えます。
(tensorflow/contrib/makefile の下にあります)

compile_ios_protobuf.sh
make -j ${JOBS_COUNT}
make install

#make distclean
#./configure \
#--build=x86_64-apple-${OSX_VERSION} \
#--host=x86_64-apple-${OSX_VERSION} \
#--disable-shared \
#--enable-cross-compile \
#--with-protoc="${PROTOC_PATH}" \
#--prefix=${LIBDIR}/iossim_x86_64 \
#--exec-prefix=${LIBDIR}/iossim_x86_64 \
#"CFLAGS=${CFLAGS} \
#-mios-simulator-version-min=${MIN_SDK_VERSION} \
#-arch x86_64 \
#-isysroot ${IPHONESIMULATOR_SYSROOT}" \
#"CXX=${CXX}" \
#"CXXFLAGS=${CXXFLAGS} \
#-mios-simulator-version-min=${MIN_SDK_VERSION} \
#-arch x86_64 \
#-isysroot \
#${IPHONESIMULATOR_SYSROOT}" \
#LDFLAGS="-arch x86_64 \
#-mios-simulator-version-min=${MIN_SDK_VERSION} \
#${LDFLAGS} \
#-L${IPHONESIMULATOR_SYSROOT}/usr/lib/ \
#-L${IPHONESIMULATOR_SYSROOT}/usr/lib/system" \
#"LIBS=${LIBS}"
#make -j ${JOBS_COUNT}
#make install

make distclean
./configure \

まず、上記のように、100行目から126行目までを全てコメントアウトします。

compile_ios_protobuf.sh
lipo \
${LIBDIR}/iossim_386/lib/libprotobuf.a \
${LIBDIR}/ios_arm7/lib/libprotobuf.a \
${LIBDIR}/ios_arm7s/lib/libprotobuf.a \
${LIBDIR}/ios_arm64/lib/libprotobuf.a \
-create \
-output ${LIBDIR}/libprotobuf.a

続いて、201行目を削除し(コメントアウトではなく!)、上記のコードと同じにします。

compile_ios_protobuf.sh
lipo \
${LIBDIR}/iossim_386/lib/libprotobuf-lite.a \
${LIBDIR}/ios_arm7/lib/libprotobuf-lite.a \
${LIBDIR}/ios_arm7s/lib/libprotobuf-lite.a \
${LIBDIR}/ios_arm64/lib/libprotobuf-lite.a \
-create \
-output ${LIBDIR}/libprotobuf-lite.a

最後に、210行目を削除し(コメントアウトではなく!)、上記と同じコードにします。

これで、compile_ios_protobuf.shの修正は終了です。
続いて、compile_ios_tensorflow.shを修正します。

compile_ios_tensorflow.sh
  exit 1
fi

#make -f tensorflow/contrib/makefile/Makefile \
#TARGET=IOS IOS_ARCH=X86_64 LIB_NAME=${LIB_PREFIX}-x86_64.a OPTFLAGS="$1" $2 $3
#if [ $? -ne 0 ]
#then
# echo "x86_64 compilation failed."
# exit 1
#fi

lipo \
${LIBDIR}/ios_ARMV7/${LIB_PREFIX}-armv7.a \

上記のように、75行目から81行目までをコメントアウトする。

compile_ios_tensorflow.sh
lipo \
${LIBDIR}/ios_ARMV7/${LIB_PREFIX}-armv7.a \
${LIBDIR}/ios_ARMV7S/${LIB_PREFIX}-armv7s.a \
${LIBDIR}/ios_ARM64/${LIB_PREFIX}-arm64.a \
${LIBDIR}/ios_I386/${LIB_PREFIX}-i386.a \
-create \
-output ${LIBDIR}/${LIB_PREFIX}.a

続いて、88行目を削除し、上記のコードになるようにします。

以上で修正は終了です。

iOS用のビルドを開始します。

command
cd ../../../../..
tensorflow/contrib/makefile/compile_ios_protobuf.sh

最後に以下のコマンドを実行します。

command
tensorflow/contrib/makefile/compile_ios_tensorflow.sh

実機で動かしてみる

用意されているサンプルは二つです。
tensorflow/contrib/ios_examplesにあります。
cameraアプリ: カメラに写っているものが何なのか判断しています。
simpleアプリ: アプリの中に入っている画像がどんな画像か判断しています。(写真変更は、アプリからは不可)

両方とも、inception v1のデータをダウンロードし、アプリに追加する必要があります。dataフォルダの配下におきます。

cameraアプリ動作
1.png

ちなみに、Pepperのうなだれている格好は"Hand Blower"として認識されました。
2.png

Hand Blowerとは、こんなものでした。似ているような。似ていないような。
3.jpeg

simpleアプリ動作
4.png

以下のおじさんの写真を見て、どんなものか判断しています。
5.png

このおじさんがどのように判断されたかというと...
47%  military uniform
12%  mortarboard
10%  academic gown
でした。

6
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
8