【问题标题】:Cannot read property 'length' of undefined in face-api.js react无法读取 face-api.js 中未定义的属性“长度”反应
【发布时间】:2021-01-30 10:28:55
【问题描述】:
import React, { useRef, useState, useEffect } from 'react';
import * as faceapi from 'face-api.js';


function App() {
  const videoRef = useRef(null);
  const canvasRef = useRef(null);
  useEffect(() => {
    const loadModels = async () => {
      try {
        const MODEL_URL = '/models'
        Promise.all([
          faceapi.nets.tinyFaceDetector.loadFromUri(MODEL_URL),
          faceapi.nets.faceLandmark68Net.loadFromUri(MODEL_URL),
          faceapi.nets.faceRecognitionNet.loadFromUri(MODEL_URL),
          faceapi.nets.faceExpressionNet.loadFromUri(MODEL_URL),
        ]).then(startVideo())
      } catch (error) {
        console.error(error)
      }

    }
    loadModels();

  }, [])
  const startVideo = async () => {
    try {
      let stream = null;
      stream = await navigator.mediaDevices.getUserMedia({ audio: true, video: true });
      videoRef.current.srcObject = stream;
    } catch (error) {
      console.error(error)
    }
  }

  const handleVideoOnPlay = () => {
    setInterval(async () => {
      const detections = await faceapi.
        detectAllFaces(videoRef.current, new faceapi.TinyFaceDetectorOptions())
        .withFaceLandmarks()
        .withFaceExpressions()
    }, 100)
  }
  return (
    <div className="App">
      <video ref={videoRef} autoPlay muted onPlay={handleVideoOnPlay} height={640} width={640} />
      <canvas ref={canvasRef} />
    </div>
  );
}

export default App;

大家好,这是我的代码,我按照教程https://www.youtube.com/watch?v=EejpxMtDg8M

我收到以下错误消息:

有谁知道问题出在哪里?我按照以下步骤进行了所有操作,但我不知道出了什么问题,非常感谢您的帮助!

【问题讨论】:

    标签: javascript reactjs tensorflow.js face-api


    【解决方案1】:

    错误是videoRef.current为null,只需要把它包裹起来

    if(videoRef.current){
    }
    

    【讨论】:

      【解决方案2】:

      我找到了解决这个问题的方法

      当使用 faceapi.detectAllFaces 时,你应该这样做

      const detections = await faceapi.detectAllFaces(videoRef.current).withFaceLandmarks().withFaceDescriptors().withFaceExpressions()

      .withFaceDescriptors() 必须包含在内。

      注意它是 .withFaceDescriptors() 而不是 .withFaceDescriptor()

      s 如果您要检测所有人脸,则应添加并删除一张人脸

      【讨论】:

        猜你喜欢
        • 2020-07-27
        • 2019-12-28
        • 1970-01-01
        • 1970-01-01
        • 2021-09-18
        • 1970-01-01
        • 2011-11-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多