頭と尻尾はくれてやる!

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


3Dのボーン付き人体モデルをSceneKitで使う

人体のボーン付きモデルをSceneKitにimportする方法を模索中で、ひとまずいけそうな方法が見つかったので忘れないようにメモ。


1. MakeHumanでモデル作成
2. daeで出力する時にデフォではなく”Z up, face -Y”を選ぶ(daeファイルとtexturesというフォルダが出力される)↓

MakeHumanでdae出力

3. Blenderでそのdaeファイルをimport
4. Blenderでテクスチャ設定↓

Blenderでテクスチャ設定

5. Blenderでdae出力(daeファイルとテクスチャ画像が出力される)
6. Xcodeにインポート(SceneEditorでは特にやることないはず)↓

SceneEditor

SceneKitで表示

↑iPhone上で実行。spine3をz軸周りに30度回転させてる。

とりあえずこれなら人体の身長がy軸方向、顔がz軸方向を向いてくれるし、ボーンの姿勢もコントロールできそうな感じ。
MakeHumanで作成したdaeを直でSceneKitで使おうとするとオブジェクトの姿勢が理解不能だったりしたので仕方なくBlenderかましてる。
BlenderのアドオンでManuelBastioniLABってのがあるけど、こちらで作ったモデルでdae出力でXcode側に持ってくるのも試してみたけど色々とうまくいかなかった。


macOS Sierra 10.12.4
iOS 10.3.1
Xcode 8.3.1
MakeHuman 1.1.0
Blender 2.78a
ManuelBastioniLAB version 1.4.0a


機械学習(TensorFlow)で位置計測っぽいことをやってみた

データセットの元画像

↑ランダムな位置にランダム径の円を描いた64x64サイズのグレースケール画像とそのデータを持つデータセットを作成(訓練用10,000、評価用1,000枚)。


NNの構成はTensorFlowのチュートリアルにあるcifar-10と同じような感じ。各層を順に書くと
畳み込み
プーリング
LRN
畳み込み
LRN
プーリング
全結合
ドロップアウト
全結合
出力
という具合。今回のはカラーじゃないとか、出力層は半径、x座標、y座標の3個しかなかったり、といった違いはある。
損失関数は単になんのひねりもないけど各値の差の絶対値の和。

学習の推移1

↑約1時間半くらいかけて15エポック(3,000step)回した。

予測の結果1

↑いくつかの評価用元画像から予測した円を赤線で描いてる。うーん、、、精度が微妙。

学習の推移2

↑えーい、とさらに30エポック。TensorBoardが続きに書いてくれないのは損失関数のところnameを付加したからかな?

予測の結果2

↑まあちょっとはマシになったかも?
顔を見分けるというのを試した時の精度がすごく良かったので、今回の結果は精度的には残念な感じはする。
NNの構成とかハイパーパラメータいじったりで改善の余地は色々あるんでしょう、多分。
これ以上やんないけど。

とりあえず、MNISTやCifar-10みたいに正解のクラスを1つ選ぶとかじゃなくて、出力層で正解の値を得るように学習する、ということができそうということはわかった。


Apple RenewプログラムでiPadにさよなら

ずっと使っていたiPad(第三世代)は最新のiOS(10)が乗らなくなっていたので、次に出たら買い換えようかなと思ってたところ3月末にマイナーチェンジしたiPadが登場したので購入。チップがiPhone 6s相当のA9というのが微妙と思ったけど、その分安いしね。まあ用途から考えればOKかなと。
使い始めてまだ10日くらいだけど、特に問題もなし。

ところで古いiPadの方はというともう使うこともないので今回初めて Apple Renewプログラムなるものを使ってみたのよ。
再利用とリサイクル - Apple(日本)

Apple Renew プログラム 見積もり

↑サイトでのとりあえずの見積もりは(最大)4,500円とのこと。現金ではなくApple Storeで使えるギフトカードをくれるらしい。
状態なんかは自己申告だからどうなのかなあという感じ。

まあいいや、と申し込んでみたところ、数日後にダンボールが到着。

