MediaInfAiDataClassify.hpp
1 //
2 // Created by tangfahong on 2024/07/20.
3 //
4 
5 #ifndef EMX_MediaInfAiDataClassify_HPP
6 #define EMX_MediaInfAiDataClassify_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 
23  virtual ~MediaInfAiDataClassify() { Free(); }
24 
25  public:
26  enum TypeE {
27  None = 0,
28  Face = 1,
29  Person = 2,
30  HumanHead = 3,
31  Bicycle = 4,
32  Car = 5,
33  Motorcycle = 6,
34  Bus = 7,
35  Truck = 8,
36  Train = 9,
37  Bird = 10,
38  Cat = 11,
39  Dog = 12,
40  Horse = 13,
41  Cow = 14,
42  Sheep = 15,
43  Pig = 16,
44  Rabbit = 17,
45  Duck = 18,
46  Goose = 19,
47  Chicken = 20,
48  Fish = 21,
49  Elephant = 22,
50  Lion = 23,
51  Tiger = 24,
52  Monkey = 25,
53  Panda = 26,
54  Giraffe = 27,
55  Snake = 28,
56  Tree = 29,
57  Flower = 30,
58  Grass = 31,
59  Mushroom = 32,
60  Cactus = 33,
61  Boat = 34,
62  Submarine = 35,
63  Airplane = 36,
64  Helicopter = 37,
65  Bed = 38,
66  Sofa = 39,
67  Table = 40,
68  Chair = 41,
69  Wardrobe = 42,
70  Television = 43,
71  Refrigerator = 44,
74  Computer = 47,
75  MobilePhone = 48,
76  House = 49,
77  Villa = 50,
78  School = 51,
79  Hospital = 52,
80  Library = 53,
81  ShoppingMall = 54,
82  Stadium = 55,
83  Eye = 56,
84  Nose = 57,
85  Mouth = 58,
86  Hand = 59,
87  Foot = 60,
88  Apple = 61,
89  Banana = 62,
90  Orange = 63,
91  Grape = 64,
92  Water = 65,
93  Milk = 66,
94  Coffee = 67,
95  Tea = 68,
96  Lake = 69,
97  Ocean = 70,
98  Pond = 71,
99  River = 72,
100  Stream = 73,
101  Flame = 74,
102  Smoke = 75,
103  End
104  };
105 
106  struct DataMsg {
109  uint64_t id;
111  int imgOff;
112  };
113 
114  void Alloc(int n) {
115  Free();
116  array = (DataMsg *) EP_MALLOC(n * (int) sizeof(DataMsg));
117  if (array) { memset((void *) array, 0, n * sizeof(DataMsg)); }
118  memset(&fullPic, 0, sizeof(MediaInfAiPic));
119  }
120 
121  void Free() {
122  if (array) {
123  for (int i = 0; i < num; i++) {
124  if ((array[i].pic.size > 0) && array[i].pic.img) {
125  free(array[i].pic.img);
126  array[i].pic.img = nullptr;
127  array[i].pic.size = 0;
128  }
129  }
130  if ((fullPic.size > 0) && fullPic.img) {
131  free(fullPic.img);
132  fullPic.img = nullptr;
133  }
134  free(array);
135  array = nullptr;
136  }
137  }
138 
139  int GetSerializeSize() override {
140  int totalImgSize = 0;
141  totalImgSize += sizeof(MediaInfAiPic);
142  totalImgSize += fullPic.size;
143  for (int i = 0; i < num; i++) { totalImgSize += array[i].pic.size; }
144  return (int) sizeof(num) + num * (int) sizeof(DataMsg) + totalImgSize;
145  }
146 
147  void Serialize(uint8_t *buffer) override {
148  int off = 0;
149  memcpy(buffer + off, &num, sizeof(num));
150  off += (int) sizeof(num);
151  memcpy(buffer + off, &fullPic, sizeof(MediaInfAiPic));
152  int fullImgOff = off + (int) sizeof(MediaInfAiPic);
153  if (fullPic.img && fullPic.size > 0) { memcpy(buffer + fullImgOff, fullPic.img, fullPic.size); }
154  off += (fullPic.size + sizeof(MediaInfAiPic));
155 
156  int imgOff = off + num * (int) sizeof(DataMsg);
157  for (int i = 0; i < num; i++) {
158  array[i].imgOff = imgOff;
159  if (array[i].pic.img && array[i].pic.size > 0) {
160  memcpy(buffer + imgOff, array[i].pic.img, array[i].pic.size);
161  }
162  imgOff += array[i].pic.size;
163  memcpy(buffer + off, array + i, (int) sizeof(DataMsg));
164  off += (int) sizeof(DataMsg);
165  }
166  }
167 
168  void Parse(const uint8_t *buffer, int size) override {
169  int off = 0;
170  memcpy(&num, buffer + off, sizeof(num));
171  off += sizeof(num);
172  Alloc(num);
173  memcpy(&fullPic, buffer + off, (int) sizeof(MediaInfAiPic));
174  off += (int) sizeof(MediaInfAiPic);
175  if (fullPic.size > 0) {
176  fullPic.img = (uint8_t *) EP_MALLOC(fullPic.size);
177  if (fullPic.img) { memcpy(fullPic.img, buffer + off, fullPic.size); }
178  }
179  off += fullPic.size;
180  if (num * (int) sizeof(DataMsg) + off <= size) {
181  memcpy(array, buffer + off, num * (int) sizeof(DataMsg));
182  for (int i = 0; i < num; i++) {
183  int imgOff = array[i].imgOff;
184  if (array[i].pic.size) {
185  array[i].pic.img = (uint8_t *) EP_MALLOC(array[i].pic.size);
186  if (array[i].pic.img) memcpy(array[i].pic.img, buffer + imgOff, array[i].pic.size);
187  imgOff += array[i].pic.size;
188  }
189  }
190  }
191  }
192 
193  public:
194  int num;
196  MediaInfAiPic fullPic;//背景图,根据配置决定是否有截图
197  };
199 }// namespace Emx
200 
201 #endif//EMX_MediaInfAiDataClassify_HPP
Definition: MediaInfAiDataClassify.hpp:17
void Alloc(int n)
Definition: MediaInfAiDataClassify.hpp:114
int GetSerializeSize() override
Definition: MediaInfAiDataClassify.hpp:139
void Free()
Definition: MediaInfAiDataClassify.hpp:121
MediaInfAiPic fullPic
Definition: MediaInfAiDataClassify.hpp:196
void Serialize(uint8_t *buffer) override
Definition: MediaInfAiDataClassify.hpp:147
TypeE
Definition: MediaInfAiDataClassify.hpp:26
@ Ocean
海洋
Definition: MediaInfAiDataClassify.hpp:97
@ Monkey
猴子
Definition: MediaInfAiDataClassify.hpp:52
@ Airplane
飞机
Definition: MediaInfAiDataClassify.hpp:63
@ Computer
电脑
Definition: MediaInfAiDataClassify.hpp:74
@ River
河流
Definition: MediaInfAiDataClassify.hpp:99
@ Apple
苹果
Definition: MediaInfAiDataClassify.hpp:88
@ Stream
溪流
Definition: MediaInfAiDataClassify.hpp:100
@ Fish
Definition: MediaInfAiDataClassify.hpp:48
@ Horse
Definition: MediaInfAiDataClassify.hpp:40
@ Train
火车
Definition: MediaInfAiDataClassify.hpp:36
@ Rabbit
Definition: MediaInfAiDataClassify.hpp:44
@ Person
Definition: MediaInfAiDataClassify.hpp:29
@ Goose
Definition: MediaInfAiDataClassify.hpp:46
@ Library
图书馆
Definition: MediaInfAiDataClassify.hpp:80
@ ShoppingMall
商场
Definition: MediaInfAiDataClassify.hpp:81
@ Truck
卡车
Definition: MediaInfAiDataClassify.hpp:35
@ None
默认无效
Definition: MediaInfAiDataClassify.hpp:27
@ Car
汽车
Definition: MediaInfAiDataClassify.hpp:32
@ Foot
Definition: MediaInfAiDataClassify.hpp:87
@ Smoke
烟雾
Definition: MediaInfAiDataClassify.hpp:102
@ Bird
Definition: MediaInfAiDataClassify.hpp:37
@ Pig
Definition: MediaInfAiDataClassify.hpp:43
@ Eye
眼睛
Definition: MediaInfAiDataClassify.hpp:83
@ Lake
湖泊
Definition: MediaInfAiDataClassify.hpp:96
@ Cat
Definition: MediaInfAiDataClassify.hpp:38
@ End
Definition: MediaInfAiDataClassify.hpp:103
@ Cow
Definition: MediaInfAiDataClassify.hpp:41
@ Television
电视
Definition: MediaInfAiDataClassify.hpp:70
@ Submarine
潜艇
Definition: MediaInfAiDataClassify.hpp:62
@ Lion
狮子
Definition: MediaInfAiDataClassify.hpp:50
@ HumanHead
人头
Definition: MediaInfAiDataClassify.hpp:30
@ Helicopter
直升机
Definition: MediaInfAiDataClassify.hpp:64
@ Flame
火焰
Definition: MediaInfAiDataClassify.hpp:101
@ Dog
Definition: MediaInfAiDataClassify.hpp:39
@ Grape
葡萄
Definition: MediaInfAiDataClassify.hpp:91
@ Water
Definition: MediaInfAiDataClassify.hpp:92
@ Hand
Definition: MediaInfAiDataClassify.hpp:86
@ Tiger
老虎
Definition: MediaInfAiDataClassify.hpp:51
@ Sofa
沙发
Definition: MediaInfAiDataClassify.hpp:66
@ Hospital
医院
Definition: MediaInfAiDataClassify.hpp:79
@ Pond
池塘
Definition: MediaInfAiDataClassify.hpp:98
@ Boat
Definition: MediaInfAiDataClassify.hpp:61
@ Chicken
Definition: MediaInfAiDataClassify.hpp:47
@ WashingMachine
洗衣机
Definition: MediaInfAiDataClassify.hpp:72
@ Sheep
Definition: MediaInfAiDataClassify.hpp:42
@ Giraffe
长颈鹿
Definition: MediaInfAiDataClassify.hpp:54
@ Tree
Definition: MediaInfAiDataClassify.hpp:56
@ Chair
椅子
Definition: MediaInfAiDataClassify.hpp:68
@ Elephant
大象
Definition: MediaInfAiDataClassify.hpp:49
@ Face
人脸
Definition: MediaInfAiDataClassify.hpp:28
@ Snake
Definition: MediaInfAiDataClassify.hpp:55
@ Motorcycle
摩托车
Definition: MediaInfAiDataClassify.hpp:33
@ Refrigerator
冰箱
Definition: MediaInfAiDataClassify.hpp:71
@ MobilePhone
手机
Definition: MediaInfAiDataClassify.hpp:75
@ Flower
Definition: MediaInfAiDataClassify.hpp:57
@ Table
桌子
Definition: MediaInfAiDataClassify.hpp:67
@ Stadium
体育馆
Definition: MediaInfAiDataClassify.hpp:82
@ Grass
Definition: MediaInfAiDataClassify.hpp:58
@ School
学校
Definition: MediaInfAiDataClassify.hpp:78
@ Duck
Definition: MediaInfAiDataClassify.hpp:45
@ MicrowaveOven
微波炉
Definition: MediaInfAiDataClassify.hpp:73
@ Mouth
嘴巴
Definition: MediaInfAiDataClassify.hpp:85
@ Bus
公交车
Definition: MediaInfAiDataClassify.hpp:34
@ Nose
鼻子
Definition: MediaInfAiDataClassify.hpp:84
@ Wardrobe
衣柜
Definition: MediaInfAiDataClassify.hpp:69
@ Coffee
咖啡
Definition: MediaInfAiDataClassify.hpp:94
@ Banana
香蕉
Definition: MediaInfAiDataClassify.hpp:89
@ House
房子
Definition: MediaInfAiDataClassify.hpp:76
@ Bed
Definition: MediaInfAiDataClassify.hpp:65
@ Cactus
仙人掌
Definition: MediaInfAiDataClassify.hpp:60
@ Panda
熊猫
Definition: MediaInfAiDataClassify.hpp:53
@ Villa
别墅
Definition: MediaInfAiDataClassify.hpp:77
@ Bicycle
自行车
Definition: MediaInfAiDataClassify.hpp:31
@ Mushroom
蘑菇
Definition: MediaInfAiDataClassify.hpp:59
@ Milk
牛奶
Definition: MediaInfAiDataClassify.hpp:93
@ Tea
Definition: MediaInfAiDataClassify.hpp:95
@ Orange
橙子
Definition: MediaInfAiDataClassify.hpp:90
MediaInfAiDataClassify()
Definition: MediaInfAiDataClassify.hpp:19
virtual ~MediaInfAiDataClassify()
Definition: MediaInfAiDataClassify.hpp:23
void Parse(const uint8_t *buffer, int size) override
Definition: MediaInfAiDataClassify.hpp:168
int num
Definition: MediaInfAiDataClassify.hpp:194
DataMsg * array
Definition: MediaInfAiDataClassify.hpp:195
Definition: MediaInfAiData.hpp:29
TypeE
AI数据类型
Definition: MediaInfAiData.hpp:43
Definition: EmxGpio.hpp:10
Definition: MediaInfAiDataClassify.hpp:106
uint64_t id
目标id
Definition: MediaInfAiDataClassify.hpp:109
Rect rect
当前目标位置信息
Definition: MediaInfAiDataClassify.hpp:110
MediaInfAiPic pic
目标抠图,根据配置参数决定是否有截图
Definition: MediaInfAiDataClassify.hpp:108
TypeE type
Definition: MediaInfAiDataClassify.hpp:107
int imgOff
私有数据,记录内存偏移
Definition: MediaInfAiDataClassify.hpp:111
Definition: MediaInfAiData.hpp:16
uint8_t * img
Definition: MediaInfAiData.hpp:26
int32_t size
Definition: MediaInfAiData.hpp:25
矩形框
Definition: MediaRegion.hpp:35