頭と尻尾はくれてやる!

パソコンおやじのiPhoneアプリ・サイト作成・運営日記


TensorFlowを1.0にアップデート

TensorFlorが1.0になったとは聞いてたのでアップデートしてみた時のメモ。やってる俺が何やってるのかわかってないのできっとあなたの参考にはならない。
ちなみにアップデートする前のバージョンは0.12.1。tf.__version__ で確認できる。

Installing TensorFlow  |  TensorFlow
↑本家サイト。

とりあえず、Mac用、Pythonは3系、CPU版のが欲しいってのはわかってる。いろいろと方法が書いてるけどさて俺の場合どうやってインストールしたらいいのかよく分からない。

ターミナルで
pip3 -V 
とすると
pip 9.0.1 from /Users/hogehoge/.pyenv/versions/anaconda3-4.1.1/lib/python3.5/site-packages (python 3.5)
と出る。pyenv使ってanacondaでpython3をインストールしたんだよな、、、この場合にどうやってインストールすればいいんだ?ここでしばらく思考停止してたけど、仕方ないからpipでやることにした。

やったことは、、、
sudo pip3 uninstall tensorflow
でまずはアンインストール。

sudo pip3 install tensorflow
でインストール。とりあえずいけたっぽいので本家ページに Validate your installation ってのがあるのでその通りにチェック。
python起動してやっていく。

>>> import tensorflow as tf
>>> hello = tf.constant('Hello, TensorFlow!')
>>> sess = tf.Session()
W tensorflow/core/platform/cpu_feature_guard.cc:45] The TensorFlow library wasn't compiled to use SSE4.1 instructions, but these are available on your machine and could speed up CPU computations.
W tensorflow/core/platform/cpu_feature_guard.cc:45] The TensorFlow library wasn't compiled to use SSE4.2 instructions, but these are available on your machine and could speed up CPU computations.
W tensorflow/core/platform/cpu_feature_guard.cc:45] The TensorFlow library wasn't compiled to use AVX instructions, but these are available on your machine and could speed up CPU computations.
W tensorflow/core/platform/cpu_feature_guard.cc:45] The TensorFlow library wasn't compiled to use AVX2 instructions, but these are available on your machine and could speed up CPU computations.
W tensorflow/core/platform/cpu_feature_guard.cc:45] The TensorFlow library wasn't compiled to use FMA instructions, but these are available on your machine and could speed up CPU computations.
>>> print(sess.run(hello))
b'Hello, TensorFlow!'

うーむ、、、なんかごちゃごちゃ出てくる、、、やることやればもっと計算が早くなる?そんなのそっちでやっといてやと思うけどまあいいか。相変わらず最初にbって出てるけど、これなんなんだろ?

旧バージョンで動いてたサンプルコードのMNIST、畳み込みのあるDeep MNISTともに動いたわ。この二つに関しては特にコードを書き換える必要とかないみたい。


バージョン
macOS Sierra 10.12.3
Python 3.5.2 :: Anaconda 4.1.1 (x86_64)


iPhone実機だけSceneKitで背景をぼかせない

最近SceneKitをかじっているところでまだまだよくわからないところがいくつもあるんだけど、最大の謎について。誰かわかったら教えてください m(_ _)m

SceneKitではカメラのプロパティの Depth Of Field あたりを調整して一部分だけピントが合うような表現ができるはず。

Depth Of Fieldの設定

↑カメラのここを適当な値を設定すれば

XcodeのScene Editor

↑こんな感じで一部分(ここでは飛行機)にピントが合ってて他はぼける。この画像はXcodeの .scn ファイルで表示されるもの。

iOS シミュレータのスクショ

↑iOSシミュレータでもこのように一部分のみピントが合う(わかりにくい画像だけど)。

iPhone実機のスクショ

↑ところがiPhone 7+ 実機だとなぜか全体がぼけてしまう。

SCNNode *cameraNode = [scene.rootNode childNodeWithName:@"camera" recursively:YES];
cameraNode.camera.aperture = 0.1250;
cameraNode.camera.focalSize = 4.0;
cameraNode.camera.focalBlurRadius = 4.0;
cameraNode.camera.focalDistance = 36.0;

Xcodeの右側のペインではなくコードでやってもダメ。
allowsCameraControl プロパティをNOにしてもダメ。
SCNTransaction でアニメーション使ってもダメ。(positionは意図通り動くんだけど)

iOSシミュレータだとMetalではなくOpenGL ESだろうからそのあたりで違いが出てる?ってことはSceneKitフレームワークの不具合なのか?と思ってフォーラム見てもなんら関連する内容もない。うーん、謎だ。


バージョン
macOS Sierra 10.12.3
Xcode 8.2.1
iOS 10.2.1


MakeHumanのデータをSceneKitにdaeでインポートする

MakeHuman | Open source tool for making 3d characters
↑このMakeHumanで作ったデータをiOSのSceneKitで使おうとした時のメモ。

MakeHuman

