ax_skel_struct.h 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387
  1. /**********************************************************************************
  2. *
  3. * Copyright (c) 2019-2022 Beijing AXera Technology Co., Ltd. All Rights Reserved.
  4. *
  5. * This source file is the property of Beijing AXera Technology Co., Ltd. and
  6. * may not be copied or distributed in any isomorphic form without the prior
  7. * written consent of Beijing AXera Technology Co., Ltd.
  8. *
  9. **********************************************************************************/
  10. #ifndef _AX_SKEL_STRUCT_H_
  11. #define _AX_SKEL_STRUCT_H_
  12. #include "ax_global_type.h"
  13. #ifdef __cplusplus
  14. extern "C" {
  15. #endif
  16. /// @brief pipeline type
  17. typedef enum axSKEL_PPL_E {
  18. AX_SKEL_PPL_BODY = 1, /* body detection pipeline */
  19. AX_SKEL_PPL_POSE, /* pose detection pipeline */
  20. AX_SKEL_PPL_FH, /* facehuman detection pipeline */
  21. AX_SKEL_PPL_HVCFP, /* hvcfp detection pipeline */
  22. AX_SKEL_PPL_FACE_FEATURE, /* face feature detection pipeline */
  23. AX_SKEL_PPL_HVCP, /* hvcp detection pipeline */
  24. AX_SKEL_PPL_MAX,
  25. } AX_SKEL_PPL_E;
  26. /// @brief init parameter struct
  27. typedef struct axSKEL_INIT_PARAM_S {
  28. const AX_CHAR *pStrModelDeploymentPath;
  29. } AX_SKEL_INIT_PARAM_S;
  30. /// @brief rect struct
  31. typedef struct axSKEL_RECT_S {
  32. AX_F32 fX;
  33. AX_F32 fY;
  34. AX_F32 fW;
  35. AX_F32 fH;
  36. } AX_SKEL_RECT_S;
  37. /// @brief point struct
  38. typedef struct axSKEL_POINT_S {
  39. AX_F32 fX;
  40. AX_F32 fY;
  41. } AX_SKEL_POINT_S;
  42. /// @brief point set struct
  43. typedef struct axSKEL_POINT_SET_S {
  44. const AX_CHAR *pstrObjectCategory;
  45. AX_SKEL_POINT_S stPoint;
  46. AX_F32 fConfidence;
  47. } AX_SKEL_POINT_SET_S;
  48. /// @brief meta info struct
  49. typedef struct axSKEL_META_INFO_S {
  50. AX_CHAR *pstrType;
  51. AX_CHAR *pstrValue;
  52. } AX_SKEL_META_INFO_S;
  53. /// @brief config item struct
  54. typedef struct axSKEL_CONFIG_ITEM_S {
  55. AX_CHAR *pstrType;
  56. AX_VOID *pstrValue;
  57. AX_U32 nValueSize;
  58. } AX_SKEL_CONFIG_ITEM_S;
  59. /// @brief config struct
  60. typedef struct axSKEL_CONFIG_S {
  61. AX_U32 nSize;
  62. AX_SKEL_CONFIG_ITEM_S *pstItems;
  63. } AX_SKEL_CONFIG_S;
  64. /// @brief handle parameter struct
  65. typedef struct axSKEL_HANDLE_PARAM_S {
  66. AX_SKEL_PPL_E ePPL;
  67. AX_U32 nWidth;
  68. AX_U32 nHeight;
  69. AX_U32 nFrameDepth;
  70. AX_U32 nFrameCacheDepth;
  71. AX_SKEL_CONFIG_S stConfig;
  72. } AX_SKEL_HANDLE_PARAM_S;
  73. /// @brief feature item struct
  74. typedef struct axSKEL_FEATURE_ITEM_S {
  75. AX_CHAR *pstrType;
  76. AX_VOID *pstrValue;
  77. AX_U32 nValueSize;
  78. } AX_SKEL_FEATURE_ITEM_S;
  79. /// @brief tract status
  80. typedef enum axSKEL_TRACK_STATUS_E {
  81. AX_SKEL_TRACK_STATUS_NEW,
  82. AX_SKEL_TRACK_STATUS_UPDATE,
  83. AX_SKEL_TRACK_STATUS_DIE,
  84. AX_SKEL_TRACK_STATUS_SELECT,
  85. AX_SKEL_TRACK_STATUS_MAX,
  86. } AX_SKEL_TRACK_STATUS_E;
  87. /// @brief crop frame struct
  88. typedef struct axSKEL_CROP_FRAME_S {
  89. AX_U64 nFrameId;
  90. AX_U8 *pFrameData;
  91. AX_U32 nFrameDataSize;
  92. AX_U32 nFrameWidth;
  93. AX_U32 nFrameHeight;
  94. } AX_SKEL_CROP_FRAME_S;
  95. /// @brief pose blur config
  96. typedef struct axSKEL_POSE_BLUR_S {
  97. AX_F32 fPitch;
  98. AX_F32 fYaw;
  99. AX_F32 fRoll;
  100. AX_F32 fBlur; // 0 - 1
  101. } AX_SKEL_POSE_BLUR_S;
  102. /// @brief object binding
  103. typedef struct axSKEL_OBJECT_BINDING_S {
  104. const AX_CHAR *pstrObjectCategoryBind;
  105. AX_U64 nTrackId;
  106. } AX_SKEL_OBJECT_BINDING_S;
  107. /// @brief object item struct
  108. typedef struct axSKEL_OBJECT_ITEM_S {
  109. const AX_CHAR *pstrObjectCategory;
  110. AX_SKEL_RECT_S stRect;
  111. AX_U64 nFrameId;
  112. AX_U64 nTrackId;
  113. AX_SKEL_TRACK_STATUS_E eTrackState;
  114. AX_F32 fConfidence;
  115. AX_SKEL_POSE_BLUR_S stFacePoseBlur;
  116. AX_BOOL bCropFrame;
  117. AX_SKEL_CROP_FRAME_S stCropFrame;
  118. AX_BOOL bPanoraFrame;
  119. AX_SKEL_CROP_FRAME_S stPanoraFrame;
  120. AX_U8 nPointSetSize;
  121. AX_SKEL_POINT_SET_S *pstPointSet;
  122. AX_U8 nFeatureSize;
  123. AX_SKEL_FEATURE_ITEM_S *pstFeatureItem;
  124. AX_U32 nObjectBindSize;
  125. AX_SKEL_OBJECT_BINDING_S *pstObjectBind;
  126. AX_U32 nMetaInfoSize;
  127. AX_SKEL_META_INFO_S *pstMetaInfo;
  128. } AX_SKEL_OBJECT_ITEM_S;
  129. typedef struct axSKEL_FRAME_CACHE_LIST_S {
  130. AX_U64 nFrameId;
  131. } AX_SKEL_FRAME_CACHE_LIST_S;
  132. /// @brief result struct
  133. typedef struct axSKEL_RESULT_S {
  134. AX_U64 nFrameId;
  135. AX_U32 nOriginalWidth;
  136. AX_U32 nOriginalHeight;
  137. AX_U32 nObjectSize;
  138. AX_SKEL_OBJECT_ITEM_S *pstObjectItems;
  139. AX_U32 nCacheListSize;
  140. AX_SKEL_FRAME_CACHE_LIST_S *pstCacheList;
  141. AX_VOID *pUserData;
  142. AX_VOID *pPrivate;
  143. } AX_SKEL_RESULT_S;
  144. /// @brief frame struct
  145. typedef struct axSKEL_FRAME_S {
  146. AX_U64 nFrameId;
  147. AX_VIDEO_FRAME_S stFrame;
  148. AX_VOID *pUserData;
  149. } AX_SKEL_FRAME_S;
  150. /// @brief ppl config struct
  151. typedef struct axSKEL_PPL_CONFIG_S {
  152. AX_SKEL_PPL_E ePPL;
  153. AX_CHAR *pstrPPLConfigKey;
  154. } AX_SKEL_PPL_CONFIG_S;
  155. /// @brief capability struct
  156. typedef struct axSKEL_CAPABILITY_S {
  157. AX_U32 nPPLConfigSize;
  158. AX_SKEL_PPL_CONFIG_S *pstPPLConfig;
  159. AX_U32 nMetaInfoSize;
  160. AX_SKEL_META_INFO_S *pstMetaInfo;
  161. AX_VOID *pPrivate;
  162. } AX_SKEL_CAPABILITY_S;
  163. /// @brief version info struct
  164. typedef struct axSKEL_VERSION_INFO_S {
  165. AX_CHAR *pstrVersion;
  166. AX_U32 nMetaInfoSize;
  167. AX_SKEL_META_INFO_S *pstMetaInfo;
  168. AX_VOID *pPrivate;
  169. } AX_SKEL_VERSION_INFO_S;
  170. /// @brief handle definition
  171. typedef AX_VOID *AX_SKEL_HANDLE;
  172. /// @brief callback definition
  173. typedef AX_VOID (*AX_SKEL_RESULT_CALLBACK_FUNC)(AX_SKEL_HANDLE pHandle, AX_SKEL_RESULT_S *pstResult, AX_VOID *pUserData);
  174. /* begin of config param */
  175. /// @brief Common Threshold Config
  176. typedef struct axSKEL_COMMON_THRESHOLD_CONFIG_S {
  177. AX_F32 fValue;
  178. } AX_SKEL_COMMON_THRESHOLD_CONFIG_S;
  179. // cmd: "body_max_target_count", value_type: AX_SKEL_COMMON_THRESHOLD_CONFIG_S *
  180. // cmd: "vehicle_max_target_count", value_type: AX_SKEL_COMMON_THRESHOLD_CONFIG_S *
  181. // cmd: "cycle_max_target_count", value_type: AX_SKEL_COMMON_THRESHOLD_CONFIG_S *
  182. // cmd: "body_confidence", value_type: AX_SKEL_COMMON_THRESHOLD_CONFIG_S *
  183. // cmd: "face_confidence", value_type: AX_SKEL_COMMON_THRESHOLD_CONFIG_S *
  184. // cmd: "vehicle_confidence", value_type: AX_SKEL_COMMON_THRESHOLD_CONFIG_S *
  185. // cmd: "cycle_confidence", value_type: AX_SKEL_COMMON_THRESHOLD_CONFIG_S *
  186. // cmd: "plate_confidence", value_type: AX_SKEL_COMMON_THRESHOLD_CONFIG_S *
  187. // cmd: "crop_encoder_qpLevel", value_type: AX_SKEL_COMMON_THRESHOLD_CONFIG_S *
  188. // cmd: "venc_attr_config", value_type: AX_SKEL_COMMON_THRESHOLD_CONFIG_S *
  189. /// @brief Common Enable Config
  190. typedef struct axSKEL_COMMON_ENABLE_CONFIG_S {
  191. AX_BOOL bEnable;
  192. } AX_SKEL_COMMON_ENABLE_CONFIG_S;
  193. // cmd: "push_bind_enable", value_type: AX_SKEL_COMMON_ENABLE_CONFIG_S *
  194. // cmd: "track_enable", value_type: AX_SKEL_COMMON_ENABLE_CONFIG_S *
  195. // cmd: "push_enable", value_type: AX_SKEL_COMMON_ENABLE_CONFIG_S *
  196. // cmd: "push_attr_always", value_type: AX_SKEL_COMMON_ENABLE_CONFIG_S *
  197. /// @brief object size filter config
  198. typedef struct axSKEL_OBJECT_SIZE_FILTER_CONFIG_S {
  199. AX_U32 nWidth;
  200. AX_U32 nHeight;
  201. } AX_SKEL_OBJECT_SIZE_FILTER_CONFIG_S;
  202. // cmd: "body_min_size", value_type: AX_SKEL_OBJECT_SIZE_FILTER_CONFIG_S *
  203. // cmd: "face_min_size", value_type: AX_SKEL_OBJECT_SIZE_FILTER_CONFIG_S *
  204. // cmd: "vehicle_min_size", value_type: AX_SKEL_OBJECT_SIZE_FILTER_CONFIG_S *
  205. // cmd: "cycle_min_size", value_type: AX_SKEL_OBJECT_SIZE_FILTER_CONFIG_S *
  206. // cmd: "plate_min_size", value_type: AX_SKEL_OBJECT_SIZE_FILTER_CONFIG_S *
  207. /// @brief roi config
  208. typedef struct axSKEL_ROI_CONFIG_S {
  209. AX_BOOL bEnable;
  210. AX_SKEL_RECT_S stRect;
  211. } AX_SKEL_ROI_CONFIG_S;
  212. // cmd:"detect_roi", value_type: AX_SKEL_ROI_CONFIG_S*
  213. /// @brief roi point config
  214. #define AX_SKEL_ROI_POINT_MAX (10)
  215. typedef struct axSKEL_ROI_POLYGON_CONFIG_S {
  216. AX_BOOL bEnable;
  217. AX_U32 nPointNum;
  218. AX_SKEL_POINT_S *pstPoint; // points should as clockwise or anti-clockwise
  219. } AX_SKEL_ROI_POLYGON_CONFIG_S;
  220. // cmd:"detect_roi_polygon", value_type: AX_SKEL_ROI_POLYGON_CONFIG_S*
  221. /// @brief push mode
  222. typedef enum axSKEL_PUSH_MODE_E {
  223. AX_SKEL_PUSH_MODE_FAST = 1,
  224. AX_SKEL_PUSH_MODE_INTERVAL,
  225. AX_SKEL_PUSH_MODE_BEST,
  226. AX_SKEL_PUSH_MODE_MAX
  227. } AX_SKEL_PUSH_MODE_E;
  228. /// @brief push config
  229. typedef struct axSKEL_PUSH_STRATEGY_S {
  230. AX_SKEL_PUSH_MODE_E ePushMode;
  231. AX_U32 nIntervalTimes; // only for AX_SKEL_PUSH_MODE_INTERVAL or AX_SKEL_PUSH_MODE_FAST
  232. AX_U32 nPushCounts; // only for AX_SKEL_PUSH_MODE_INTERVAL or AX_SKEL_PUSH_MODE_FAST
  233. AX_BOOL bPushSameFrame; // AX_FALSE: push cross frame; AX_TRUE: push same frame
  234. } AX_SKEL_PUSH_STRATEGY_S;
  235. // cmd: "push_strategy", value_type: AX_SKEL_ROI_CONFIG_S *
  236. /// @brief Crop encoder threshold config
  237. typedef struct axSKEL_CROP_ENCODER_THRESHOLD_CONFIG_S {
  238. AX_F32 fScaleLeft;
  239. AX_F32 fScaleRight;
  240. AX_F32 fScaleTop;
  241. AX_F32 fScaleBottom;
  242. } AX_SKEL_CROP_ENCODER_THRESHOLD_CONFIG_S;
  243. // cmd:"body_crop_encoder", value_type: AX_SKEL_CROP_ENCODER_THRESHOLD_CONFIG_S *
  244. // cmd:"vehicle_crop_encoder", value_type: AX_SKEL_CROP_ENCODER_THRESHOLD_CONFIG_S *
  245. // cmd:"cycle_crop_encoder", value_type: AX_SKEL_CROP_ENCODER_THRESHOLD_CONFIG_S *
  246. // cmd:"face_crop_encoder", value_type: AX_SKEL_CROP_ENCODER_THRESHOLD_CONFIG_S *
  247. // cmd:"plate_crop_encoder", value_type: AX_SKEL_CROP_ENCODER_THRESHOLD_CONFIG_S *
  248. /// @brief Reszie panorama config
  249. typedef struct axSKEL_RESIZE_CONFIG_S {
  250. AX_F32 fW;
  251. AX_F32 fH;
  252. } AX_SKEL_RESIZE_CONFIG_S;
  253. // cmd:"resize_panorama_encoder_config", value_type: AX_SKEL_RESIZE_CONFIG_S *
  254. /// @brief push panorama config
  255. typedef struct axSKEL_PUSH_PANORAMA_CONFIG_S {
  256. AX_BOOL bEnable;
  257. AX_U32 nQuality;
  258. } AX_SKEL_PUSH_PANORAMA_CONFIG_S;
  259. // cmd:"push_panorama", value_type: AX_SKEL_PUSH_PANORAMA_CONFIG_S *
  260. /// @brief face attr filter config
  261. typedef struct axSKEL_FACE_ATTR_FILTER_CONFIG_S {
  262. AX_U32 nWidth;
  263. AX_U32 nHeight;
  264. AX_SKEL_POSE_BLUR_S stPoseblur;
  265. } AX_SKEL_FACE_ATTR_FILTER_CONFIG_S;
  266. /// @brief common attr filter config
  267. typedef struct axSKEL_COMMON_ATTR_FILTER_CONFIG_S {
  268. AX_F32 fQuality; // 0 - 1
  269. } AX_SKEL_COMMON_ATTR_FILTER_CONFIG_S;
  270. /// @brief attr filter config
  271. typedef struct axSKEL_ATTR_FILTER_CONFIG_S {
  272. union {
  273. AX_SKEL_FACE_ATTR_FILTER_CONFIG_S stFaceAttrFilterConfig; // face
  274. AX_SKEL_COMMON_ATTR_FILTER_CONFIG_S stCommonAttrFilterConfig; // body,vehicle,cycle,plate
  275. };
  276. } AX_SKEL_ATTR_FILTER_CONFIG_S;
  277. // cmd:"push_quality_face", value_type: AX_SKEL_ATTR_FILTER_CONFIG_S *
  278. // cmd:"push_quality_body", value_type: AX_SKEL_ATTR_FILTER_CONFIG_S *
  279. // cmd:"push_quality_vehicle", value_type: AX_SKEL_ATTR_FILTER_CONFIG_S *
  280. // cmd:"push_quality_cycle", value_type: AX_SKEL_ATTR_FILTER_CONFIG_S *
  281. // cmd:"push_quality_plate", value_type: AX_SKEL_ATTR_FILTER_CONFIG_S *
  282. /// @brief config target item
  283. typedef struct axSKEL_TARGET_ITEMG_S {
  284. const AX_CHAR *pstrObjectCategory;
  285. } AX_SKEL_TARGET_ITEM_S;
  286. /// @brief config object target
  287. typedef struct axSKEL_TARGET_CONFIG_S {
  288. AX_U32 nSize;
  289. AX_SKEL_TARGET_ITEM_S *pstItems;
  290. } AX_SKEL_TARGET_CONFIG_S;
  291. // cmd:"target_config", value_type: AX_SKEL_TARGET_CONFIG_S *
  292. // cmd:"push_target_config", value_type: AX_SKEL_TARGET_CONFIG_S *
  293. typedef enum axSKEL_ANALYZER_ATTR_E {
  294. AX_SKEL_ANALYZER_ATTR_NONE = 0,
  295. AX_SKEL_ANALYZER_ATTR_FACE_FEATURE,
  296. AX_SKEL_ANALYZER_ATTR_FACE_ATTRIBUTE,
  297. AX_SKEL_ANALYZER_ATTR_PLATE_ATTRIBUTE,
  298. AX_SKEL_ANALYZER_ATTR_MAX,
  299. } AX_SKEL_ANALYZER_ATTR_E;
  300. /// @brief config target attribute analyzer
  301. typedef struct axSKEL_ANALYZER_CONFIG_S {
  302. AX_U32 nSize;
  303. AX_SKEL_ANALYZER_ATTR_E *peItems;
  304. } AX_SKEL_ANALYZER_CONFIG_S;
  305. // cmd:"analyzer_attr_config", value_type: AX_SKEL_ATTR_FILTER_CONFIG_S *
  306. /* end of config param */
  307. /* begin of search */
  308. /// @brief search: group feature param
  309. typedef struct axSKEL_SEARCH_FEATURE_PARAM_S {
  310. AX_U32 nBatchSize;
  311. AX_U64* pObjectIds; // 1 dimensional[batch_size] continuous storage
  312. AX_U8* pFeatures; // 1 dimensional[batch_size*feature_size] continuous storage
  313. AX_VOID **ppObjectInfos; // 1 dimensional[batch_size] continuous storage // 'object_infos' can be null
  314. } AX_SKEL_SEARCH_FEATURE_PARAM_S;
  315. /// @brief search: group insert feature param
  316. typedef struct axSKEL_SEARCH_PARAM_S {
  317. AX_U32 nBatchSize;
  318. AX_U32 nTop_k;
  319. AX_U8 *pFeatures; // 1 dimensional[batch_size*feature_size] continuous storage
  320. // If the following types are valid, the filter policy will be activated. If not, the filter
  321. // policy will not be performed
  322. } AX_SKEL_SEARCH_PARAM_S;
  323. /// @brief search: result of search
  324. typedef struct axSKEL_SEARCH_RESULT_S {
  325. AX_U32 nBatchSize; // object number of search
  326. AX_U32 nTop_k; // object with k highest scores in object group
  327. AX_F32 *pfScores; // scorces of object matching in object group
  328. AX_U64 *pObjectIds; // object id of object matching in object group
  329. AX_VOID **ppObjectInfos; // information of object matching in object group(pass-through by user)
  330. AX_VOID *pPrivate;
  331. } AX_SKEL_SEARCH_RESULT_S;
  332. /* end of search */
  333. #ifdef __cplusplus
  334. }
  335. #endif
  336. #endif /* _AX_SKEL_STRUCT_H_ */