質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

Kinect

Kinect(キネクト)はマイクロソフトから発売されたジェスチャー・音声認識によって 操作ができるデバイスです。

Q&A

0回答

1904閲覧

Visual StudioにおけるKinectプログラミングについて

varmillion

総合スコア7

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

Kinect

Kinect(キネクト)はマイクロソフトから発売されたジェスチャー・音声認識によって 操作ができるデバイスです。

0グッド

0クリップ

投稿2016/10/26 08:05

###前提・実現したいこと
Visual studioの環境にて、Kinectv2.0を操作するプログラムを記述しています。
具体的に説明しますと、SDK browser v2.0にもともと入っているBodyBasics-WPFというサンプルプログラムをいじり、kinectの目の前にて一人の人間が腕を前にだし手前にひく動作をするとある動作が行われるというものです。今回は、メールを送信するという目標ですがそこはすでにクリアされているので省きます。

###発生している問題・エラーメッセージ
エラーメッセージなどは特になくサンプルプログラムの解析やアルゴリズムの製作に難航しています。今一人の人を認識し、手の動作に合わせ、checkPostureという関数の中でzの値を動きに合わせ増やしていくということができています。しかし、これはkinectが二人の人を同時に認識している場合うまくいかないのです。ですので、二人の人をkinectが認識している場合にどのような処理が内部的に処理され、どこを使えば制御できるか教えて頂けると幸いです。bodiesという配列が怪しいのではないかと個人的に睨んでやってみたりもしましたがうまくいきませんでした。プログラミング能力が私自身低いため、初心者にもわかりやすい簡単なお言葉で説明頂けると嬉しいです。宜しくお願い致します。
文字数オーバーの為サンプルプログラムをいじった部分だけ添付いたします。

エラーメッセージ

###該当のソースコード

foreach (JointType jointType in joints.Keys) { // sometimes the depth(Z) of an inferred joint may show as negative // clamp down to 0.1f to prevent coordinatemapper from returning (-Infinity, -Infinity) CameraSpacePoint position = joints[jointType].Position; if (position.Z < 0) { position.Z = InferredZPositionClamp; } DepthSpacePoint depthSpacePoint = this.coordinateMapper.MapCameraPointToDepthSpace(position); jointPoints[jointType] = new Point(depthSpacePoint.X, depthSpacePoint.Y); } this.DrawBody(joints, jointPoints, dc, drawPen); this.DrawHand(body.HandLeftState, jointPoints[JointType.HandLeft], dc); this.DrawHand(body.HandRightState, jointPoints[JointType.HandRight], dc); this.checkPosture(joints, this.bodies[0].HandRightState, jointPoints[JointType.SpineMid], jointPoints[JointType.HandRight], JointType.HandRight, JointType.ElbowRight); if (x==0) {//一人を認識したら認識し終わるまで繰り返せないように設定 this.checkPosture2(joints, this.bodies[1].HandRightState, jointPoints[JointType.SpineMid], jointPoints[JointType.HandRight], JointType.HandRight, JointType.ElbowRight); } } } // prevent drawing outside of our render area this.drawingGroup.ClipGeometry = new RectangleGeometry(new Rect(0.0, 0.0, this.displayWidth, this.displayHeight)); } } } private void checkPosture(IReadOnlyDictionary<JointType, Joint> joints, HandState handState, Point SpinePoint, Point righthandPoint, JointType hand, JointType elbow) { Joint jh = joints[hand]; Joint je = joints[elbow]; int y = x; if (SpinePoint.Y > righthandPoint.Y) { if ((je.Position.Z - jh.Position.Z > 0.2))//&& (handState == HandState.Lasso)) { //x = 0; flag = 1; } else if ((jh.Position.Z > je.Position.Z)) { if (flag == 1) { //x = 1; flag = 0; //if (y != x) //{ z++; //MailSend.Mailsend.Send(); //} } } } else { flag = 0; //x = 0; } this.Text.Text = flag.ToString(); this.Textbox2.Text = z.ToString(); //this.Textbox3.Text = flag.ToString(); //this.Textbox4.Text = z.ToString(); } private void checkPosture2(IReadOnlyDictionary<JointType, Joint> joints, HandState handState, Point SpinePoint, Point righthandPoint, JointType hand, JointType elbow) { Joint jh = joints[hand]; Joint je = joints[elbow]; int y = x; if (SpinePoint.Y > righthandPoint.Y) { if ((je.Position.Z - jh.Position.Z > 0.2))//&& (handState == HandState.Lasso)) { //x = 0; flag = 1; } else if ((jh.Position.Z > je.Position.Z)) { if (flag == 1) { //x = 1; flag = 0; //if (y != x) //{ z++; //MailSend.Mailsend.Send(); x = 0;//認識完了したので制限を解除 //} } } x = 1;//フラグがたっているときに他の人をご認識しないようにする } else { flag = 0; //x = 0; } this.Textbox3.Text = flag.ToString(); this.Textbox4.Text = z.ToString(); } }

}

###試したこと checkPosture2などの関数を作り二つの別な関数で二人の人の動きを積御しようとした。 bodiesという配列の中身である、bodies[0]などを checkPostureの関数の引数に当てたりなどした。 ###補足情報(言語/FW/ツール等のバージョンなど) より詳細な情報

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

PineMatsu

2016/10/27 09:12

ソースコードは```のブロックで囲うときれいに整形されます。</>ボタンを押せばブロックが表示されます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問