肉体言語 Tython

41
. . . . . . 肉体言語 Tython Wataru MIYAGUNI 2011-05-13 Fri

description

社内勉強会にて発表した「肉体言語 Tython」の資料です。 Kinect を使ったプログラミング言語を作りました。 https://github.com/gongo/Tython

Transcript of 肉体言語 Tython

Page 1: 肉体言語 Tython

. . . . . .

肉体言語 TythonWataru MIYAGUNI

2011-05-13 Fri

Page 2: 肉体言語 Tython

. . . . . .

Outline

Introduction

Tython Structure

Tython Test Environment

Conclusion

Page 3: 肉体言語 Tython

. . . . . .

Introduction

Tythonの紹介します

Page 4: 肉体言語 Tython

. . . . . .

What ?

Body.... Muscle Language

Page 5: 肉体言語 Tython

. . . . . .

Muscle Language

拳や脚など己の肉体を利用し、痛みを伴った意思疎通を図る非言語コミュニケーションである。一般に、両者が対等の立場であれば「 -で語り合う」、両者に差があれば「 -で教える」という文脈で用いられる。

• 肉体言語 -アンサイクロペディア

Page 6: 肉体言語 Tython

. . . . . .

Example

悪魔らしいやり方で、話を聞いてもらう (実際のセリフ)

Page 7: 肉体言語 Tython

. . . . . .

Tython is …

• Interface• Not use keyboard• Not use mouse• Use own body ! muscle !

• Programming Style• Exercise• No experience welcome !

Page 8: 肉体言語 Tython

. . . . . .

Demo

YouTube -肉体言語 Tython「Hello, World!」

Page 9: 肉体言語 Tython

. . . . . .

’Hello, World’ source code左ジャブ左ジャブ左ジャブ左ジャブ右ストレート右ストレート右ストレート右ストレート左ジャブ右アッパー左ジャブ左ジャブ左ジャブ左ジャブ左ジャブ右ストレート右ストレート左ジャブ右ストレート右ストレート右アッパー左ジャブ左ジャブ左ジャブ左ジャブ左ジャブ右ストレート左ジャブ左ジャブ右ストレート右ストレート右アッパー左ジャブ左ジャブ左ジャブ左ジャブ左ジャブ左ジャブ右ストレート右ストレート左ジャブ右ストレート右アッパー左ジャブ左ジャブ左ジャブ左ジャブ左ジャブ右ストレート左ジャブ左ジャブ左ジャブ左ジャブ右アッパー左ジャブ左ジャブ左ジャブ左ジャブ右ストレート左ジャブ右ストレート左ジャブ左ジャブ左ジャブ右アッパー左ジャブ左ジャブ左ジャブ左ジャブ右ストレート右ストレート右ストレート右ストレート右ストレート右アッパー左ジャブ左ジャブ左ジャブ左ジャブ右ストレート左ジャブ左ジャブ右ストレート右ストレート右アッパー左ジャブ左ジャブ左ジャブ左ジャブ左ジャブ右ストレート左ジャブ左ジャブ左ジャブ左ジャブ右アッパー左ジャブ左ジャブ左ジャブ左ジャブ左ジャブ右ストレート左ジャブ左ジャブ右ストレート右ストレート右アッパー左ジャブ左ジャブ左ジャブ左ジャブ左ジャブ右ストレート左ジャブ左ジャブ右ストレート右ストレート右アッパー左ジャブ左ジャブ左ジャブ左ジャブ左ジャブ右ストレート右ストレート左ジャブ右ストレート左ジャブ右アッパー左ジャブ左ジャブ左ジャブ左ジャブ右ストレート右ストレート左ジャブ右ストレート右ストレート右ストレート右アッパー右ストレート左フック左ジャブ左ジャブ右ストレート左フック左ジャブ左ジャブ右ストレート左フック左ジャブ左ジャブ右ストレート左フック左ジャブ左ジャブ右ストレート左フック左ジャブ左ジャブ右ストレート左フック左ジャブ左ジャブ右ストレート左フック左ジャブ左ジャブ右ストレート左フック左ジャブ左ジャブ右ストレート左フック左ジャブ左ジャブ右ストレート左フック左ジャブ左ジャブ右ストレート左フック左ジャブ左ジャブ右ストレート左フック左ジャブ左ジャブ右ストレート左フック左ジャブ左ジャブ

Page 10: 肉体言語 Tython

. . . . . .

Number of typing

191 shots

Page 11: 肉体言語 Tython

. . . . . .

Takes for success

90 minutes

Page 12: 肉体言語 Tython

. . . . . .

Impression

Exercise!!• 腕が上がらない• 踏み込んだ足がしびれる• 流れる汗

Page 13: 肉体言語 Tython

. . . . . .

License

MAHALO License (based on MIT License)Copyright (c) 2011 Wataru MIYAGUNI以下に定める条件に従い、本ソフトウェアおよび関連文書のファイル(以下「ソフトウェア」)の複製を取得するすべての人に対し、ソフトウェアを無制限に扱うことを無償で許可します。(中略)

• 上記の著作権表示および本許諾表示を、ソフトウェアのすべての複製または重要な部分に記載するものとします。

• ソフトウェアを使用する際、(ソフトウェアに限らず)何かに対して「感謝」をすることとします。