iPadを段ボール箱に入れる

↑その箱にぴっかぴかにしてやったiPadを入れて返送。

翌日にはメールで査定結果がやってきて満額回答の4,500円だった。

Apple Storeギフトカード

↑さらに数日後に再度メールでギフトカードが送られてきたんだけど、、、今度使う時までメールのままか印刷して持っておくのかな?Walletに追加なんてのもできるみたいだけどちょっと使い方がよくわからん?Apple Storeアプリで読み込んでApple IDに紐付けとかしてくれたら便利なのにな。

ともかく下取りの手順自体は超絶楽チンでした。


ちなみにiPad(第三世代)はiPadでは初のRetinaだったかな?発表時には「新しいiPad」って言われたんだわ。予約開始時に注文したんだけど、半年後にケーブルがライトニングになっただけの後継機種が出てすぐに型落ちになってしまった、というなんとも残念なやつでしたがまる5年間よく動いてくれました。


画面をスワイプして視線を変える時の方向

マインクラフトPE

画面をスワイプすると視線(カメラの向き)が変わる類の3Dゲームってどのように視線が動くのが自然なのかな?と思いいくつかのiOSアプリで調べてみた(いざ頭の中でどうだっけ?と思ってもわからんかったのよ)。

マインクラフトPE
World of Tank
Goat Simulator

これらのアプリ全て画面をスワイプすると、視線がスワイプ方向へ移動した。つまり右方向へスワイプするとカメラが右方向へ回転する(風景は左側へ流れる)、という具合。

どれもスワイプでカメラの回転をコントロールしてるって感じで納得。

なお、マイクラとGoat Simulatorではy軸方向(縦方向ね)のみ反転させるオプションが付いてたから、上方向へスワイプするとカメラが下を向いて欲しい!という層がいるってことなんだろうかね?


Blenderでdaeファイル出力→SceneKitへ

Blenderで作成したオブジェクト(ボーン&アニメーション付き)をdaeで出力して、それをSceneKitで使う時のメモ。

まずBlenderでの注意事項。

オブジェクトとボーンの親子関係を作る時に、オブジェクトとボーンを選択してcontrol+pするとできるけど、オブジェクト→ボーンの順に選択する。逆だとできない。

ポーズモードで回転させたオブジェクトを元に戻すのは option + r

【Blender】ボーンを動かしてアニメーションを作成する | ユガラボ
↑すごく参考になったページ

daeファイルを出力する時には対象を選択しといて
Selection Only
Include Children
Include Armatures
にチェックを入れる。

Blenderでdae出力時の設定


次にXcode。

Xcodeにインポートしたdaeファイルを見るとやっぱりx軸周りに90度回転してる。なのでシーンへの追加はコードでやる方が精神的にはいい(俺の場合は、だけど)。

ともかくこの流れでアニメーション付きオブジェクトをインポートするとXcodeのScene Editorの右側にある”Animations”のところ(下図の赤い丸のとこね)に項目が表示されてる。多分Blenderで設定したアニメーションっぽい。

XcodeのScene Editor

上図の青矢印のところのボタンを押すとアニメーションが設定できる(コードならSCNActionに相当するんかな)けど、その場合は”Animations”のところには何も表示されないからどうなってんの?と思ってた。
ただここで表示される名前はBlenderで設定したアニメーション名とは違うけど(ボーンとオブジェクトの名前はBlenderで設定したまま来てる)。

なお、SCNNodeクラスのboneオブジェクトに対し、
for (NSString *key in bone.animationKeys) {
// [bone pauseAnimationForKey:key];//止める
[bone setSpeed:10.0 forAnimationKey:key];//speed変更
}
みたいにすればそのボーンに設定されたアニメーションを止めたり、speed(って何だ?リファレンスにも書いてねえ!)の変更なんかもできた。


↑SceneKitに持ってきた時の結果。

ある程度のアニメーションをBlenderで作っておいて、動かす・止めるタイミングや微調整はコード側でもできそうだな。




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

FC2Ad