ZedPersonDetector.cs 3.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. using Assets.StreetLight.Interfaces;
  2. using Assets.StreetLight.Poco;
  3. using Assets.StreetLight.Serialization;
  4. using Newtonsoft.Json;
  5. using Newtonsoft.Json.Serialization;
  6. using System;
  7. using System.Collections.Generic;
  8. using System.IO;
  9. using System.Linq;
  10. using System.Text;
  11. using System.Threading.Tasks;
  12. using UnityEngine;
  13. namespace Assets.StreetLight.Adapters
  14. {
  15. internal class ZedPersonDetector : IPersonDetector
  16. {
  17. private readonly ZEDManager zedManager;
  18. public event EventHandler<IEnumerable<Person>> PersonsDetected;
  19. public ZedPersonDetector(ZEDManager zedManager)
  20. {
  21. this.zedManager = zedManager;
  22. zedManager.OnObjectDetection += ZedManager_OnObjectDetection;
  23. zedManager.OnZEDReady += ZedManager_OnZEDReady;
  24. zedManager.objectDetectionModel = sl.DETECTION_MODEL.HUMAN_BODY_ACCURATE;
  25. zedManager.enableTracking = true;
  26. }
  27. private void ZedManager_OnZEDReady()
  28. {
  29. zedManager.StartObjectDetection();
  30. }
  31. private void ZedManager_OnObjectDetection(DetectionFrame detectionFrame)
  32. {
  33. var detectedObjects = detectionFrame.GetFilteredObjectList(true, true, false);
  34. var persons = detectedObjects.Where(d => d.objectClass == sl.OBJECT_CLASS.PERSON);
  35. var detectedPersons = from p in persons
  36. let position = p.Get3DWorldPosition()
  37. select new Person
  38. {
  39. Id = p.id,
  40. GroundPosition = new Vector3(position.x, position.y, 0)
  41. };
  42. PersonsDetected?.Invoke(this, detectedPersons.ToList());
  43. }
  44. private void WriteDetectionFrameToJson(DetectionFrame objFrame)
  45. {
  46. var errors = new List<string>();
  47. JsonSerializerSettings settings = new()
  48. {
  49. Converters = new List<JsonConverter>() {
  50. new Vector2Converter(),
  51. new Vector3Converter(),
  52. new QuaternionConverter(),
  53. new ColorConverter(),
  54. new Matrix4x4Converter()
  55. },
  56. Error = (s, a) =>
  57. {
  58. if (a.CurrentObject != null)
  59. {
  60. errors.Add(a.ErrorContext.Error.Message);
  61. }
  62. a.ErrorContext.Handled = true;
  63. },
  64. //TraceWriter = new TraceWriter()
  65. };
  66. var serializer = JsonSerializer.Create(settings);
  67. using (var file = File.CreateText(@$"C:\Users\nick.steyer\SmartStreetLight\{DateTime.Now:HH-mm-ss-fff}.json"))
  68. {
  69. try
  70. {
  71. serializer.Serialize(file, objFrame);
  72. }
  73. catch (Exception ex)
  74. {
  75. Debug.Log(ex.Message);
  76. Debug.Log(ex.StackTrace);
  77. }
  78. }
  79. }
  80. }
  81. }