MediaInfAiDataFaceRecognition.hpp
1 //
2 // Created by tangfahong on 2024/4/16.
3 //
4 
5 #ifndef EMX_MediaInfAiDataFaceRecognition_HPP
6 #define EMX_MediaInfAiDataFaceRecognition_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;
29  uint8_t quality;
30  uint8_t sharpness;
31  uint8_t age;
32  uint8_t gender;
33  uint8_t skin;
34  uint8_t glasses;
35  uint8_t beard;
36  uint8_t hat;
37  uint8_t hairColor;
38  uint8_t hairStyle;
39  uint8_t emotion;
40  uint8_t liveness;
41  int32_t ipd;
42  uint64_t captureTime;
43  uint64_t startTime;
44  uint64_t endTime;
46  uint32_t isMask;
47  uint32_t maskColor;
48  uint32_t maskType;
49  int32_t libId;
50  int32_t similarity;
53  int imgOff;
54  };
55 
56  void Alloc(int n) {
57  Free();
58  array = (DataMsg *) EP_MALLOC(n * (int) sizeof(DataMsg));
59  if (array) { memset((void *) array, 0, n * sizeof(DataMsg)); }
60  memset(&fullPic, 0, sizeof(MediaInfAiPic));
61  }
62 
63  void Free() {
64  if (array) {
65  for (int i = 0; i < num; i++) {
66  if ((array[i].pic.size > 0) && array[i].pic.img) {
67  free(array[i].pic.img);
68  array[i].pic.img = nullptr;
69  array[i].pic.size = 0;
70  }
71  }
72  if ((fullPic.size > 0) && fullPic.img) {
73  free(fullPic.img);
74  fullPic.img = nullptr;
75  }
76  free(array);
77  array = nullptr;
78  }
79  }
80 
81  int GetSerializeSize() override {
82  int totalImgSize = 0;
83  totalImgSize += sizeof(MediaInfAiPic);
84  totalImgSize += fullPic.size;
85  for (int i = 0; i < num; i++) { totalImgSize += array[i].pic.size; }
86  return (int) sizeof(num) + num * (int) sizeof(DataMsg) + totalImgSize;
87  }
88 
89  void Serialize(uint8_t *buffer) override {
90  int off = 0;
91  memcpy(buffer + off, &num, sizeof(num));
92  off += (int) sizeof(num);
93  memcpy(buffer + off, &fullPic, sizeof(MediaInfAiPic));
94  int fullImgOff = off + (int) sizeof(MediaInfAiPic);
95  if (fullPic.img && fullPic.size > 0) { memcpy(buffer + fullImgOff, fullPic.img, fullPic.size); }
96  off += (fullPic.size + sizeof(MediaInfAiPic));
97 
98  int imgOff = off + num * (int) sizeof(DataMsg);
99  for (int i = 0; i < num; i++) {
100  if (array[i].pic.img && array[i].pic.size > 0) {
101  memcpy(buffer + imgOff, array[i].pic.img, array[i].pic.size);
102  }
103  array[i].imgOff = imgOff;
104  memcpy(buffer + off, array + i, (int) sizeof(DataMsg));
105  imgOff += array[i].pic.size;
106  off += (int) sizeof(DataMsg);
107  }
108  }
109 
110  void Parse(const uint8_t *buffer, int size) override {
111  int off = 0;
112  memcpy(&num, buffer + off, sizeof(num));
113  off += sizeof(num);
114  Alloc(num);
115  memcpy(&fullPic, buffer + off, (int) sizeof(MediaInfAiPic));
116  off += (int) sizeof(MediaInfAiPic);
117  if (fullPic.size > 0) {
118  fullPic.img = (uint8_t *) EP_MALLOC(fullPic.size);
119  if (fullPic.img) { memcpy(fullPic.img, buffer + off, fullPic.size); }
120  }
121  off += fullPic.size;
122  if (num * (int) sizeof(DataMsg) + off <= size) {
123  memcpy(array, buffer + off, num * (int) sizeof(DataMsg));
124  for (int i = 0; i < num; i++) {
125  if (array[i].pic.size) {
126  array[i].pic.img = (uint8_t *) EP_MALLOC(array[i].pic.size);
127  if (array[i].pic.img) memcpy(array[i].pic.img, buffer + array[i].imgOff, array[i].pic.size);
128  }
129  }
130  }
131  }
132 
133  public:
134  int num;
136  MediaInfAiPic fullPic;//背景图,根据配置决定是否有截图
137  };
139 }// namespace Emx
140 
141 #endif//EMX_MediaInfAiDataFaceRecognition_HPP
Definition: MediaInfAiDataFaceRecognition.hpp:17
DataMsg * array
Definition: MediaInfAiDataFaceRecognition.hpp:135
int num
Definition: MediaInfAiDataFaceRecognition.hpp:134
void Parse(const uint8_t *buffer, int size) override
Definition: MediaInfAiDataFaceRecognition.hpp:110
virtual ~MediaInfAiDataFaceRecognition()
Definition: MediaInfAiDataFaceRecognition.hpp:23
int GetSerializeSize() override
Definition: MediaInfAiDataFaceRecognition.hpp:81
MediaInfAiPic fullPic
Definition: MediaInfAiDataFaceRecognition.hpp:136
void Free()
Definition: MediaInfAiDataFaceRecognition.hpp:63
void Alloc(int n)
Definition: MediaInfAiDataFaceRecognition.hpp:56
MediaInfAiDataFaceRecognition()
Definition: MediaInfAiDataFaceRecognition.hpp:19
void Serialize(uint8_t *buffer) override
Definition: MediaInfAiDataFaceRecognition.hpp:89
Definition: MediaInfAiData.hpp:29
Definition: EmxGpio.hpp:10
Definition: MediaRegion.hpp:18
Definition: MediaInfAiDataFaceRecognition.hpp:26
KeyPoint keyPoints[32]
人脸关键点
Definition: MediaInfAiDataFaceRecognition.hpp:51
int32_t libId
人脸库id 如果有人脸识别就返回相似度最高的人脸库id
Definition: MediaInfAiDataFaceRecognition.hpp:49
uint8_t hat
帽子 0=未知, 1=佩戴,2=未佩戴
Definition: MediaInfAiDataFaceRecognition.hpp:36
uint64_t captureTime
人脸抓拍到的毫秒时间戳
Definition: MediaInfAiDataFaceRecognition.hpp:42
uint32_t maskColor
口罩颜色
Definition: MediaInfAiDataFaceRecognition.hpp:47
int32_t ipd
人脸瞳距
Definition: MediaInfAiDataFaceRecognition.hpp:41
uint32_t isMask
是否佩戴口罩
Definition: MediaInfAiDataFaceRecognition.hpp:46
int32_t similarity
人脸和人脸库id相似度 [0~100]
Definition: MediaInfAiDataFaceRecognition.hpp:50
uint8_t liveness
活体 0=未知,1=是,2=不是
Definition: MediaInfAiDataFaceRecognition.hpp:40
uint32_t maskType
口罩类型
Definition: MediaInfAiDataFaceRecognition.hpp:48
uint8_t skin
肤色 0=未知, 1=白, 2=黑,3=黄
Definition: MediaInfAiDataFaceRecognition.hpp:33
uint64_t startTime
人脸开始出现时间的毫秒时间戳
Definition: MediaInfAiDataFaceRecognition.hpp:43
uint64_t id
当前抓拍的人脸id
Definition: MediaInfAiDataFaceRecognition.hpp:28
Rect rect
当前人脸位置信息
Definition: MediaInfAiDataFaceRecognition.hpp:45
uint8_t glasses
眼镜 0=未知, 1=佩戴,2=未佩戴
Definition: MediaInfAiDataFaceRecognition.hpp:34
uint8_t quality
当前人脸质量[0~100]
Definition: MediaInfAiDataFaceRecognition.hpp:29
int keyPointNums
人脸关键点数量
Definition: MediaInfAiDataFaceRecognition.hpp:52
uint8_t age
年龄
Definition: MediaInfAiDataFaceRecognition.hpp:31
uint8_t gender
性别 0=未知, 1=男性, 2=女性
Definition: MediaInfAiDataFaceRecognition.hpp:32
int imgOff
私有数据,记录内存偏移
Definition: MediaInfAiDataFaceRecognition.hpp:53
uint8_t hairColor
头发颜色 0=未知,1=黑,2=黄,3=红,4=棕,5=绿,6=蓝,7=紫,8=白,9=粉色
Definition: MediaInfAiDataFaceRecognition.hpp:37
uint8_t emotion
情绪 0=未知,1=高兴,2=惊讶,3=恐惧,4=厌恶,5=难过,6=愤怒,7=平静
Definition: MediaInfAiDataFaceRecognition.hpp:39
uint8_t hairStyle
头发发型 0=未知,1=短发,2=长发,3=直发,4=卷发,5=马尾,6=辫子,7=盘发
Definition: MediaInfAiDataFaceRecognition.hpp:38
uint64_t endTime
人脸结束时间,毫秒时间戳
Definition: MediaInfAiDataFaceRecognition.hpp:44
MediaInfAiPic pic
抠图数据
Definition: MediaInfAiDataFaceRecognition.hpp:27
uint8_t beard
胡须 0=未知, 1=有,2=没有
Definition: MediaInfAiDataFaceRecognition.hpp:35
uint8_t sharpness
当前人脸清晰度[0~100]
Definition: MediaInfAiDataFaceRecognition.hpp:30
Definition: MediaInfAiData.hpp:16
uint8_t * img
Definition: MediaInfAiData.hpp:26
int32_t size
Definition: MediaInfAiData.hpp:25
矩形框
Definition: MediaRegion.hpp:35