expo FaceDetector 即使没有人脸也会在 "accurate" 模式下继续触发 "onFacesDetected" 事件

expo FaceDetector keep triggering "onFacesDetected" event in "accurate" mode even without face

我是 React Native 的新手。 我正在使用 expo FaceDetector 来检测人脸。 当我在“fast”模式下使用它时,它会正确触发“onFacesDetected”事件。 但是当我使用“accuratemodeonFacesDetected”事件继续触发(在“minDetectionInterval")(假设检测到人脸后触发)。

这是博览会问题还是我的代码有误? 任何帮助将不胜感激。 1.below 是快速模式代码

    <Camera style={styles.camara} type={type}
            ref={ref}
            onFacesDetected={faceDetected}
            faceDetectorSettings={{
                mode: FaceDetector.Constants.Mode.fast,
                detectLandmarks: FaceDetector.Constants.Landmarks.all,
                 runClassifications: FaceDetector.Constants.Classifications.all,
                minDetectionInterval: 100,
                tracking: false,
              }}>
        </Camera>

2.below是准确模式代码

       <Camera style={styles.camara} type={type}
            ref={ref}
            onFacesDetected={faceDetected}
            faceDetectorSettings={{
                mode: FaceDetector.Constants.Mode.accurate,
                detectLandmarks: FaceDetector.Constants.Landmarks.all,
                 runClassifications: FaceDetector.Constants.Classifications.all,
                minDetectionInterval: 100,
                tracking: false,
              }}>
        </Camera>

博览会文档expo documentation

我认为这可能有所帮助。问题是 onFacesDetected returns 一个对象,而不是布尔值。

const [faceDetected, setFaceDetected] = useState(false)
const checkForFace = (obj) => {
  try {
    setFaceDetected(obj.faces.length==0?false:true);
    //or
    setFaceDetected(obj.faces.length);
    //0 is false and any natural number(1,2,3...) is true
  } catch (error) {
    console.error(error);
  }
}

return (       
  <Camera style={styles.camara} type={type}
      ref={ref}
      onFacesDetected={(e)=>checkForFace(e)}
      faceDetectorSettings={{
          mode: FaceDetector.Constants.Mode.accurate,
          detectLandmarks: FaceDetector.Constants.Landmarks.all,
          runClassifications: FaceDetector.Constants.Classifications.all,
          minDetectionInterval: 500,
          tracking: true,
      }}>
  </Camera>
)