Browse Source

Serialize DetectionFrames with ZedPersonDetector

Nick Steyer 2 years ago
parent
commit
d5839ed192

+ 6 - 0
Assembly-CSharp.csproj

@@ -56,6 +56,7 @@
     <Analyzer Include="C:\Program Files\Microsoft Visual Studio\2022\Community\Common7\IDE\Extensions\Microsoft\Visual Studio Tools for Unity\Analyzers\Microsoft.Unity.Analyzers.dll" />
   </ItemGroup>
   <ItemGroup>
+    <Compile Include="Assets\StreetLight\Serialization\Matrix4x4Converter.cs" />
     <Compile Include="Assets\ZED\Tools\Mixed Reality Calibration\Scripts\ChooseTrackedObjectMenu.cs" />
     <Compile Include="Assets\Ball.cs" />
     <Compile Include="Assets\ZED\SDK\Helpers\Scripts\ObjectDetection\DetectedObject.cs" />
@@ -85,6 +86,7 @@
     <Compile Include="Assets\Bumper.cs" />
     <Compile Include="Assets\ZED\SDK\Helpers\Scripts\Utilities\GUIMessage.cs" />
     <Compile Include="Assets\Logging\DetectionFrameLogger.cs" />
+    <Compile Include="Assets\StreetLight\Serialization\Vector2Converter.cs" />
     <Compile Include="Assets\ZED\Examples\SpatialMapping\Scripts\NavMeshSurface.cs" />
     <Compile Include="Assets\ZED\SDK\Helpers\Scripts\Interactions\ZEDControllerTracker_DemoInputs.cs" />
     <Compile Include="Assets\ZED\Tools\Mixed Reality Calibration\Scripts\ZEDXRGrabber.cs" />
@@ -94,6 +96,7 @@
     <Compile Include="Assets\ZED\Examples\Drone Shooter\Scripts\Utilities\ILaserable.cs" />
     <Compile Include="Assets\ZED\Examples\Dark Room\Scripts\DisableUntilZEDReady.cs" />
     <Compile Include="Assets\ZED\Tools\Mixed Reality Calibration\Scripts\TranslateArrow.cs" />
+    <Compile Include="Assets\StreetLight\Serialization\QuaternionConverter.cs" />
     <Compile Include="Assets\ZED\Examples\OpenCV ArUco Detection\Scripts\Drone Wars\AssertObjectExistenceOnEnable.cs" />
     <Compile Include="Assets\ZED\Tools\Mixed Reality Calibration\Scripts\DrawOutputToPlane.cs" />
     <Compile Include="Assets\ZED\Examples\Object Detection\Scripts\ZED3DObjectVisualizer.cs" />
@@ -116,6 +119,7 @@
     <Compile Include="Assets\ZED\SDK\Helpers\Scripts\Utilities\ZEDSVOManager.cs" />
     <Compile Include="Assets\ZED\Tools\Mixed Reality Calibration\Scripts\ToggleGroup3D.cs" />
     <Compile Include="Assets\ZED\SDK\Helpers\Scripts\SkeletonTracking\RigBone.cs" />
+    <Compile Include="Assets\StreetLight\Serialization\Vector3Converter.cs" />
     <Compile Include="Assets\ZED\Examples\Dark Room\Scripts\RandomDirLightManager.cs" />
     <Compile Include="Assets\ZED\Tools\Mixed Reality Calibration\Scripts\CreateZEDModel.cs" />
     <Compile Include="Assets\ZED\Examples\SpatialMapping\Scripts\RandomWalk.cs" />
@@ -150,6 +154,7 @@
     <Compile Include="Assets\ZED\Tools\Mixed Reality Calibration\Scripts\SetControllerSkin.cs" />
     <Compile Include="Assets\ZED\SDK\Helpers\Scripts\SkeletonTracking\SkeletonHandler.cs" />
     <Compile Include="Assets\ZED\SDK\Helpers\Scripts\IZEDManager.cs" />
+    <Compile Include="Assets\StreetLight\Serialization\ColorConverter.cs" />
     <Compile Include="Assets\ZED\SDK\NativeInterface\ZEDMat.cs" />
     <Compile Include="Assets\ZED\Examples\SpatialMapping\Scripts\NavMeshAgentController.cs" />
     <Compile Include="Assets\ZED\Examples\Dark Room\Scripts\StrobeLight.cs" />
@@ -199,6 +204,7 @@
     <Compile Include="Assets\ZED\Tools\Mixed Reality Calibration\Scripts\LookAtCameraPartialAxis.cs" />
     <Compile Include="Assets\ZED\SDK\Helpers\Scripts\PlaneDetection\ZEDPlaneDetectionManager.cs" />
     <Compile Include="Assets\ZED\SDK\Helpers\Scripts\Utilities\ZEDLogMessage.cs" />
+    <Compile Include="Assets\StreetLight\Serialization\GameObjectConverter.cs" />
   </ItemGroup>
   <ItemGroup>
     <None Include="Assets\ZED\Examples\GreenScreen\Shaders\Mask_Quad.shader" />

+ 40 - 76
Assets/StreetLight/Adapters/ZedPersonDetector.cs

@@ -1,6 +1,8 @@
 using Assets.StreetLight.Interfaces;
 using Assets.StreetLight.Poco;
+using Assets.StreetLight.Serialization;
 using Newtonsoft.Json;
+using Newtonsoft.Json.Serialization;
 using System;
 using System.Collections.Generic;
 using System.IO;
@@ -33,93 +35,55 @@ namespace Assets.StreetLight.Adapters
 
         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})");
-            }
-        }
+            var errors = new List<string>();
 
