Browse Source

WIP: Person Manager and serialization of SVO

Nick Steyer 1 year ago
parent
commit
d1fab45881

+ 4 - 0
Assembly-CSharp.csproj

@@ -73,6 +73,7 @@
     <Compile Include="Assets\ZED\Examples\MultiCam\Scripts\EnableWhenReady.cs" />
     <Compile Include="Assets\ZED\Tools\Mixed Reality Calibration\Scripts\FrustumDisplay.cs" />
     <Compile Include="Assets\ZED\Examples\OpenCV ArUco Detection\Scripts\Drone Wars\ArUcoDroneLaser.cs" />
+    <Compile Include="Assets\StreetLight\Scripts\PersonManager.cs" />
     <Compile Include="Assets\ZED\Examples\Plane Detection\Scripts\CapsuleFollower.cs" />
     <Compile Include="Assets\ZED\Examples\Planetarium\Scripts\SunCorona.cs" />
     <Compile Include="Assets\ZED\Tools\Mixed Reality Calibration\Scripts\CalibModeSwitcher.cs" />
@@ -168,6 +169,7 @@
     <Compile Include="Assets\ZED\Tools\Mixed Reality Calibration\Scripts\RotateRing.cs" />
     <Compile Include="Assets\ZED\SDK\Helpers\Scripts\Lighting\ZEDLight.cs" />
     <Compile Include="Assets\ZED\SDK\Helpers\Scripts\Interactions\ZEDTransformController.cs" />
+    <Compile Include="Assets\StreetLight\Adapters\ZedPersonDetector.cs" />
     <Compile Include="Assets\ZED\Examples\OpenCV ArUco Detection\Scripts\Simple Placement\ScaleToMarkerSize.cs" />
     <Compile Include="Assets\ZED\Examples\Drone Shooter\Scripts\Simple\PlayerDamageReceiver.cs" />
     <Compile Include="Assets\ZED\SDK\Helpers\Scripts\Interactions\ZEDControllerTracker.cs" />
@@ -180,6 +182,7 @@
     <Compile Include="Assets\ZED\Examples\Object Placement\Scripts\PlaceOnScreen.cs" />
     <Compile Include="Assets\ZED\Examples\OpenCV ArUco Detection\Scripts\Drone Wars\ArUcoDrone.cs" />
     <Compile Include="Assets\ZED\Examples\Drone Shooter\Scripts\Simple\LaserShot_Drone.cs" />
+    <Compile Include="Assets\StreetLight\Poco\Person.cs" />
     <Compile Include="Assets\ZED\Tools\Mixed Reality Calibration\Scripts\TempAudioObject.cs" />
     <Compile Include="Assets\ZED\SDK\Helpers\Scripts\Utilities\Utils.cs" />
     <Compile Include="Assets\Logging\Poco\DetectedObject.cs" />
@@ -187,6 +190,7 @@
     <Compile Include="Assets\ZED\Tools\Mixed Reality Calibration\Scripts\SpotlightFollow.cs" />
     <Compile Include="Assets\ZED\SDK\NativeInterface\ZEDLayersManager.cs" />
     <Compile Include="Assets\ZED\SDK\Helpers\Scripts\Utilities\LayerHandler.cs" />
+    <Compile Include="Assets\StreetLight\Interfaces\IPersonDetector.cs" />
     <Compile Include="Assets\ZED\SDK\Helpers\Scripts\Utilities\ZEDSupportFunctions.cs" />
     <Compile Include="Assets\ZED\SDK\Helpers\Scripts\Utilities\CappedStack.cs" />
     <Compile Include="Assets\ZED\Examples\Drone Shooter\Scripts\Simple\LaserShot_Player.cs" />

+ 43 - 43
Assets/Scenes/BoundingBoxes.unity

@@ -123,7 +123,7 @@ NavMeshSettings:
     debug:
       m_Flags: 0
   m_NavMeshData: {fileID: 0}
---- !u!1 &422388770
+--- !u!1 &173126280
 GameObject:
   m_ObjectHideFlags: 0
   m_CorrespondingSourceObject: {fileID: 0}
@@ -131,58 +131,42 @@ GameObject:
   m_PrefabAsset: {fileID: 0}
   serializedVersion: 6
   m_Component:
