#ifndef ASJ_STANDINGJUMP_H #define ASJ_STANDINGJUMP_H #include #include #include #include #include #include #include #include #include #include #include #include "dl_api.h" #include "PEStatus.h" #include "queue.h" #include "asj_pe_base.h" enum SportStatus { None, PREPARE, JUMP, END, }; typedef struct { float xDis, yDis, xyDis; }Distance_ST; typedef struct { sampleRunJoint_POINT_S min, max; }BoundingBox_ST; class Asj_PE_StandingJump{ public: int init(); // 初始化 int set(StandingJump_ST standingjump_s); // 根据传入结构体设置参数 int get(StandingJump_ST *standingjump_s); // 得到当前设置的参数 int examReset(); // 算法数据清零 int processPrepare(sampleRunJoint_RESULT_S *mResults, int *prepareStatus); // 输入算法结果进行处理当前帧(用于准备状态) int processExam(sampleRunJoint_RESULT_S *mResults, StandingJumpResult_ST *result); // 输入算法结果进行处理当前帧(用于考试状态) private: cv::Mat M; // 变换矩阵 sampleRunJoint_POINT_S prePoints; // 历史帧脚后跟坐标 float staticLimit; // 判断运动状态是否静止的阈值 int status; // 当前的状态 StandingJump_ST standingjump_st; // 额外设置的结构体 StandingJumpResult_ST standingjumpResult_st; // 存放统计结果的结构体 Distance_ST calDistance(sampleRunJoint_POINT_S point1, sampleRunJoint_POINT_S point2); // 计算两个point之间的x,y,xy距离 cv::Mat transformMask(sampleRunJoint_RESULT_S *mResults, std::vector ids); // 整合Mask int processPrepareCPP(sampleRunJoint_RESULT_S *mResults, int &prepareStatus); // 输入算法结果进行处理当前帧(用于准备状态) int processExamCPP(sampleRunJoint_RESULT_S *mResults, StandingJumpResult_ST &result); // 输入算法结果进行处理当前帧(用于考试状态) }; #endif