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

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

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

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

Kinect

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

Q&A

2回答

1240閲覧

unity kinectv2 ボーン座標の取得について

sasaquita

総合スコア18

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

Kinect

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

0グッド

0クリップ

投稿2017/10/02 13:18

unity 初心者です。

kinect v2を用いて、ボーンの座標を取得したいのですが、なかなかできず手こずっております。
ボーン座標の取得などはどうすればできれるのでしょうか。

よろしくお願いします。

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

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

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

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

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

guest

回答2

0

こちらの方がわかりやすそうなので
再度リンクを貼っておきます。

https://blog.sky-net.pw/article/37

投稿2017/10/04 03:43

Qoo

総合スコア1249

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

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

sasaquita

2017/10/05 07:18

これって、CUBEをつくってそれにコンポーネント追加して、 KINECT.csにコードををあせせていけばいいのでしょうか。
sasaquita

2017/10/05 07:20

下記のコードを書いて、CUBEにアタッチして実行するとエラーがでてしまいます。。 ''' using UnityEngine; using System.Collections; using System.Collections.Generic; using Windows.Kinect; public class Kinect : MonoBehaviour { KinectSensor _Sensor; BodyFrameReader _Reader; Body[] _Data = null; void Start() { _Sensor = KinectSensor.GetDefault(); if (_Sensor != null) { _Reader = _Sensor.BodyFrameSource.OpenReader(); if (!_Sensor.IsOpen) { _Sensor.Open(); } } } void OnApplicationQuit() { if (_Reader != null) { _Reader.Dispose(); _Reader = null; } if (_Sensor != null) { if (_Sensor.IsOpen) { _Sensor.Close(); } _Sensor = null; } } void Update() { var frame = _Reader.AcquireLatestFrame(); if (frame == null) { return; } if (_Data == null) { _Data = new Body[_Sensor.BodyFrameSource.BodyCount]; } frame.GetAndRefreshBodyData(_Data); frame.Dispose(); frame = null; if (_Data == null) { return; } foreach (var body in data) { if (body == null) { continue; } if (body.IsTracked) { Debug.Log("人がいるよ!"); // RefreshBodyObject(body); } } } } '''
Qoo

2017/10/05 08:10

実行には少なくとも【BodySourceManager.cs】や【BodySourceView.cs】が必要になると思います。 前後しますが、先に送付したサイトにプロジェクトのリンク(https://github.com/kaorun55/CoodinateMapKinectToUnity)があるので こちらをダウンロードして、まずは実行してみるのが良いと思います。 ①ダウンロードしたプロジェクトをUNITYで開く ②Assets/Scenes/CoodinateSampleシーンを開く ③KINECTをつないで、正常に動作するか確認する ④どのような処理なっているか確認する (BodySourceView.csの中のCreateBodyObjectメソッドとRefreshBodyObjectメソッド)を 確認してみてください
sasaquita

2017/10/05 21:51

ありがとうございます。 ③までは確認することができました。 ここから、例えば、キネクトのボーンの右手首の座標を取得してみたいのですが、どうすればいいのでしょうか。
Qoo

2017/10/06 01:55

BodySourceView.csのRefreshBodyObjectメソッドを下記のように修正してください。 private void RefreshBodyObject(Kinect.Body body, GameObject bodyObject) { for (Kinect.JointType jt = Kinect.JointType.SpineBase; jt <= Kinect.JointType.ThumbRight; jt++) { Kinect.Joint sourceJoint = body.Joints[jt]; Kinect.Joint? targetJoint = null; if(_BoneMap.ContainsKey(jt)) { targetJoint = body.Joints[_BoneMap[jt]]; } Transform jointObj = bodyObject.transform.FindChild(jt.ToString()); jointObj.localPosition = GetVector3FromJoint(sourceJoint);    //右手首にくっついているキューブの位置をコンソールに表示する if (jt == Kinect.JointType.WristRight) {   Debug.Log (jointObj.localPosition); } LineRenderer lr = jointObj.GetComponent<LineRenderer>(); if(targetJoint.HasValue) { lr.SetPosition(0, jointObj.localPosition); lr.SetPosition(1, GetVector3FromJoint(targetJoint.Value)); lr.SetColors(GetColorForState (sourceJoint.TrackingState), GetColorForState(targetJoint.Value.TrackingState)); } else { lr.enabled = false; } } }
osietekudasai

2018/11/20 05:22

すごく参考になりました。 この座標をcsvに書き出す方法を教えてほしいです。
Qoo

2018/11/21 01:36

CVSVなら↓みたいな感じで出せると思いますが、ファイルへの書き込み処理は遅いので フレームレートのことを考えると配列に入れといてあとで出力するとかに したほうーがいいんじゃないでしょうか。 毎フレームごとに書き込みしてたらフリーズするように思います。 using System.IO;を追加 try { StreamWriter sw; FileInfo fi = new FileInfo(Application.dataPath + "/sample.csv"); sw = fi.AppendText(); sw.WriteLine(      jointObj.localPosition ); sw.Flush(); sw.Close(); Debug.Log("CSV正常書き込み"); }catch { Debug.Log("CSV書き込みエラー"); }
osietekudasai

2018/11/21 06:43

ご返事ありがとうございます。 載せていただいたプログラムを参考にしてみたのですが、localPosition に ('object'に'Add'の定義が含まれておらず、型'object'の最初の引数を受け付ける拡張メソッド'Add'が見つかりませんでした。usingディレクティブまたはアセンブリ参照が不足していないことを確認してください)というエラーが出てしまい、コンパイルエラーが出てしまいます。
guest

0

こちらのページが参考になると思います。

http://www.naturalsoftware.jp/entry/2014/10/14/031018

ダウンロードできるサンプルプロジェクトでは、
BodySourceView.csの中のCreateBodyObjectというメソッドで、
ボーンごとに新しくCubeオブジェクトを作成し、
RefreshBodyObjectのメソッドの中で、ボーンごとにCubeの位置更新処理を行っています。
ボーンの位置はKinect.Joint.Position で取得しているようです。

また、UNITYであれば下記のアセットが無料で利用でき、骨格認証やジェスチャー認識など サンプルも充実しているので、とりあえず動かすのであればこちらの方が良いかもしれません。 [https://www.assetstore.unity3d.com/jp/#!/content/7747](https://www.assetstore.unity3d.com/jp/#!/content/7747)

投稿2017/10/02 14:40

Qoo

総合スコア1249

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問