vitis::ai::MovenetResult - 3.5 简体中文

Vitis AI Library 用户指南 (UG1354)

Document ID
UG1354
Release Date
2023-06-29
Version
3.5 简体中文
Movenet 模型,输入大小为 192x192。

此基本类用于检测人的姿态。

输入为图像 (cv:Mat)。

输出为 MovenetResult

代码样本:

auto image = cv::imread(argv[2]);
if (image.empty()) {
  std::cerr << "cannot load " << argv[2] << std::endl;
  abort();
}
auto det = vitis::ai::Movenet::create(argv[1]);
vector<vector<int>> limbSeq = {{0, 1}, {0, 2},{0, 3},{0, 4},{0, 5},{0, 6},
                              {5, 7},  {7, 9},  {6, 8}, {8, 10},
                               {5, 11},   {6, 12},  {11, 13}, {13, 15},
                               {12, 14}, {14, 16}};

auto results = det->run(image.clone());
for (size_t i = 0; i < results.poses.size(); ++i) {
  cout<< results.poses[i]<<endl;
  if (results.poses[i].y >0 && results.poses[i].x > 0) {
    cv::putText(image, to_string(i),results.poses[i],
    cv::FONT_HERSHEY_COMPLEX, 1, cv::Scalar(0, 255, 255), 1, 1, 0);
    cv::circle(image, results.poses[i], 5, cv::Scalar(0, 255, 0),
               -1);
  }
}
for (size_t i = 0; i < limbSeq.size(); ++i) {
  auto a = results.poses[limbSeq[i][0]];
  auto b = results.poses[limbSeq[i][1]];
  if (a.x >0  && b.x > 0) {
    cv::line(image, a, b, cv::Scalar(255, 0, 0), 3, 4);
  }
}

显示 movenet 模型结果:width=400px

图 1. movenet 结果图像
movenet result image

声明

typedef struct
{
  int width;
  int height;
  std::vector< cv::Point2f > poses;

} vitis::ai::MovenetResult;
表 1. 结构 vitis::ai::MovenetResult 成员描述
成员 描述
width 输入图像的宽度。
height 输入图像的高度。
poses

姿态矢量,其中姿态以点的矢量来表示。关节点按顺序排列;0:'nose';1:'left_eye';2:'right_eye';3:'left_ear':4:'right_ear';5:'left_shoulder';6:'right_shoulder';7:'left_elbow';8:'right_elbow';9:'left_wrist';10:'right_wrist';11:'left_hip';12:'right_hip';13:'left_knee';14:'right_knee';15:'left_ankle';16:'right_ankle']