【问题标题】:Is there poseWorldLandmarks in mediapipe javascript?mediapipe javascript中是否有poseWorldLandmarks?
【发布时间】:2022-10-18 15:44:08
【问题描述】:

我使用 mediapipe-pose(使用poseWorldLandmarks)制作了python机器学习应用程序。然后我将这个 python 应用程序扩展到 web 应用程序。所以我做了一些 mediapipe javascript 姿势。但是当我检查姿势的结果时。我发现没有poseWorldLandmarks(只存在poseLandmarks)。

如何在 mediapipe javascript 中获取poseWorldLandmarks?如果没有办法访问poseWorldLandmarks,有没有办法将poseLandmarks转换为poseWorldLandmarks?

这是我检查结果的图片。

enter image description here

这是脚本代码

    const video5 = document.getElementsByClassName('input_video5')[0];
    const out5 = document.getElementsByClassName('output5')[0];
    const controlsElement5 = document.getElementsByClassName('control5')[0];
    const canvasCtx5 = out5.getContext('2d');

    const fpsControl = new FPS();

    const spinner = document.querySelector('.loading');
    spinner.ontransitionend = () => {
      spinner.style.display = 'none';
    };

    function zColor(data) {
      const z = clamp(data.from.z + 0.5, 0, 1);
      return `rgba(0, ${255 * z}, ${255 * (1 - z)}, 1)`;
    }

    function onResultsPose(results) {
      document.body.classList.add('loaded');
      fpsControl.tick();

      canvasCtx5.save();
      canvasCtx5.clearRect(0, 0, out5.width, out5.height);
      canvasCtx5.drawImage(
          results.image, 0, 0, out5.width, out5.height);
      
      console.log(results)
      let coordinate_list = "";
      if (results.poseLandmarks) {
        results.poseLandmarks.forEach(element => {
          const x_data = element['x'].toString();
          const y_data = element['y'].toString();
          const z_data = element['z'].toString();
          const visibility_data = element['visibility'].toString();
          
          coordinate_list = coordinate_list.concat(' ',x_data);
          coordinate_list = coordinate_list.concat(' ',y_data);
          coordinate_list = coordinate_list.concat(' ',z_data);
          coordinate_list = coordinate_list.concat(' ',visibility_data);
        }); 
      }
      // console.log(typeof(results.poseLandmarks))
      drawConnectors(
          canvasCtx5, results.poseLandmarks, POSE_CONNECTIONS, {
            color: (data) => {
              const x0 = out5.width * data.from.x;
              const y0 = out5.height * data.from.y;
              const x1 = out5.width * data.to.x;
              const y1 = out5.height * data.to.y;

              const z0 = clamp(data.from.z + 0.5, 0, 1);
              const z1 = clamp(data.to.z + 0.5, 0, 1);

              const gradient = canvasCtx5.createLinearGradient(x0, y0, x1, y1);
              gradient.addColorStop(
                  0, `rgba(0, ${255 * z0}, ${255 * (1 - z0)}, 1)`);
              gradient.addColorStop(
                  1.0, `rgba(0, ${255 * z1}, ${255 * (1 - z1)}, 1)`);
              return gradient;
            }
          });
      drawLandmarks(
          canvasCtx5,
          Object.values(POSE_LANDMARKS_LEFT)
              .map(index => results.poseLandmarks[index]),
          {color: zColor, fillColor: '#FF0000'});
      drawLandmarks(
          canvasCtx5,
          Object.values(POSE_LANDMARKS_RIGHT)
              .map(index => results.poseLandmarks[index]),
          {color: zColor, fillColor: '#00FF00'});
      drawLandmarks(
          canvasCtx5,
          Object.values(POSE_LANDMARKS_NEUTRAL)
              .map(index => results.poseLandmarks[index]),
          {color: zColor, fillColor: '#AAAAAA'});
      canvasCtx5.restore();
    }

    const pose = new Pose({locateFile: (file) => {
      return `https://cdn.jsdelivr.net/npm/@mediapipe/pose@0.2/${file}`;
    }});
    pose.onResults(onResultsPose);

    const camera = new Camera(video5, {
      onFrame: async () => {
        await pose.send({image: video5});
      },
      width: 480,
      height: 480
    });
    camera.start();

    new ControlPanel(controlsElement5, {
          selfieMode: true,
          upperBodyOnly: false,
          smoothLandmarks: true,
          minDetectionConfidence: 0.5,
          minTrackingConfidence: 0.5
        })
        .add([
          new StaticText({title: 'MediaPipe Pose'}),
          fpsControl,
          new Toggle({title: 'Selfie Mode', field: 'selfieMode'}),
          new Toggle({title: 'Upper-body Only', field: 'upperBodyOnly'}),
          new Toggle({title: 'Smooth Landmarks', field: 'smoothLandmarks'}),
          new Slider({
            title: 'Min Detection Confidence',
            field: 'minDetectionConfidence',
            range: [0, 1],
            step: 0.01
          }),
          new Slider({
            title: 'Min Tracking Confidence',
            field: 'minTrackingConfidence',
            range: [0, 1],
            step: 0.01
          }),
        ])
        .on(options => {
          video5.classList.toggle('selfie', options.selfieMode);
          pose.setOptions(options);
        });

【问题讨论】:

    标签: javascript python web mediapipe


    【解决方案1】:

    实际上,您可以使用“ea”字段获取poseWorldLandmarks:

    const poseWorldLandmarks = results.ea
    

    我不知道“ea”到底是什么意思,也许是抢先体验。

    希望这对你有用。

    【讨论】:

      猜你喜欢
      • 2021-01-05
      • 2021-10-30
      • 1970-01-01
      • 2011-01-17
      • 2021-10-19
      • 1970-01-01
      • 2021-12-23
      • 2012-05-26
      • 2014-07-04
      相关资源
      最近更新 更多