以下省略. (全文https://github.com/gongo/Tython/raw/development/LICENSE )

Page 14: 肉体言語 Tython

. . . . . .

Tython Structure

Tythonの大まかな構造を紹介します

Page 15: 肉体言語 Tython

. . . . . .

Structure diagram

������������

�������������

����������� ��

Page 16: 肉体言語 Tython

. . . . . .

Tython Detector

• Kinectと密接につながってる• 数学大事

Page 17: 肉体言語 Tython

. . . . . .

Detectorの前に Vector

!"a ·!"b = |!"a ||

!"b | cos !

... cos ! =!"a ·

!"b

|!"a ||!"b |

!"a ·!"b = x1x2 + y1y2 + z1z2

|!"a | =!

x12 + y12 + z12

Page 18: 肉体言語 Tython

. . . . . .

PoseDetector

プレイヤーのポーズを検知• Kinectから体の各関節 (右手首、右肘、左肩、首など)の xyz座標が取得できる

• 予め指定したポーズ (腕の角度、頭の座標など)を満たせばDetect

Page 19: 肉体言語 Tython

. . . . . .

Tythoh PoseDetector SampleTython / src / Detector / OwataPoseDetector.cc

Page 20: 肉体言語 Tython

. . . . . .

CommandDetector

プレイヤーの動きを検知• 正確には、PoseDetectorの組み合わせ

• 「右腕を伸ばしてる」->「右腕を閉じている」といった感じ• すべてのポーズを制限時間内に通せば Detect

Page 21: 肉体言語 Tython

. . . . . .

Tython CommandDetector SampleTython / src / Detector / LeftJabCommandDetector.cc

Page 22: 肉体言語 Tython

. . . . . .

InputMethod

「Detectorを検知したら入力する文字」の対応表

Detector Command input stringLeftJab 左ジャブ “a”RightStraight 右ストレート “@”RightUpper 右アッパー “g”LeftHook 左フック “ “

入力を終了する Detectorもセットできる

Detector CommandThanks 十字礼

Page 23: 肉体言語 Tython

. . . . . .

InputMethod Sample

Tython / src / InputMethod / DefaultInputMethod.cc

Page 24: 肉体言語 Tython

. . . . . .

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と同様

Page 25: 肉体言語 Tython

. . . . . .

Source Code Reading

https://github.com/gongo/Tython/tree/development

Page 26: 肉体言語 Tython

. . . . . .

Future (Other Language)

.NET Frameworkに対応している言語であれば

Page 27: 肉体言語 Tython

. . . . . .

IronPython + Tython = ?

IronTython

Page 28: 肉体言語 Tython

. . . . . .

Future (LocusDetector)

軌跡検知

Page 29: 肉体言語 Tython

. . . . . .

LocusDetector Example

Page 30: 肉体言語 Tython

. . . . . .

Future (Partner)

二人(複数人)プレイ

Page 31: 肉体言語 Tython

. . . . . .

Partner Example

Page 32: 肉体言語 Tython

. . . . . .

Tython Test Environment

Tythonで使用しているテスト環境を紹介します

Page 33: 肉体言語 Tython

. . . . . .

Using Testing Framework

• GoogleTest• Google C++ Testing Framework

http://code.google.com/p/googletest/• Google Testドキュメント日本語訳

http://opencv.jp/googletestdocs/

Page 34: 肉体言語 Tython

. . . . . .

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)); //鈍角

}

Page 35: 肉体言語 Tython

. . . . . .

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());

Page 36: 肉体言語 Tython

. . . . . .

Problem about testing

例えば…

..1 PoseDetectorのテストをしたい• ユーザの骨格座標情報が欲しい• つまりハードウェア (Kinect)依存

..2 CommandDetectorのテストをしたい• 制限時間オーバーしたら hogehogeみたいなテスト• sleep()使えばいいんでしょ?• つまり待ち時間が発生

• 1,2秒でモチベーション変わる• Kinectの立ち上がりが異様に遅い (30秒ぐらい)

• テストの度にそれは待てない

Page 37: 肉体言語 Tython

. . . . . .

そんな時のための

GoogleMock

• Google C++ Mocking Frameworkhttp://code.google.com/p/googlemock/

• Google Mockドキュメント日本語訳http://opencv.jp/googlemockdocs/

Page 38: 肉体言語 Tython

. . . . . .

How?

• 時間計測用モックを使った例Tython / test / CommandDetectorTest.cc

• ユーザモックを使った例Tython / test / LeftJabCommandDetectorTest.cc

Page 39: 肉体言語 Tython

. . . . . .

Coverage

http://gongo.github.com/hago/30_tython_coverage/index.html

Page 40: 肉体言語 Tython

. . . . . .

Conclusion

• Kinect安いのにこんなに遊べる!• 他社モーションキャプチャだと、うん百万うん千万• ×安かろう悪かろう◯安いし良い!

• 数学はこういう時に必要• 過去:微分?内積?なにそれ美味しいの• 現在:\ (^o^)/

• TDDいい感じ• Kinectなくてもテストできる!• 緑色嬉しいです

Page 41: 肉体言語 Tython

. . . . . .

Finish!!

提供 日本 GKD協会(Gongo Kinect Diet)