肉体言語 Tython
-
Upload
wataru-miyaguni -
Category
Technology
-
view
15.699 -
download
4
description
Transcript of 肉体言語 Tython
. . . . . .
肉体言語 TythonWataru MIYAGUNI
2011-05-13 Fri
. . . . . .
Outline
Introduction
Tython Structure
Tython Test Environment
Conclusion
. . . . . .
Introduction
Tythonの紹介します
. . . . . .
What ?
Body.... Muscle Language
. . . . . .
Muscle Language
拳や脚など己の肉体を利用し、痛みを伴った意思疎通を図る非言語コミュニケーションである。一般に、両者が対等の立場であれば「 -で語り合う」、両者に差があれば「 -で教える」という文脈で用いられる。
• 肉体言語 -アンサイクロペディア
. . . . . .
Example
悪魔らしいやり方で、話を聞いてもらう (実際のセリフ)
. . . . . .
Tython is …
• Interface• Not use keyboard• Not use mouse• Use own body ! muscle !
• Programming Style• Exercise• No experience welcome !
. . . . . .
’Hello, World’ source code左ジャブ左ジャブ左ジャブ左ジャブ右ストレート右ストレート右ストレート右ストレート左ジャブ右アッパー左ジャブ左ジャブ左ジャブ左ジャブ左ジャブ右ストレート右ストレート左ジャブ右ストレート右ストレート右アッパー左ジャブ左ジャブ左ジャブ左ジャブ左ジャブ右ストレート左ジャブ左ジャブ右ストレート右ストレート右アッパー左ジャブ左ジャブ左ジャブ左ジャブ左ジャブ左ジャブ右ストレート右ストレート左ジャブ右ストレート右アッパー左ジャブ左ジャブ左ジャブ左ジャブ左ジャブ右ストレート左ジャブ左ジャブ左ジャブ左ジャブ右アッパー左ジャブ左ジャブ左ジャブ左ジャブ右ストレート左ジャブ右ストレート左ジャブ左ジャブ左ジャブ右アッパー左ジャブ左ジャブ左ジャブ左ジャブ右ストレート右ストレート右ストレート右ストレート右ストレート右アッパー左ジャブ左ジャブ左ジャブ左ジャブ右ストレート左ジャブ左ジャブ右ストレート右ストレート右アッパー左ジャブ左ジャブ左ジャブ左ジャブ左ジャブ右ストレート左ジャブ左ジャブ左ジャブ左ジャブ右アッパー左ジャブ左ジャブ左ジャブ左ジャブ左ジャブ右ストレート左ジャブ左ジャブ右ストレート右ストレート右アッパー左ジャブ左ジャブ左ジャブ左ジャブ左ジャブ右ストレート左ジャブ左ジャブ右ストレート右ストレート右アッパー左ジャブ左ジャブ左ジャブ左ジャブ左ジャブ右ストレート右ストレート左ジャブ右ストレート左ジャブ右アッパー左ジャブ左ジャブ左ジャブ左ジャブ右ストレート右ストレート左ジャブ右ストレート右ストレート右ストレート右アッパー右ストレート左フック左ジャブ左ジャブ右ストレート左フック左ジャブ左ジャブ右ストレート左フック左ジャブ左ジャブ右ストレート左フック左ジャブ左ジャブ右ストレート左フック左ジャブ左ジャブ右ストレート左フック左ジャブ左ジャブ右ストレート左フック左ジャブ左ジャブ右ストレート左フック左ジャブ左ジャブ右ストレート左フック左ジャブ左ジャブ右ストレート左フック左ジャブ左ジャブ右ストレート左フック左ジャブ左ジャブ右ストレート左フック左ジャブ左ジャブ右ストレート左フック左ジャブ左ジャブ
. . . . . .
Number of typing
191 shots
. . . . . .
Takes for success
90 minutes
. . . . . .
Impression
Exercise!!• 腕が上がらない• 踏み込んだ足がしびれる• 流れる汗
. . . . . .
License
MAHALO License (based on MIT License)Copyright (c) 2011 Wataru MIYAGUNI以下に定める条件に従い、本ソフトウェアおよび関連文書のファイル(以下「ソフトウェア」)の複製を取得するすべての人に対し、ソフトウェアを無制限に扱うことを無償で許可します。(中略)
• 上記の著作権表示および本許諾表示を、ソフトウェアのすべての複製または重要な部分に記載するものとします。
• ソフトウェアを使用する際、(ソフトウェアに限らず)何かに対して「感謝」をすることとします。
以下省略. (全文https://github.com/gongo/Tython/raw/development/LICENSE )
. . . . . .
Tython Structure
Tythonの大まかな構造を紹介します
. . . . . .
Structure diagram
�
�
������������
�������������
����������� ��
. . . . . .
Tython Detector
• Kinectと密接につながってる• 数学大事
. . . . . .
Detectorの前に Vector
�
!"a ·!"b = |!"a ||
!"b | cos !
... cos ! =!"a ·
!"b
|!"a ||!"b |
!"a ·!"b = x1x2 + y1y2 + z1z2
|!"a | =!
x12 + y12 + z12
. . . . . .
PoseDetector
プレイヤーのポーズを検知• Kinectから体の各関節 (右手首、右肘、左肩、首など)の xyz座標が取得できる
• 予め指定したポーズ (腕の角度、頭の座標など)を満たせばDetect
. . . . . .
Tythoh PoseDetector SampleTython / src / Detector / OwataPoseDetector.cc
. . . . . .
CommandDetector
プレイヤーの動きを検知• 正確には、PoseDetectorの組み合わせ
• 「右腕を伸ばしてる」->「右腕を閉じている」といった感じ• すべてのポーズを制限時間内に通せば Detect
. . . . . .
Tython CommandDetector SampleTython / src / Detector / LeftJabCommandDetector.cc
. . . . . .
InputMethod
「Detectorを検知したら入力する文字」の対応表
Detector Command input stringLeftJab 左ジャブ “a”RightStraight 右ストレート “@”RightUpper 右アッパー “g”LeftHook 左フック “ “
入力を終了する Detectorもセットできる
Detector CommandThanks 十字礼
. . . . . .
InputMethod Sample
Tython / src / InputMethod / DefaultInputMethod.cc
. . . . . .
Others (Like Typhon)
• Compiler
• 暴風型言語 Typhonと同じく、中間言語方式を採用Typhon Middle language explainaa#{NUM}g pushNUM add to stacka@a#{NUM}g copyNUM copy stack value以下省略 .. ..
• 標準入力も Typhonと同じ感じstring binary decimalaa@a@ +0101 5@@a@a -1010 -10
• VM (Virtual Machine)命令も Typhonと同様
. . . . . .
Source Code Reading
https://github.com/gongo/Tython/tree/development
. . . . . .
Future (Other Language)
.NET Frameworkに対応している言語であれば
. . . . . .
IronPython + Tython = ?
IronTython
. . . . . .
Future (LocusDetector)
軌跡検知
. . . . . .
LocusDetector Example
. . . . . .
Future (Partner)
二人(複数人)プレイ
. . . . . .
Partner Example
. . . . . .
Tython Test Environment
Tythonで使用しているテスト環境を紹介します
. . . . . .
Using Testing Framework
• GoogleTest• Google C++ Testing Framework
http://code.google.com/p/googletest/• Google Testドキュメント日本語訳
http://opencv.jp/googletestdocs/
. . . . . .
GoogleTest Sample 1おなじみの ASSERT
TEST_F(VectorTest, TestDot) {Vector vec1(3.0f, 0.0f, 0.0f);Vector vec2(0.0f, 1.0f, 0.0f);Vector vec3(1.0f, 1.0f, 1.0f);Vector vec4(-12.0f, 0.0f, 0.0f);
ASSERT_EQ( 1.0f, vec1.dot(vec1)); //平行 (同方向)ASSERT_EQ( 0.0f, vec1.dot(vec2)); //直行ASSERT_LT( 0.0f, vec1.dot(vec3)); //鋭角ASSERT_EQ(-1.0f, vec1.dot(vec4)); //平行 (逆方向)ASSERT_GT( 0.0f, vec3.dot(vec4)); //鈍角
}
. . . . . .
GoogleTest Sample 2
標準出力のテストもできる!
/***以下の処理をテスト* 1. push 7 #=> aaaaaag* 2. push 2 #=> aaa@a@g* 3. add #=> @aaa stack topに 2+7 = 9が入る* 4. num_out #=> @ a@ stack topが標準出力される*/insns = compiler->compile("aaaaaagaaa@a@g@aaa@ a@");testing::internal::CaptureStdout();object->run(insns);ASSERT_STREQ("9", testing::internal::GetCapturedStdout().c_str());
. . . . . .
Problem about testing
例えば…
..1 PoseDetectorのテストをしたい• ユーザの骨格座標情報が欲しい• つまりハードウェア (Kinect)依存
..2 CommandDetectorのテストをしたい• 制限時間オーバーしたら hogehogeみたいなテスト• sleep()使えばいいんでしょ?• つまり待ち時間が発生
• 1,2秒でモチベーション変わる• Kinectの立ち上がりが異様に遅い (30秒ぐらい)
• テストの度にそれは待てない
. . . . . .
そんな時のための
GoogleMock
• Google C++ Mocking Frameworkhttp://code.google.com/p/googlemock/
• Google Mockドキュメント日本語訳http://opencv.jp/googlemockdocs/
. . . . . .
How?
• 時間計測用モックを使った例Tython / test / CommandDetectorTest.cc
• ユーザモックを使った例Tython / test / LeftJabCommandDetectorTest.cc
. . . . . .
Coverage
http://gongo.github.com/hago/30_tython_coverage/index.html
. . . . . .
Conclusion
• Kinect安いのにこんなに遊べる!• 他社モーションキャプチャだと、うん百万うん千万• ×安かろう悪かろう◯安いし良い!
• 数学はこういう時に必要• 過去:微分?内積?なにそれ美味しいの• 現在:\ (^o^)/
• TDDいい感じ• Kinectなくてもテストできる!• 緑色嬉しいです
. . . . . .
Finish!!
提供 日本 GKD協会(Gongo Kinect Diet)