新年明けましておめでとうございます。
とりあえず、2012 新年の目標からこのブログをスタートしたいと思います!
仕事を頑張るのはもちろんのことなので、
プライベートの目標で。
プライベートワークをしっかりやる
- ・今やってる(1つはこれからやる予定の)個人プロジェクトをどんどん制作・更新していく
- ・iPhone or iPad アプリを合計で3つはリリースする!!
プログラミング・その他技術などのレベルアップ
- ・openGL / C++ / oblective-c などのC言語関連の知識の向上
- ・コンピュータビジョンの勉強
- ・電子工作も引き続き遊びながら覚えていきたい
数学知識の向上
- ・プログラムの勉強をしていく中で数学の勉強も
- ・ゲーム制作のための数学・物理本を参考にして勉強
英語の習得
- ・webページの一日一日の課程をやっていく
- ・twitterを利用して覚えていく
その他もろもろ
- ・ダイエット! -10kgくらい!
- ・本をたくさん読む
しっかりとした基板を作れるように、勉強する時間をもっとしっかり作って、成長できる一年にする。
やりたい事がいっぱいあるので、少しづつ確実にやっていけるように。目標を明確に持つように。
と、自分に言い聞かせて有意義に生活していきます。
今年も一年よろしくお願いします。
あと、去年参加した
iOS Advent calendarが電子書籍になるみたいで、自分の記事も載せていただけるみたいです。
参加できて良かった!
今年もがんばるぞー!
openFrameworksでJuliusを使ったときのメモ。
Juliusをmacで使う方法は以下のサイトを参考にさせていただきました。
・http://d.hatena.ne.jp/kazekyo/20100821/1282406366
・http://d.hatena.ne.jp/foldrr/20111009/p1
openFrameworksの設定
addonsExamplesの中にある networkTcpClientExample をベースにして、
//testApp.cpp
weConnected = tcpClient.setup("localhost", 10500);
testApp.cppの上の部分の行をこういうふうに変更。
ビルドして.appを起動。
Juliusの設定
Juliusはターミナルからモジュールモードで起動してあげる。
手順
1. dictation-kit-v4.1.tar.gz をjuliusのサイトからダウンロードして解凍。 Linux版でもWindows版でもどっちでもいいっぽいです。
2. ターミナルで以下のコマンドを実行してdictation-kit-v4.1のディレクトリに移動。
cd dictation-kit-v4.1
3. 最後にターミナルで以下のコマンドを実行してモジュールモードで起動。
julius -C fast.jconf -charconv EUC-JP UTF-8 -module
この状態でマイクのついているマシンで適当に話しかけると、
こんな感じのXML形式の文字列をopenFrameworks側で取得できる
<RECOGOUT> <SHYPO RANK="1" SCORE="-3304.690674">
<WHYPO WORD="" CLASSID="<s>" PHONE="silB" CM="0.701"/>
<WHYPO WORD="こんにちは" CLASSID="こんにちは:コンニチワ:こんにちは:3" PHONE="k o N n i ch i w a" CM="0.288"/>
<WHYPO WORD="。" CLASSID="。:。:。:8" PHONE="sp" CM="0.574"/>
<WHYPO WORD="" CLASSID="</s>" PHONE="silE" CM="1.000"/>
</SHYPO>
</RECOGOUT>
取得しているのは一行づつみたいなので、必要な行の必要な部分だけ取り出してあげればオッケーでした。
他にもっといい方法あるかと思いますが、とりあえず簡単にできたので。
openFrameworksでスケルトントラッキングしてキャラクターを動かそうとしたら、
各部位の座標の取得でハマりました。いい情報が見つからなかったのでメモ。
ofxOpenNIのサンプルをgithubからダウンロードして使ってます。
各部位の座標を取得
なんか無理矢理な気がするのできっと他にいい方法があるはず。。
顔の座標の取得は
recordUser.tracked_users[0]->neck.position[0].X
recordUser.tracked_users[0]->neck.position[0].Y
または
recordUser.tracked_users[0]->neck.position[1].X
recordUser.tracked_users[0]->neck.position[1].Y
でいけました。
顔と首の付け根の部分の座標が取れたので角度計算してあげれば首まげたりできた。
その他の部位は
//顔(首)
recordUser.tracked_users[0]->neck.position
//左肩、左ひじ、左手
recordUser.tracked_users[0]->left_shoulder.position
recordUser.tracked_users[0]->left_upper_arm.position
recordUser.tracked_users[0]->left_lower_arm.position
//右肩、右ひじ、右手
recordUser.tracked_users[0]->right_shoulder.position
recordUser.tracked_users[0]->right_upper_arm.position
recordUser.tracked_users[0]->right_lower_arm.position
//左肩とおなかの真ん中
recordUser.tracked_users[0]->left_upper_torso.position
//右肩とおなかの真ん中
recordUser.tracked_users[0]->right_upper_torso.position
//左足の関節のつけね、左ひざ、左足
recordUser.tracked_users[0]->left_lower_torso.position
recordUser.tracked_users[0]->left_upper_leg.position
recordUser.tracked_users[0]->left_lower_leg.position
//右足の関節のつけね、右ひざ、右足
recordUser.tracked_users[0]->right_lower_torso.position
recordUser.tracked_users[0]->right_upper_leg.position
recordUser.tracked_users[0]->right_lower_leg.position
//おしり(左右の足の間接のつけね)
hip.debugDraw();
でいけました。
手とか足とか回転させる場合は基本的にどの部分もposition[0]とposition[1]で角度計算してあげればいける。
角度とかも中で計算してくれてて値取れるのかな。。 わかりません。
認識しているかどうか
認識しているかどうかを管理したいときに
recordUser.getNumberOfTrackedUsers();
でユーザーの感知はできるけど、ボーンを認識していなくても反応してしまう。
ボーンを認識されているかどうかで処理をわけたいときは
recordUser.tracked_users[0]->neck.found
とかのどっかの部位が見つかったかどうかを調べることで、スケルトントラッキングできているか判別できました。
足とかだと隠れちゃう可能性もあるので、首にしとけば無難だと思います。 無理やりですが。。
部位の座標の取得とか無理矢理な気がするので、いい方法あったら教えてください。
参考
• https://github.com/gameoverhack/ofxOpenNI