-  - component: {fileID: 422388772}
-  - component: {fileID: 422388771}
+  - component: {fileID: 173126281}
+  - component: {fileID: 173126282}
   m_Layer: 0
-  m_Name: 3D Object Visualizer
+  m_Name: Person Manager
   m_TagString: Untagged
   m_Icon: {fileID: 0}
   m_NavMeshLayer: 0
   m_StaticEditorFlags: 0
   m_IsActive: 1
---- !u!114 &422388771
-MonoBehaviour:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  m_GameObject: {fileID: 422388770}
-  m_Enabled: 1
-  m_EditorHideFlags: 0
-  m_Script: {fileID: 11500000, guid: 050df1fa7a5de6f40a3677d766ed3063, type: 3}
-  m_Name: 
-  m_EditorClassIdentifier: 
-  startObjectDetectionAutomatically: 1
-  boundingBoxPrefab: {fileID: 1438017172825460, guid: 2d803190bc4738d4daf5932468a5495e, type: 3}
-  boxColors:
-  - {r: 0.231, g: 0.909, b: 0.69, a: 1}
-  - {r: 0.098, g: 0.686, b: 0.816, a: 1}
-  - {r: 0.412, g: 0.4, b: 0.804, a: 1}
-  - {r: 1, g: 0.725, b: 0, a: 1}
-  - {r: 0.989, g: 0.388, b: 0.419, a: 1}
-  boxesFaceCamera: 0
-  transformBoxScale: 1
-  transformBoxToTouchFloor: 1
-  floorBBoxPosition: 0
-  showONTracked: 1
-  showSEARCHINGTracked: 0
-  showOFFTracked: 0
-  minimumWidthToDisplay: 0.3
---- !u!4 &422388772
+--- !u!4 &173126281
 Transform:
   m_ObjectHideFlags: 0
   m_CorrespondingSourceObject: {fileID: 0}
   m_PrefabInstance: {fileID: 0}
   m_PrefabAsset: {fileID: 0}
-  m_GameObject: {fileID: 422388770}
+  m_GameObject: {fileID: 173126280}
   m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
-  m_LocalPosition: {x: 0, y: 0, z: 0}
+  m_LocalPosition: {x: -0.063950524, y: 0.632051, z: -0.15403605}
   m_LocalScale: {x: 1, y: 1, z: 1}
   m_ConstrainProportionsScale: 0
   m_Children: []
   m_Father: {fileID: 0}
-  m_RootOrder: 2
+  m_RootOrder: 8
   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!114 &173126282
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 173126280}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 9113063bb18312e4e8212e4124aab528, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
 --- !u!1 &468695585
 GameObject:
   m_ObjectHideFlags: 0
@@ -275,7 +259,7 @@ Transform:
   m_ConstrainProportionsScale: 0
   m_Children: []
   m_Father: {fileID: 0}
-  m_RootOrder: 0
+  m_RootOrder: 5
   m_LocalEulerAnglesHint: {x: 50, y: -30, z: 0}
 --- !u!1001 &614249117
 PrefabInstance:
@@ -336,10 +320,26 @@ PrefabInstance:
       propertyPath: depthMode
       value: 3
       objectReference: {fileID: 0}
+    - target: {fileID: 114491592745282986, guid: 76db3eb81fd21ae45bab5204e324ae42, type: 3}
+      propertyPath: inputType
+      value: 1
+      objectReference: {fileID: 0}
     - target: {fileID: 114491592745282986, guid: 76db3eb81fd21ae45bab5204e324ae42, type: 3}
       propertyPath: resolution
       value: 1
       objectReference: {fileID: 0}
+    - target: {fileID: 114491592745282986, guid: 76db3eb81fd21ae45bab5204e324ae42, type: 3}
+      propertyPath: svoLoopBack
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 114491592745282986, guid: 76db3eb81fd21ae45bab5204e324ae42, type: 3}
+      propertyPath: svoRealTimeMode
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 114491592745282986, guid: 76db3eb81fd21ae45bab5204e324ae42, type: 3}
+      propertyPath: svoInputFileName
+      value: C:/Users/nick.steyer/Git/Files/HD1080_SN39598725_17-45-47.svo
+      objectReference: {fileID: 0}
     - target: {fileID: 114491592745282986, guid: 76db3eb81fd21ae45bab5204e324ae42, type: 3}
       propertyPath: trackingIsStatic
       value: 1
