1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859 |
- #include <string>
- #include <unistd.h>
- #include <vector>
- #include <cmath>
- #include <queue>
- #include <sys/time.h>
- #include <cstring>
- #include <algorithm>
- #include <limits>
- #ifndef ASJ_SITUP_H
- #define ASJ_SITUP_H
- #include "dl_api.h"
- #include "PEStatus.h"
- #include "queue.h"
- #include "asj_pe_base.h"
- class Asj_PE_Situp{
- public:
- int init(); // 初始化
- int set(SitUp_ST situp_s); // 根据传入结构体设置参数
- int get(SitUp_ST *situp_s); // 得到当前设置的参数
- int examReset(); // 算法数据清零
- int processPrepare(sampleRunJoint_RESULT_S *mResults, int *prepareStatus); // 输入算法结果进行处理当前帧(用于准备状态)
- int processExam(sampleRunJoint_RESULT_S *mResults, SitUpResult_ST *result); // 输入算法结果进行处理当前帧(用于考试状态)
- private:
- int streamHeight, streamWidth; // 媒体流的高宽
- SitUpExamCode currentExamStatue; // 用于记录考试状态下当前帧的结果
- bool isLieFalt; // 判断背部是否与地面平行
- bool isHipLift; // 判断仰卧时,臀部是否离垫
- bool isHandNotCloseHand; // 用于存放手部是否贴近头部的状态
- bool isNewRound; // 判断是否开始新的回合
- bool isUp; // 利用肩臀膝角度来判断是否在进行起坐状态
- bool isClockWise; // 仰卧起坐中,身体的右侧面向摄像头为true,反之为false
- bool isLegAngleLegal; // 判断膝盖角度是否合格
- Queue<int> prepareStatueQueue; // 用于记录准备状态队列
- Queue<int> handStatueQueue; // 用于存放手部是否贴近头部的状态
- Queue<int> kneeStatueQueue; // 用于存放膝盖角度是否符合要求的状态
- Queue<int> shoulderHipKneeQueue; // 用于记录肩臀膝角度队列
- int upStatueAngle; // 用于判断是否满足up状态的角度(肩臀平角)
- int newRoundAngle; // 用于判断是否开启新回合的角度(肩臀平角)
- SitUp_ST situp_st; // 额外设置的结构体
- SitUpResult_ST situpResult_st; // 存放统计结果的结构体
- void getPeopleNums(sampleRunJoint_RESULT_S *mResults, int &personIndex);
- bool checkIsLieFlat(sampleRunJoint_POINT_S *landmark, float limit);
- bool checkIsUpStatus(sampleRunJoint_POINT_S *landmark);
- bool checkIsTouchKnee(sampleRunJoint_POINT_S *landmark, float limit);
- bool checkHipIsLiftPad(sampleRunJoint_POINT_S *landmark);
- bool checkKneeAngle(sampleRunJoint_POINT_S *landmark);
- void resetFlag();
- int processPrepareCPP(sampleRunJoint_RESULT_S *mResults, int &prepareStatus); // 输入算法结果进行处理当前帧(用于准备状态)
- int processExamCPP(sampleRunJoint_RESULT_S *mResults, SitUpResult_ST &result); // 输入算法结果进行处理当前帧(用于考试状态)
- };
- #endif
|