↑MakeHumanでモデルや表情を適当に作る。歯や舌はデフォではオブジェクトとしてはないみたいで必要ならGeometriesのとこのTeethやTongueなどで指定しないとデータとして出力してくれないっぽい。

MakeHumanでdaeファイルをアウトプットする。
するとdaeファイルとtexturesってフォルダに入ったいくつかのテクスチャ画像ファイルが出力される。

daeファイルの中身を見ると画像ファイルの参照先があるのでそれを崩さないようにXcodeに持ってくる。

XcodeのScene Editor(っていうのかな)にdaeファイルを置いた後に各パーツごとにあるテクスチャ画像を設定していく。歯ならteeth.pngなんてのを歯のオブジェクトのdiffuseのとこにセットするという具合。



↑すると意図通りに表示された。

以上はうまくいった手順。以下はうまくいかなかった。

最初どのページを参考にしたのか、
MakeHumanでdaeファイル出力→Blenderでそれを使ってテクスチャを割り当ててdae出力→SceneKitで使用
という流れでやってたんだけど、試しにBlenderを使わずともいけることがわかった。

もう一つやってたのがBlenderで使える ManuelBastioniLAB ってライブラリ。

Blenderで作成

↑Blenderだとこんな感じでレンダリングしてくれるんだけど、、、
これをdae出力→SceneKitという流れもありそうなもんだけど、俺にはうまくできなかった。daeファイルの中身を見るとテクスチャは使ってないのか?マテリアルを細かく設定して表示させてる?謎だ。ともかくBlenderで見た質感を再現するのは挫折。

Scene Editor

↑さらにBlenderからXcodeに持ってくるとx軸周りに90度回転してScene Editorに表示されるという謎。でもアプリを実行すると意図通り回転せずに表示されてて、もうええわって感じ。



各バージョン
macOS Sierra 10.12.3
Xcode 8.2.1
iOS 10.2.1
MakeHuman 1.1.0
Blender 2.78a
ManuelBastioniLAB version 1.4.0a


音で操作するiPhone用VRアプリをリリース

久しぶりに新しいアプリを公開できた〜

VR CROSS ROAD
と言うVRゴーグルで楽しめるiOSアプリ。
iTunes Connectにアップしたスクショはこんなの↓

VR CROSS ROAD スクショ1

VR CROSS ROAD スクショ2

VR CROSS ROAD スクショ3

VR CROSS ROAD スクショ4

VR CROSS ROAD スクショ5

iPhoneでVRアプリを作るとどうしても操作できないので見るだけ、とかになってしまいがちなので音で操作するようにしてる。
手を叩くもよし、舌打ち(下品だけど一番ラク)でもよし。一定の音量以上を検知するとロボットが1レーン分歩く、という具合。


アプリは無料。アプリ内課金で「次のアプリの開発のためにコーヒーをおごってくれ!」って書いてみた。さすがにこれだけじゃまずかろうと思って「支払うとあるオブジェクトがアンロックされます」としてる。この辺りでリジェクトかもな?と思っていたけど無事審査を通過、いいのかAPPLE?


iOSアプリとMacのPythonでデータのやり取りをしたい

Networking Tutorial for iOS: How To Create A Socket Based iPhone App and Server
↑iOSアプリとMacのPythonでデータのやり取りをしたくて見つけたちょっと古いチュートリアル。これをやってみた時のメモ。

Downloads – Twisted
↑Twistedなるものを使う。公式ページにあるように pip install Twistedでインストール。
さらにエラー出たので pip install service_identity もした。

実行するにはsudoしないとダメらしい。sudo python ファイル名.py で。(Xcodeからsudoでできないのかな?)

osx - Python twisted reactor - address already in use - Stack Overflow
↑このエラーが出たので sudo apachectl stop したら a client connected が表示されるとこまではいけた。

ところが iam:hoge とかやっても data.split(':') のところでエラーが出る。
どうやらチュートリアルのPythonは2系らしく俺のが3.5なので、この辺りが原因とか?
def dataReceived(self, data):
decodeData = data.decode('utf-8')

def message(self, message):
message = message+ '\n'
encodeMessage = message.encode('utf-8')
みたいに2箇所ほど変更すればいけた。

この時点でターミナルのウインドウをいくつか開いてtelnetでつないだり、iOSシミュレータからつないだりはうまくいった。
iPhone実機でつなぐには接続先をMacのIPアドレス(Macのシステム環境設定 / ネットワークに書いてる)に指定する。
CFStreamCreatePairWithSocketToHost(NULL, (CFStringRef)@"192.168.xx.xx”, 80, &readStream, &writeStream);
てな感じ。


PS 相変わらずターミナルでPythonのプログラムの終わり方がよくわからん。control + z した後に
sudo lsof -i TCP:80 | grep LISTEN
してプロセスをkillしてる。めんどくさいにもほどがある。どうすればいいんだろ?


  TopPage  



Copyright ©頭と尻尾はくれてやる!. Powered by FC2 Blog. Template by eriraha.

FC2Ad