まずは、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からソースコードをダウンロードします。
ソースを置いた場所に移動してから、シェルスクリプトを実行して、必要な依存ライブラリを取得します。
cd tensorflow-master
tensorflow/contrib/makefile/download_dependencies.sh
protobufをインストール
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 の下にあります)
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行目までを全てコメントアウトします。
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行目を削除し(コメントアウトではなく!)、上記のコードと同じにします。
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
を修正します。
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行目までをコメントアウトする。
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用のビルドを開始します。
cd ../../../../..
tensorflow/contrib/makefile/compile_ios_protobuf.sh
最後に以下のコマンドを実行します。
tensorflow/contrib/makefile/compile_ios_tensorflow.sh
実機で動かしてみる
用意されているサンプルは二つです。
tensorflow/contrib/ios_examples
にあります。
cameraアプリ: カメラに写っているものが何なのか判断しています。
simpleアプリ: アプリの中に入っている画像がどんな画像か判断しています。(写真変更は、アプリからは不可)
両方とも、inception v1のデータをダウンロードし、アプリに追加する必要があります。data
フォルダの配下におきます。
ちなみに、Pepperのうなだれている格好は"Hand Blower"として認識されました。
Hand Blowerとは、こんなものでした。似ているような。似ていないような。
このおじさんがどのように判断されたかというと...
47% military uniform
12% mortarboard
10% academic gown
でした。