即使没有人脸,expo FaceDetector 也会在“准确”模式下继续触发“onFacesDetected”事件

Posted

技术标签:

【中文标题】即使没有人脸,expo FaceDetector 也会在“准确”模式下继续触发“onFacesDetected”事件【英文标题】:expo FaceDetector keep triggering "onFacesDetected" event in "accurate" mode even without face 【发布时间】:2021-01-25 23:07:48 【问题描述】:

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

这是一个展览问题还是我的代码有误? 任何帮助将不胜感激。 1.下面是快速模式代码

    <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.下面是准确的模式代码

       <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

【问题讨论】:

【参考方案1】:

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

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>
)

【讨论】:

以上是关于即使没有人脸,expo FaceDetector 也会在“准确”模式下继续触发“onFacesDetected”事件的主要内容,如果未能解决你的问题,请参考以下文章

OpenFace CoreML 模型。没有人脸检测

当帧中没有人脸时,OpenCV 中的人脸检测器会变慢

人脸识别

Java:扑克手

弹出到 ExpoKit 后,Expo 不起作用

即使没有人告诉它,为啥 QScrollArea 在多点触控上滚动?