nx_metadata_sdk  1.0
Metadata SDK
device_agent.h
1 // Copyright 2018-present Network Optix, Inc. Licensed under MPL 2.0: www.mozilla.org/MPL/2.0/
2 
3 #pragma once
4 
5 #include <set>
6 
7 #include <nx/sdk/analytics/helpers/consuming_device_agent.h>
8 #include <nx/sdk/analytics/i_object_metadata_packet.h>
9 
10 #include <nx/kit/json.h>
11 
12 namespace nx {
13 namespace vms_server_plugins {
14 namespace analytics {
15 namespace stub {
16 namespace object_streamer {
17 
19 {
20 public:
21  DeviceAgent(const nx::sdk::IDeviceInfo* deviceInfo);
22  virtual ~DeviceAgent() override;
23 
24 protected:
25  virtual std::string manifestString() const override;
26 
27  virtual bool pushCompressedVideoFrame(
28  const nx::sdk::analytics::ICompressedVideoPacket* videoFrame) override;
29 
30  virtual void doSetNeededMetadataTypes(
31  nx::sdk::Result<void>* outValue,
32  const nx::sdk::analytics::IMetadataTypes* neededMetadataTypes) override;
33 
35 
36 private:
37  struct Object
38  {
39  std::string typeId;
40  nx::sdk::Uuid trackId;
41  nx::sdk::analytics::Rect boundingBox;
42  std::map<std::string, std::string> attributes;
43  int frameNumberToGenerateObject = 0;
44  int64_t timestampUs = -1;
45  };
46 
47  enum class Issue
48  {
49  objectStreamIsNotAValidJson,
50  objectStreamIsNotAJsonArray,
51  objectItemIsNotAJsonObject,
52  trackIdIsNotAString,
53  trackIdIsNotAUuid,
54  typeIdIsNotAString,
55  frameNumberIsNotANumber,
56  boundingBoxIsNotAJsonObject,
57  topLeftXIsNotANumber,
58  topLeftYIsNotANumber,
59  widthIsNotANumber,
60  heightIsNotANumber,
61  objectIsOutOfBounds,
62  attributesFieldIsNotAJsonObject,
63  attributeValueIsNotAString,
64  timestampIsNotANumber,
65  };
66 
67  struct Issues
68  {
69  std::set<Issue> errors;
70  std::set<Issue> warnings;
71  };
72 
73 private:
74  static std::map<int, std::vector<Object>> parseObjectStreamFile(
75  const std::string& filePath,
76  Issues* outIssues);
77 
78  static bool parseCommonFields(
79  const nx::kit::Json& objectDescription,
80  Object* outObject,
81  Issues* outIssues);
82 
83  static bool parseBoundingBox(
84  const nx::kit::Json& objectDescription,
85  nx::sdk::analytics::Rect* outBoundingBox,
86  Issues* outIssues);
87 
88  static bool parseAttributes(
89  const nx::kit::Json& objectDescription,
90  std::map<std::string, std::string>* outAttributes,
91  Issues* outIssues);
92 
93  static bool parseTimestamp(
94  const nx::kit::Json& objectDescription,
95  int64_t* outTimestamp,
96  Issues* outIssues);
97 
98  static std::string issueToString(Issue issue);
99 
100  static std::string makePluginDiagnosticEventDescription(const std::set<Issue>& issues);
101 
102  std::vector<nx::sdk::Ptr<nx::sdk::analytics::IObjectMetadataPacket>> generateObjects(
103  int64_t currentFrameTimestampUs);
104 
105  void reportIssues(const Issues& issues);
106 
107 private:
108  std::map<int, std::vector<Object>> m_objectsByFrameNumber;
109  int m_frameNumber = 0;
110  int m_maxFrameNumber = 0;
111 };
112 
113 } // namespace object_streamer
114 } // namespace stub
115 } // namespace analytics
116 } // namespace vms_server_plugins
117 } // namespace nx
virtual nx::sdk::Result< const nx::sdk::ISettingsResponse * > settingsReceived() override
Definition: device_agent.cpp:115
Definition: json.cpp:80
Definition: i_compressed_video_packet.h:34
Definition: consuming_device_agent.h:38
Definition: i_metadata_types.h:13
Definition: result.h:81
Definition: uuid.h:22
Definition: i_device_info.h:14
Definition: result.h:47
Definition: apple_utils.h:6
virtual bool pushCompressedVideoFrame(const nx::sdk::analytics::ICompressedVideoPacket *videoFrame) override
Definition: device_agent.cpp:65
Definition: rect.h:11