@@ -492,7 +492,7 @@ Transform:
   m_ConstrainProportionsScale: 0
   m_Children: []
   m_Father: {fileID: 0}
-  m_RootOrder: 3
+  m_RootOrder: 7
   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
 --- !u!1 &844576506
 GameObject:
@@ -589,7 +589,7 @@ Transform:
   m_ConstrainProportionsScale: 0
   m_Children: []
   m_Father: {fileID: 0}
-  m_RootOrder: 6
+  m_RootOrder: 3
   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
 --- !u!1 &866508202
 GameObject:
@@ -717,7 +717,7 @@ Transform:
   m_ConstrainProportionsScale: 0
   m_Children: []
   m_Father: {fileID: 0}
-  m_RootOrder: 5
+  m_RootOrder: 2
   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
 --- !u!1 &954312568
 GameObject:
@@ -829,7 +829,7 @@ Transform:
   m_ConstrainProportionsScale: 0
   m_Children: []
   m_Father: {fileID: 0}
-  m_RootOrder: 4
+  m_RootOrder: 0
   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
 --- !u!1 &1310445729
 GameObject:
@@ -926,7 +926,7 @@ Transform:
   m_ConstrainProportionsScale: 0
   m_Children: []
   m_Father: {fileID: 0}
-  m_RootOrder: 7
+  m_RootOrder: 4
   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
 --- !u!1 &1319309825
 GameObject:
@@ -1010,5 +1010,5 @@ Transform:
   m_ConstrainProportionsScale: 0
   m_Children: []
   m_Father: {fileID: 0}
-  m_RootOrder: 8
+  m_RootOrder: 6
   m_LocalEulerAnglesHint: {x: 90, y: 0, z: 0}

+ 8 - 0
Assets/StreetLight.meta

@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 3bb1057cb080a3c47980b253b35ebc88
+folderAsset: yes
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 8 - 0
Assets/StreetLight/Adapters.meta

@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: e2c2fd64b0f960d4090711dbf835a0d0
+folderAsset: yes
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 126 - 0
Assets/StreetLight/Adapters/ZedPersonDetector.cs

@@ -0,0 +1,126 @@
+using Assets.StreetLight.Interfaces;
+using Assets.StreetLight.Poco;
+using Newtonsoft.Json;
+using System;
+using System.Collections.Generic;
+using System.IO;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using UnityEngine;
+
+namespace Assets.StreetLight.Adapters
+{
+    internal class ZedPersonDetector : IPersonDetector
+    {
+        private readonly ZEDManager zedManager;
+
+        public event EventHandler<IEnumerable<Person>> PersonsDetected;
+
+        public ZedPersonDetector(ZEDManager zedManager)
+        {
+            this.zedManager = zedManager;
+            zedManager.OnObjectDetection += ZedManager_OnObjectDetection;
+            zedManager.OnZEDReady += ZedManager_OnZEDReady;
+
+            zedManager.objectDetectionModel = sl.DETECTION_MODEL.HUMAN_BODY_ACCURATE;
+        }
+
+        private void ZedManager_OnZEDReady()
+        {
+            zedManager.StartObjectDetection();
+        }
+
+        private void ZedManager_OnObjectDetection(DetectionFrame objFrame)
+        {
+            JsonSerializerSettings sets = new JsonSerializerSettings
+            {
+                ReferenceLoopHandling = ReferenceLoopHandling.Ignore,
+                Converters = new List<JsonConverter>() { new Vector2Converter(), new Vector3Converter(), new QuaternionConverter(), new ColorConverter() }
+            };
+
+            var ser = JsonSerializer.Create(sets);
+
+            using (var file = File.CreateText(@"C:\Users\nick.steyer\SmartStreetLight\log2.txt"))
+            {
+                ser.Serialize(file, objFrame);
+            }
+        }
+
+        public class Vector2Converter : JsonConverter
+        {
+            public override bool CanConvert(Type objectType)
+            {
+                return objectType == typeof(Vector2);
+            }
+
+            public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
+            {
+                return new Vector2();
+            }
+
+            public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
+            {
+                var vector = (Vector2)value;
+                writer.WriteValue($"({vector.x}|{vector.y})");
+            }
+        }
+
+        public class Vector3Converter : JsonConverter
+        {
+            public override bool CanConvert(Type objectType)
+            {
+                return objectType == typeof(Vector3);
+            }
+
+            public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
+            {
+                return new Vector3();
+            }
+
+            public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
+            {
+                var vector = (Vector3)value;
+                writer.WriteValue($"({vector.x}|{vector.y}|{vector.z})");
+            }
+        }
+
+        public class QuaternionConverter : JsonConverter
+        {
+            public override bool CanConvert(Type objectType)
+            {
+                return objectType == typeof(Quaternion);
+            }
+
+            public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
+            {
+                return new Quaternion();
+            }
+
+            public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
+            {
+                var vector = (Quaternion)value;
+                writer.WriteValue($"({vector.x}|{vector.y}|{vector.z}|{vector.w})");
+            }
+        }
+
+        public class ColorConverter : JsonConverter
+        {
+            public override bool CanConvert(Type objectType)
+            {
+                return objectType == typeof(Color);
+            }
+
+            public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
+            {
+                return new Color();
+            }
+
+            public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
+            {
+                var color = (Color)value;
+                writer.WriteValue($"({color.a}|{color.r}|{color.g}|{color.b})");
+            }
+        }
+    }
+}

