Ошибка при запуске pos eNet на видео с веб-камеры - PullRequest
1 голос
/ 10 марта 2020
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <!-- Load TensorFlow.js -->
  <script src="https://cdn.jsdelivr.net/npm/@tensorflow/tfjs"></script>
  <!-- Load Posenet -->
  <script src="https://cdn.jsdelivr.net/npm/@tensorflow-models/posenet"></script>
  <title>Yoga Pose Assessment Through Webcam</title>
</head>

<body>
  <div>
    <video id="video" width="640" height="640" autoplay playsinline style=" -moz-    transform: scaleX(-1);
  -o-transform: scaleX(-1);
  -webkit-transform: scaleX(-1);
  transform: scaleX(-1);
  ;"</video>
  </div>
  <script>

    // Load camera
    async function setupCamera() {
      if (!navigator.mediaDevices || !navigator.mediaDevices.getUserMedia) {
        throw new Error(
          'Browser API navigator.mediaDevices.getUserMedia not available');
      }

      const video = document.getElementById('video');
      const stream = await navigator.mediaDevices.getUserMedia({
        'audio': false,
        'video': true,
      });
      video.srcObject = stream;

      return new Promise((resolve) => {
        video.onloadedmetadata = () => {
          resolve(video);
        };
      });
    }

    async function loadVideo() {
      const video = await setupCamera();
      video.play();

      //return video;
    }

    async function detect() {

      let video;
      video = await loadVideo();

      let net;
      // Load posenet
      net = await posenet.load();

      flipHorizontal = true;

      // Scale the image. The smaller the faster
      const imageScaleFactor = 0.75;

      // Stride, the larger, the smaller the output, the faster
      const outputStride = 32;

      // Store all the poses
      let poses = [];
      let minPoseConfidence;
      let minPartConfidence;

      const pose = await net.estimateSinglePose(video,
        imageScaleFactor,
        flipHorizontal,
        outputStride);
      console.log(pose);
    }

    detect();

  </script>
</body>

</html>

Когда я запускаю вышеуказанный код в Firefox Я получаю следующую ошибку

TypeError: t is undefined   posenet:17:10511

Когда я запускаю вышеуказанный код в google chrome Я получаю следующую ошибку

Uncaught (in promise) TypeError: Cannot read property 'height' of undefined
at U (posenet:17)
at t.<anonymous> (posenet:17)
at posenet:17
at Object.next (posenet:17)
at posenet:17
at new Promise (<anonymous>)
at u (posenet:17)
at t.estimateSinglePose (posenet:17)
at detect (demo.html:106)

Я пытаюсь зарегистрировать объект позы. Я использую видео, снятое с веб-камеры, и передается в поз eNet. Я также хотел бы знать, хорош ли подход, который я использую, или есть какие-либо изменения.

При отображении видео с веб-камеры пользователю я переворачиваю видео с помощью css и снова при передаче видео на pos eNet Я устанавливаю flipHor horizontal в true. Правильный ли подход?

Любая помощь будет оценена. Заранее спасибо.

1 Ответ

1 голос
/ 10 марта 2020

вы можете попробовать раскомментировать возвращаемый результат в loadVideo:

async function loadVideo() {
  const video = await setupCamera();
  video.play();

  return video;
}

, а также обновить тег video, как указано в @cherryblossom:

<video id="video" width="640" height="640" autoplay playsinline
      style="-moz-o-transform: scaleX(-1); -webkit-transform: scaleX(-1); transform: scaleX(-1);"></video>
...