Skip to content
Snippets Groups Projects
Commit 6e9d0a33 authored by Noxer's avatar Noxer
Browse files

Added all fingers and switched format to list of JSON

parent a10c0937
Branches
No related tags found
No related merge requests found
......@@ -3,6 +3,7 @@ using Leap.Unity;
using System.Collections;
using System.Collections.Generic;
using System.IO;
using System.Text;
using UnityEngine;
using UnityEngine.UI;
......@@ -19,8 +20,14 @@ public class Recorder : MonoBehaviour
private string path = "Assets/Record/Recorded/";
private StreamWriter mStreamWriter;
private string date;
// Finger bones from base to tip
private Bone.BoneType[] bones = new Bone.BoneType[] {
Bone.BoneType.TYPE_METACARPAL,
Bone.BoneType.TYPE_PROXIMAL,
Bone.BoneType.TYPE_INTERMEDIATE,
Bone.BoneType.TYPE_DISTAL
};
public void ToggleRecording()
{
......@@ -34,8 +41,7 @@ public class Recorder : MonoBehaviour
{
Directory.CreateDirectory (path + gestureName);
mStreamWriter = new StreamWriter(path + gestureName + "/" + recordingNumber.ToString() + ".txt");
mStreamWriter.WriteLine("Gesture: " + gestureName + "; Author: " + userName + "; Recorded: " + date);
mStreamWriter.WriteLine("timestamp l_palm_pos_x l_palm_pos_y l_palm_pos_z r_palm_pos_x r_palm_pos_y r_palm_pos_z");
mStreamWriter.WriteLine("Gesture: " + gestureName + "; Author: " + userName);
//UI
recordingLabel.SetActive (true);
......@@ -59,42 +65,91 @@ public class Recorder : MonoBehaviour
{
if (mStreamWriter != null)
{
Vector3 leftPalmPosition = Vector3.zero, rightPalmPosition = Vector3.zero;
Vector4 leftPalmRotation = Vector3.zero, rightPalmRotation = Vector3.zero;
Dictionary<string, float> hands = new Dictionary<string, float>();
Frame frame = LeapService.CurrentFrame;
foreach (Hand hand in frame.Hands)
{
if (hand.IsLeft)
{
leftPalmPosition = hand.PalmPosition.ToVector3 ();
leftPalmRotation = new Vector4(hand.Rotation.x, hand.Rotation.y, hand.Rotation.z, hand.Rotation.w);
handToDict ("l", hand, hands);
}
else
{
rightPalmPosition = hand.PalmPosition.ToVector3();
rightPalmRotation = new Vector4(hand.Rotation.x, hand.Rotation.y, hand.Rotation.z, hand.Rotation.w);
handToDict ("r", hand, hands);
}
}
mStreamWriter.WriteLine(DataToString(VecToData(leftPalmPosition), VecToData(leftPalmRotation), VecToData(rightPalmPosition), VecToData(rightPalmRotation)));
hands ["timestamp"] = Time.unscaledTime;
mStreamWriter.WriteLine(JsonUtility.ToJson(hands));
}
}
private static string VecToData(Vector3 vec)
{
return string.Format("{0} {1} {2}", vec.x, vec.y, vec.z);
private void handToDict(string prefix, Hand hand, Dictionary<string, float> result) {
// Iterate over each finger and bone
foreach (Finger finger in hand.Fingers) {
foreach (var boneType in bones) {
// Load the bone
var bone = finger.Bone (boneType);
var boneID = string.Join ("_", new string[]{prefix, FingerName (finger.Type), BoneName (boneType)});
// Store the center of the bone
result [boneID + "_cen_x"] = bone.Center.x;
result [boneID + "_cen_y"] = bone.Center.y;
result [boneID + "_cen_z"] = bone.Center.z;
// Store the direction of the bone
result [boneID + "_dir_x"] = bone.Direction.x;
result [boneID + "_dir_y"] = bone.Direction.y;
result [boneID + "_dir_z"] = bone.Direction.z;
// Store the length of the bone
result [boneID + "_len"] = bone.Length;
}
}
// Store the palm of the hand
var palmID = string.Join("_", new string[]{ prefix, "palm" });
result [palmID + "_pos_x"] = hand.PalmPosition.x;
result [palmID + "_pos_y"] = hand.PalmPosition.y;
result [palmID + "_pos_z"] = hand.PalmPosition.z;
result [palmID + "_rot_x"] = hand.Rotation.x;
result [palmID + "_rot_y"] = hand.Rotation.y;
result [palmID + "_rot_z"] = hand.Rotation.z;
result [palmID + "_rot_w"] = hand.Rotation.w;
}
private static string DataToString(params object[] list)
private string FingerName(Finger.FingerType fingerType)
{
string[] strs = new string[list.Length];
for (int i = 0; i < list.Length; i++) {
strs [i] = list [i].ToString ();
switch (fingerType) {
case Finger.FingerType.TYPE_INDEX:
return "index";
case Finger.FingerType.TYPE_MIDDLE:
return "middle";
case Finger.FingerType.TYPE_PINKY:
return "pinky";
case Finger.FingerType.TYPE_RING:
return "ring";
case Finger.FingerType.TYPE_THUMB:
return "thumb";
}
return "unknown";
}
return string.Join (" ", strs);
private string BoneName(Bone.BoneType boneType)
{
switch (boneType) {
case Bone.BoneType.TYPE_DISTAL:
return "distral";
case Bone.BoneType.TYPE_INTERMEDIATE:
return "intermediate";
case Bone.BoneType.TYPE_METACARPAL:
return "metacarpal";
case Bone.BoneType.TYPE_PROXIMAL:
return "proximal";
}
return "unknown";
}
public void UpdateGestureName(string name)
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment