MediaInfAiDataPersonRecognition.hpp
1 //
2 // Created by tangfahong on 2024/4/10.
3 //
4 
5 #ifndef EMX_MediaInfAiDataPersonRecognition_HPP
6 #define EMX_MediaInfAiDataPersonRecognition_HPP
7 
8 #include "MediaInfAiData.hpp"
9 #include "MediaRegion.hpp"
10 #include <cstring>
11 
12 namespace Emx {
18  public:
20  memset(&fullPic, 0, sizeof(MediaInfAiPic));
21  }
22 
24 
25  public:
26  struct DataMsg {
28  uint64_t id;
30  /*衣服类型*/
31  enum class ClothesTypeE : uint32_t {
32  Shirts,
33  TShirts,
34  Hoodies,
35  Coats,
38  uint32_t clothesColor;
39  /*下装类型*/
40  enum class BottomsTypeE : uint32_t {
41  Skirts,
42  Shorts,
43  Pants
45  uint32_t bottomsColor;
46  /*人的行为类型*/
47  enum class BehaviorTypeE : uint32_t {
48  Standing,
49  Squatting,
50  LieDown,
51  Running,
52  Walk,
53  Bend,
54  CrossArms,
55  Wave1,
56  Wave2,
57  Loitering,
58  Fighting,
59  PhoneUsage,
60  Butt
64  int imgOff;
65  };
66 
67  void Alloc(int n) {
68  Free();
69  array = (DataMsg *) EP_MALLOC(n * (int) sizeof(DataMsg));
70  if (array) { memset((void *) array, 0, n * sizeof(DataMsg)); }
71  memset(&fullPic, 0, sizeof(MediaInfAiPic));
72  }
73 
74  void Free() {
75  if (array) {
76  for (int i = 0; i < num; i++) {
77  if ((array[i].pic.size > 0) && array[i].pic.img) {
78  free(array[i].pic.img);
79  array[i].pic.img = nullptr;
80  array[i].pic.size = 0;
81  }
82  }
83  if ((fullPic.size > 0) && fullPic.img) {
84  free(fullPic.img);
85  fullPic.img = nullptr;
86  }
87  free(array);
88  array = nullptr;
89  }
90  }
91 
92  int GetSerializeSize() override {
93  int totalImgSize = 0;
94  totalImgSize += sizeof(MediaInfAiPic);
95  totalImgSize += fullPic.size;
96  for (int i = 0; i < num; i++) { totalImgSize += array[i].pic.size; }
97  return (int) sizeof(num) + num * (int) sizeof(DataMsg) + totalImgSize;
98  }
99 
100  void Serialize(uint8_t *buffer) override {
101  int off = 0;
102  memcpy(buffer + off, &num, sizeof(num));
103  off += (int) sizeof(num);
104  memcpy(buffer + off, &fullPic, sizeof(MediaInfAiPic));
105  int fullImgOff = off + (int) sizeof(MediaInfAiPic);
106  if (fullPic.img && fullPic.size > 0) { memcpy(buffer + fullImgOff, fullPic.img, fullPic.size); }
107  off += (fullPic.size + sizeof(MediaInfAiPic));
108 
109  int imgOff = off + num * (int) sizeof(DataMsg);
110  for (int i = 0; i < num; i++) {
111  array[i].imgOff = imgOff;
112  if (array[i].pic.img && array[i].pic.size > 0) {
113  memcpy(buffer + imgOff, array[i].pic.img, array[i].pic.size);
114  }
115  imgOff += array[i].pic.size;
116  memcpy(buffer + off, array + i, (int) sizeof(DataMsg));
117  off += (int) sizeof(DataMsg);
118  }
119  }
120 
121  void Parse(const uint8_t *buffer, int size) override {
122  int off = 0;
123  memcpy(&num, buffer + off, sizeof(num));
124  off += sizeof(num);
125  Alloc(num);
126  memcpy(&fullPic, buffer + off, (int) sizeof(MediaInfAiPic));
127  off += (int) sizeof(MediaInfAiPic);
128  if (fullPic.size > 0) {
129  fullPic.img = (uint8_t *) EP_MALLOC(fullPic.size);
130  if (fullPic.img) { memcpy(fullPic.img, buffer + off, fullPic.size); }
131  }
132  off += fullPic.size;
133  if (num * (int) sizeof(DataMsg) + off <= size) {
134  memcpy(array, buffer + off, num * (int) sizeof(DataMsg));
135  for (int i = 0; i < num; i++) {
136  int imgOff = array[i].imgOff;
137  if (array[i].pic.size) {
138  array[i].pic.img = (uint8_t *) EP_MALLOC(array[i].pic.size);
139  if (array[i].pic.img) memcpy(array[i].pic.img, buffer + imgOff, array[i].pic.size);
140  imgOff += array[i].pic.size;
141  }
142  }
143  }
144  }
145 
146  public:
147  int num;
149  MediaInfAiPic fullPic;//背景图,根据配置决定是否有截图
150  };
152 }// namespace Emx
153 
154 #endif//EMX_MediaInfAiDataPersonRecognition_HPP
Definition: MediaInfAiDataPersonRecognition.hpp:17
void Alloc(int n)
Definition: MediaInfAiDataPersonRecognition.hpp:67
MediaInfAiDataPersonRecognition()
Definition: MediaInfAiDataPersonRecognition.hpp:19
void Serialize(uint8_t *buffer) override
Definition: MediaInfAiDataPersonRecognition.hpp:100
int GetSerializeSize() override
Definition: MediaInfAiDataPersonRecognition.hpp:92
virtual ~MediaInfAiDataPersonRecognition()
Definition: MediaInfAiDataPersonRecognition.hpp:23
void Parse(const uint8_t *buffer, int size) override
Definition: MediaInfAiDataPersonRecognition.hpp:121
int num
Definition: MediaInfAiDataPersonRecognition.hpp:147
DataMsg * array
Definition: MediaInfAiDataPersonRecognition.hpp:148
MediaInfAiPic fullPic
Definition: MediaInfAiDataPersonRecognition.hpp:149
void Free()
Definition: MediaInfAiDataPersonRecognition.hpp:74
Definition: MediaInfAiData.hpp:29
Definition: EmxGpio.hpp:10
Definition: MediaRegion.hpp:18
Definition: MediaInfAiDataPersonRecognition.hpp:26
uint32_t bottomsColor
下装rgb颜色
Definition: MediaInfAiDataPersonRecognition.hpp:45
enum Emx::MediaInfAiDataPersonRecognition::DataMsg::BottomsTypeE bottomsType
KeyPoint keyPoints[32]
人体关键点
Definition: MediaInfAiDataPersonRecognition.hpp:62
MediaInfAiPic pic
人形抠图,根据配置参数决定是否有截图
Definition: MediaInfAiDataPersonRecognition.hpp:27
int keyPointNums
人体关键点数量
Definition: MediaInfAiDataPersonRecognition.hpp:63
Rect rect
人形位置信息
Definition: MediaInfAiDataPersonRecognition.hpp:29
BottomsTypeE
Definition: MediaInfAiDataPersonRecognition.hpp:40
int imgOff
私有数据,记录内存偏移
Definition: MediaInfAiDataPersonRecognition.hpp:64
ClothesTypeE
Definition: MediaInfAiDataPersonRecognition.hpp:31
uint32_t clothesColor
衣服rgb颜色
Definition: MediaInfAiDataPersonRecognition.hpp:38
uint64_t id
目标id
Definition: MediaInfAiDataPersonRecognition.hpp:28
enum Emx::MediaInfAiDataPersonRecognition::DataMsg::BehaviorTypeE behaviorType
enum Emx::MediaInfAiDataPersonRecognition::DataMsg::ClothesTypeE clothesType
BehaviorTypeE
Definition: MediaInfAiDataPersonRecognition.hpp:47
Definition: MediaInfAiData.hpp:16
uint8_t * img
Definition: MediaInfAiData.hpp:26
int32_t size
Definition: MediaInfAiData.hpp:25
矩形框
Definition: MediaRegion.hpp:35