sasaquita2017/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); } } } } '''
Qoo2017/10/05 08:10実行には少なくとも【BodySourceManager.cs】や【BodySourceView.cs】が必要になると思います。 前後しますが、先に送付したサイトにプロジェクトのリンク(https://github.com/kaorun55/CoodinateMapKinectToUnity)があるので こちらをダウンロードして、まずは実行してみるのが良いと思います。 ①ダウンロードしたプロジェクトをUNITYで開く ②Assets/Scenes/CoodinateSampleシーンを開く ③KINECTをつないで、正常に動作するか確認する ④どのような処理なっているか確認する (BodySourceView.csの中のCreateBodyObjectメソッドとRefreshBodyObjectメソッド)を 確認してみてください
sasaquita2017/10/05 21:51ありがとうございます。 ③までは確認することができました。 ここから、例えば、キネクトのボーンの右手首の座標を取得してみたいのですが、どうすればいいのでしょうか。
Qoo2017/10/06 01:55BodySourceView.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; } } }
Qoo2018/11/21 01:36CVSVなら↓みたいな感じで出せると思いますが、ファイルへの書き込み処理は遅いので フレームレートのことを考えると配列に入れといてあとで出力するとかに したほうーがいいんじゃないでしょうか。 毎フレームごとに書き込みしてたらフリーズするように思います。 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書き込みエラー"); }
osietekudasai2018/11/21 06:43ご返事ありがとうございます。 載せていただいたプログラムを参考にしてみたのですが、localPosition に ('object'に'Add'の定義が含まれておらず、型'object'の最初の引数を受け付ける拡張メソッド'Add'が見つかりませんでした。usingディレクティブまたはアセンブリ参照が不足していないことを確認してください)というエラーが出てしまい、コンパイルエラーが出てしまいます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/10/05 07:18
2017/10/05 07:20
2017/10/05 08:10
2017/10/05 21:51
2017/10/06 01:55
2018/11/20 05:22
2018/11/21 01:36
2018/11/21 06:43