本页是VNN全部SDK所使用数据结构的参考
如果输入SDK图像与显示图像存在旋转和镜像关系,可使用VNN工具函数对数据结构进行相应的变换,以保证显示正确
| 常量 | 含义 | 值 |
|---|---|---|
| VNN_FRAMEDATAARR_MAX_FACES_NUM | 最大记录人脸数 | 5 |
| VNN_FRAMEDATA_MAX_FACE_LANDMARKS_NUM | 最大记录人脸关键点数 | 278 |
| VNN_FRAMEDATAARR_MAX_GESTURE_NUM | 最大记录手势数 | 15 |
| VNN_CLASSIFICATION_ACC_TOP_N | 最大记录分类概率最大的标签个数 | 5 |
| VNN_MAX_MULTI_CLASSFICATION_NUM | 最大记录多分类的标签组个数 | 10 |
| VNN_MAX_LABEL_LENGTH | 最大记录标签长度 | 100 |
| VNN_FRAMEDATA_MAX_BODYLANDMARKS_NUM | 最大记录人体关键点个数 | 22 |
| VNN_FRAMEDATAARR_MAX_BODYS_NUM | 最大记录人体检测个数 | 5 |
参考链接
说明
用于记录多个输出图像
定义
typedef struct _VNN_ImageArr {
VNNInt32 imgsNum;
VNN_Image imgsArr[VNN_FRAMEDATAARR_MAX_FACES_NUM];
}VNN_ImageArr;成员解释
| 成员 | 含义 |
|---|---|
| imgsNum | VNN_Image数组内实际有效的对象数 |
| imgsArr[] | VNN_Image数组,定长 |
说明
用于记录矩形框
定义
typedef struct _VNN_Rect2D {
VNNFloat32 x0; /* left */
VNNFloat32 y0; /* top */
VNNFloat32 x1; /* right */
VNNFloat32 y1; /* bottom */
} VNN_Rect2D;成员解释
| 成员 | 含义 |
|---|---|
| x0 | 左上角横坐标(left) |
| y0 | 左上角纵坐标(top) |
| x1 | 右下角横坐标(right) |
| y1 | 右下角纵坐标(bottom) |
说明
用于描述坐标点
定义
typedef struct _VNN_Point2D {
VNNFloat32 x;
VNNFloat32 y;
} VNN_Point2D;成员解释
| 成员 | 含义 |
|---|---|
| x | 横坐标 |
| y | 纵坐标 |
说明
用于记录不确定个数的目标检测位置结果
使用完毕后需调用 VNN_ObjCountDataArr_Free 释放申请的内存,以避免内存泄露
定义
typedef struct _VNN_ObjectCountDataArr {
VNNInt32 count;
VNN_Rect2D * objRectArr;
} VNN_ObjCountDataArr;成员解释
| 成员 | 含义 |
|---|---|
| count | 检测结果个数 |
| objRectArr | 检测位置结果数组的首地址,不定长 |
说明
用于记录单个人脸关键点检测结果
定义
typedef struct _VNN_FaceFrameData {
VNNFloat32 faceScore;
VNN_Rect2D faceRect;
VNNUInt32 inputWidth;
VNNUInt32 inputHeight;
VNNUInt32 faceLandmarksNum;
VNN_Point2D faceLandmarks[VNN_FRAMEDATA_MAX_FACE_LANDMARKS_NUM];
VNNFloat32 faceLandmarkScores[VNN_FRAMEDATA_MAX_FACE_LANDMARKS_NUM];
VNNBool ifCloseLeftEye;
VNNBool ifCloseRightEye;
VNNBool ifBlinkLeftEye;
VNNBool ifBlinkRightEye;
VNNBool ifOpenMouth;
VNNBool ifShakeHead;
VNNBool ifNodHead;
VNNBool ifOpenCloseMouth;
VNNFloat32 smileScore;
VNNFloat32 faceYaw;
} VNN_FaceFrameData;成员解释
| 成员 | 含义 |
|---|---|
| faceScore | 检测结果整体置信度 |
| faceRect | 人脸在画面中的位置(归一化0~1) |
| inputWidth | SDK内部使用 |
| inputHeight | SDK内部使用 |
| faceLandmarksNum | 实际检测到的关键点个数 |
| faceLandmarks[] | 实际检测到的关键点位置 |
| ifCloseLeftEye | 闭左眼 |
| ifCloseRightEye | 闭右眼 |
| ifBlinkLeftEye | 眨左眼 |
| ifBlinkRightEye | 眨右眼 |
| ifOpenMouth | 张嘴 |
| ifShakeHead | 摇头 |
| ifNodHead | 点头 |
| ifOpenCloseMouth | 张闭嘴 |
| smileScore | 数值<25表示“没笑”,25~70表示“微笑”,>70表示“大笑” |
| faceYaw | 脸部左右偏转程度 |
说明
用于记录多个人脸关键点检测结果
定义
typedef struct _VNN_FaceFrameDataArr {
VNNUInt32 facesNum;
VNN_FaceFrameData facesArr[VNN_FRAMEDATAARR_MAX_FACES_NUM];
} VNN_FaceFrameDataArr;成员解释
| 成员 | 含义 |
|---|---|
| facesNum | facesArr[]数组内实际有效对象数 |
| facesArr[] | VNN_FaceFrameData数组,定长 |
说明
用于记录单个手势检测结果
定义
typedef struct _VNN_GestureFrameData {
VNN_GestureType type; /* Gesture type */
VNN_Rect2D rect; /* Gesture rect, left-top-right-bottom */
VNNFloat32 score; /* Gesture confidence socre */
} VNN_GestureFrameData;成员解释
| 成员 | 含义 |
|---|---|
| type | 手势类型,具体类型见 手势类型枚举值 |
| rect | 手势位置 |
| score | 检测结果置信度 |
手势类型枚举值
typedef enum _VNN_GestureType {
VNN_GestureType_Unknow = 0x00, // 检测到手但手势不明
VNN_GestureType_V = 0x01, // 剪刀手
VNN_GestureType_ThumbUp = 0x02, // 点赞
VNN_GestureType_OneHandHeart = 0x03, // 单手比心
VNN_GestureType_SpiderMan = 0x04, // 蜘蛛侠
VNN_GestureType_Lift = 0x05, // 托举
VNN_GestureType_666 = 0x06, // “666”
VNN_GestureType_TwoHandHeart = 0x07, // 双手比心
VNN_GestureType_PalmTogether = 0x08, // 抱拳
VNN_GestureType_PalmOpen = 0x09, // 张开手掌
VNN_GestureType_ZuoYi = 0x0a, // 作揖
VNN_GestureType_OK = 0x0b, // “OK”
VNN_GestureType_ERROR = 0xff, // 异常情况
} VNN_GestureType;说明
用于记录多个手势检测结果
定义
typedef struct _VNN_GestureFrameDataArr {
VNNUInt32 gestureNum;
VNN_GestureFrameData gestureArr[VNN_FRAMEDATAARR_MAX_GESTURE_NUM];
} VNN_GestureFrameDataArr;成员解释
| 成员 | 含义 |
|---|---|
| gestureNum | 实际检测到的手势数 |
| gestureArr[ ] | VNN_GestureFrameData数组,定长 |
说明
用于记录单分类下前 usedTopN 个概率最大的分类标签
定义
typedef struct _VNN_Classification_Accuracy_Top_N {
VNNUInt32 categories[VNN_CLASSIFICATION_ACC_TOP_N];
char labels[VNN_CLASSIFICATION_ACC_TOP_N][VNN_MAX_LABEL_LENGTH];
VNNFloat32 probabilities[VNN_CLASSIFICATION_ACC_TOP_N];
VNNInt32 usedTopN;
} VNN_ClsTopNAcc;成员解释
| 成员 | 含义 |
|---|---|
| categories[] | 分类TopN的分类下标,定长 |
| labels[][] | 分类TopN的文本标签,定长 |
| probabilities[] | 分类TopN的概率值,定长 |
| usedTopN | 分类TopN的实际值 |
说明
用于记录多分类的分类结果(如一个模型同时分类出场景和天气)
定义
typedef struct _VNN_ClassificationTopNDataArr {
VNNUInt32 numCls;
VNN_ClsTopNAcc clsArr[VNN_MAX_MULTI_CLASSFICATION_NUM];
} VNN_ClsTopNAccArr;成员解释
| 成员 | 含义 |
|---|---|
| numCls | 多分类个数 |
| clsArr[] | 每个单分类的分类结果 |
说明
人物属性识别SDK专用,用于记录多个人物各自的属性识别(多分类)结果
定义
typedef struct _VNN_MultiClassificationTopNDataArr {
VNNUInt32 numOut;
VNN_ClsTopNAccArr multiClsArr[VNN_FRAMEDATAARR_MAX_FACES_NUM];
} VNN_MultiClsTopNAccArr;成员解释
| 成员 | 含义 |
|---|---|
| numOut | 实际人物个数 |
| multiClsArr[] | 每个人物各自的属性识别(多分类)结果 |
说明
用于记录单个人体姿态关键点检测结果
定义
typedef struct _VNN_BodyFrameData {
VNNFloat32 bodyScore;
VNN_Rect2D bodyRect;
VNNUInt32 bodyLandmarksNum;
VNN_Point2D bodyLandmarks[VNN_FRAMEDATA_MAX_BODYLANDMARKS_NUM];
VNNFloat32 bodyLandmarkScores[VNN_FRAMEDATA_MAX_BODYLANDMARKS_NUM];
VNNUInt32 isWriggleWaist;
VNNUInt32 isCrouch;
VNNUInt32 isRun;
VNN_BodyResultDesc bodyResultDesc;
} VNN_BodyFrameData;成员解释
| 成员 | 含义 |
|---|---|
| bodyScore | 人体检测整体置信度 |
| bodyRect | 人体位置 |
| bodyLandmarksNum | 实际检测到的人体关键点 |
| bodyLandmarks[] | 各人体关键点的位置 |
| bodyLandmarkScores[] | 各人体关键点的置信度 |
| isWriggleWaist | 扭腰动作 |
| isCrouch | 蹲下动作 |
| isRun | 奔跑动作 |
| bodyResultDesc | 人体检测结果描述,见人体姿态描述枚举值 |
人体检测结果描述枚举值
typedef enum _VNN_BodyResultDesc {
VNN_BodyResultDesc_Normal = 0, // 正常
VNN_BodyResultDesc_NoPerson = 1, // 没有人
VNN_BodyResultDesc_MorethanOnePerson = 2, // 注意:仅支持1人
VNN_BodyResultDesc_NoKneeSeen = 3, // 看不到膝盖,请退后
VNN_BodyResultDesc_NoFootSeen = 4, // 看不到脚部,请退后
VNN_BodyResultDesc_NoHipSeen = 5 // 看不到腰部,请退后
}VNN_BodyResultDesc;说明
用于记录多个人体姿态关键点检测结果
定义
typedef struct _VNN_BodyFrameDataArr {
VNNUInt32 bodiesNum;
VNN_BodyFrameData bodiesArr[VNN_FRAMEDATAARR_MAX_BODYS_NUM];
} VNN_BodyFrameDataArr;成员解释
| 成员 | 含义 |
|---|---|
| bodiesNum | 实际检测到的人体个数 |
| bodiesArr[] | 每个人体的检测结果 |