wangrong
2025-01-03 2c4b8838f89bebca97615c5f0bac2c58e0349771
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
#pragma once
 
#include <vector>
#include <memory>
 
namespace vp_objects {
 
    // different types of datasets used to train openpose model.
    enum vp_pose_type {
        body_25,
        coco,
        mpi_15,
        face,
        hand,
        yolov8_pose_17
    };
    
    struct vp_pose_keypoint {
        int point_type;       // point type (index), nose, neck or left_eye 
        int x;                // x in 2D image
        int y;                // y in 2D image
        float score;          // probability
    };
    
    // target in frame detected by openpose(or other similar models), which mainly contains point collections.
    // note: we can define new target type like vp_frame_xxx_target... if need (see vp_frame_face_target also)
    class vp_frame_pose_target
    {
    private:
        /* data */
    public:
        vp_frame_pose_target(vp_pose_type type, std::vector<vp_pose_keypoint> key_points);
        ~vp_frame_pose_target();
 
        // target type, different models create different outputs which need specific parsing.
        vp_pose_type type;
        // keypoints array
        std::vector<vp_pose_keypoint> key_points;
 
        // clone myself
        std::shared_ptr<vp_frame_pose_target> clone();
    };
}