-        public class Vector3Converter : JsonConverter
-        {
-            public override bool CanConvert(Type objectType)
+            JsonSerializerSettings settings = new()
             {
-                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);
-            }
+                Converters = new List<JsonConverter>() {
+                    new Vector2Converter(),
+                    new Vector3Converter(),
+                    new QuaternionConverter(),
+                    new ColorConverter(),
+                    new Matrix4x4Converter()
+                },
+                Error = (s, a) =>
+                {
+                    if (a.CurrentObject != null)
+                    {
+                        errors.Add(a.ErrorContext.Error.Message);
+                    }
+                    a.ErrorContext.Handled = true;
+                },
+                //TraceWriter = new TraceWriter()
+            };
 
-            public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
-            {
-                return new Quaternion();
-            }
+            var serializer = JsonSerializer.Create(settings);
 
-            public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
+            using (var file = File.CreateText(@$"C:\Users\nick.steyer\SmartStreetLight\{DateTime.Now:HH-mm-ss-fff}.json"))
             {
-                var vector = (Quaternion)value;
-                writer.WriteValue($"({vector.x}|{vector.y}|{vector.z}|{vector.w})");
+                try
+                {
+                    serializer.Serialize(file, objFrame);
+                }
+                catch (Exception ex)
+                {
+                    Debug.Log(ex.Message);
+                    Debug.Log(ex.StackTrace);
+                }
             }
         }
 
-        public class ColorConverter : JsonConverter
+        class TraceWriter : ITraceWriter
         {
-            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 System.Diagnostics.TraceLevel LevelFilter => System.Diagnostics.TraceLevel.Verbose;
 
-            public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
+            public void Trace(System.Diagnostics.TraceLevel level, string message, Exception ex)
             {
-                var color = (Color)value;
-                writer.WriteValue($"({color.a}|{color.r}|{color.g}|{color.b})");
+                if (ex != null)
+                {
+                    Debug.Log(ex.Message);
+                }
+                Debug.Log(message);
             }
         }
     }

+ 1 - 1
Assets/StreetLight/Poco/Person.cs

@@ -9,6 +9,6 @@ namespace Assets.StreetLight.Poco
 {
     public class Person
     {
-        public Vector2 WorldPosition { get; set; }
+        public Vector2 GroundPosition { get; set; }
     }
 }

+ 8 - 0
Assets/StreetLight/Serialization.meta

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

+ 25 - 0
Assets/StreetLight/Serialization/ColorConverter.cs

@@ -0,0 +1,25 @@
+using Newtonsoft.Json;
+using System;
+using UnityEngine;
+
+namespace Assets.StreetLight.Serialization
+{
+    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/Serialization/ColorConverter.cs.meta

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

+ 33 - 0
Assets/StreetLight/Serialization/GameObjectConverter.cs

@@ -0,0 +1,33 @@
+using Newtonsoft.Json;
+using System;
+using UnityEngine;
+
+namespace Assets.StreetLight.Serialization
+{
+    public class GameObjectConverter : JsonConverter
+    {
+        public override bool CanConvert(Type objectType)
+        {
+            return objectType == typeof(GameObject);
+        }
+
+        public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
+        {
+            return new GameObject();
+        }
+
+        public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
+        {
+            var gameObject = (GameObject)value;
+
+            if (gameObject == null)
+            {
+                writer.WriteValue("null");
+            }
+            else
+            {
+                writer.WriteValue(gameObject);
+            }
+        }
+    }
+}

+ 11 - 0
Assets/StreetLight/Serialization/GameObjectConverter.cs.meta

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

+ 25 - 0
Assets/StreetLight/Serialization/Matrix4x4Converter.cs

@@ -0,0 +1,25 @@
+using Newtonsoft.Json;
+using System;
+using UnityEngine;
+
+namespace Assets.StreetLight.Serialization
+{
+    public class Matrix4x4Converter : JsonConverter
+    {
+        public override bool CanConvert(Type objectType)
+        {
+            return objectType == typeof(Matrix4x4);
+        }
+
+        public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
+        {
+            return new Matrix4x4();
+        }
+
+        public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
+        {
+            var matrix = (Matrix4x4)value;
+            writer.WriteValue(matrix.ToString());
+        }
+    }
+}

+ 11 - 0
Assets/StreetLight/Serialization/Matrix4x4Converter.cs.meta

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

+ 26 - 0
Assets/StreetLight/Serialization/QuaternionConverter.cs

@@ -0,0 +1,26 @@
+using Newtonsoft.Json;
+using System;
+using UnityEngine;
+
+namespace Assets.StreetLight.Serialization
+{
+    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;
+            var text = $"({vector.x}|{vector.y}|{vector.z}|{vector.w})";
+            writer.WriteValue(text);
+        }
+    }
+}

+ 11 - 0
Assets/StreetLight/Serialization/QuaternionConverter.cs.meta

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

+ 25 - 0
Assets/StreetLight/Serialization/Vector2Converter.cs

@@ -0,0 +1,25 @@
+using Newtonsoft.Json;
+using System;
+using UnityEngine;
+
+namespace Assets.StreetLight.Serialization
+{
+    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})");
+        }
+    }
+}

+ 11 - 0
Assets/StreetLight/Serialization/Vector2Converter.cs.meta

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

+ 25 - 0
Assets/StreetLight/Serialization/Vector3Converter.cs

@@ -0,0 +1,25 @@
+using Newtonsoft.Json;
+using System;
+using UnityEngine;
+
+namespace Assets.StreetLight.Serialization
+{
+    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})");
+        }
+    }
+}

+ 11 - 0
Assets/StreetLight/Serialization/Vector3Converter.cs.meta

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