+ 11 - 0
Assets/StreetLight/Adapters/ZedPersonDetector.cs.meta

@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: f8ceb0807486db149bdf9ad59cf53a6f
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 8 - 0
Assets/StreetLight/Interfaces.meta

@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 83dc6efe62b0e51448295e637c4c022f
+folderAsset: yes
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 14 - 0
Assets/StreetLight/Interfaces/IPersonDetector.cs

@@ -0,0 +1,14 @@
+using Assets.StreetLight.Poco;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace Assets.StreetLight.Interfaces
+{
+    public interface IPersonDetector
+    {
+        public event EventHandler<IEnumerable<Person>> PersonsDetected;
+    }
+}

+ 11 - 0
Assets/StreetLight/Interfaces/IPersonDetector.cs.meta

@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: b1b6fbfede3073f48ba293fd3e875c87
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 8 - 0
Assets/StreetLight/Poco.meta

@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: ae5fb4dea47ec614bb866eefbcf9d92d
+folderAsset: yes
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 14 - 0
Assets/StreetLight/Poco/Person.cs

@@ -0,0 +1,14 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using UnityEngine;
+
+namespace Assets.StreetLight.Poco
+{
+    public class Person
+    {
+        public Vector2 WorldPosition { get; set; }
+    }
+}

+ 11 - 0
Assets/StreetLight/Poco/Person.cs.meta

@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: ce623042400b65e48801d9e61303a83b
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 8 - 0
Assets/StreetLight/Prefabs.meta

@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: bb981878545db654ba06c0dd6b783e31
+folderAsset: yes
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 8 - 0
Assets/StreetLight/Scripts.meta

@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 8192c6e3c9c1cfa49a3aa076b497e589
+folderAsset: yes
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 33 - 0
Assets/StreetLight/Scripts/PersonManager.cs

@@ -0,0 +1,33 @@
+using Assets.StreetLight.Adapters;
+using Assets.StreetLight.Interfaces;
+using Assets.StreetLight.Poco;
+using System.Collections;
+using System.Collections.Generic;
+using System.Collections.ObjectModel;
+using UnityEngine;
+
+public class PersonManager : MonoBehaviour
+{
+    public ObservableCollection<Person> Persons { get; set; }
+
+    private IPersonDetector personDetector;
+
+    void Start()
+    {
+        Persons = new ObservableCollection<Person>();
+        personDetector = new ZedPersonDetector(FindObjectOfType<ZEDManager>());
+        personDetector.PersonsDetected += PersonDetector_PersonsDetected;
+    }
+
+    private void PersonDetector_PersonsDetected(object sender, IEnumerable<Person> e)
+    {
+        foreach (var person in e)
+        {
+            Persons.Add(person);
+        }
+    }
+
+    void Update()
+    {
+    }
+}

+ 11 - 0
Assets/StreetLight/Scripts/PersonManager.cs.meta

@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 9113063bb18312e4e8212e4124aab528
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: