未调用 FaceDetectionListener onFaceDetection

Posted

技术标签:

【中文标题】未调用 FaceDetectionListener onFaceDetection【英文标题】:FaceDetectionListener onFaceDetection not called 【发布时间】:2015-02-14 04:41:22 【问题描述】:

我正在编写一个使用相机预览来检测人脸的应用。我的设备可以检测人脸,设置监听器并启动人脸检测(按此顺序),但永远不会调用 onFaceDetection。我将 SurfaceView 子类化为显示相机预览的视图。

监听器放置在所有活动的变量声明之后:

FaceDetectionListener fdl = new FaceDetectionListener() 
    @Override
    public void onFaceDetection(Face[] faces, Camera camera) 
        Log.d("CameraViewApp", "Faces detected.");
    

当用户告诉应用程序显示持有相机视图的视图时,在视图显示在屏幕上之前,这已完成:

cameraview = new CameraView(context);
Log.d("CameraViewApp", "Setting face detection listener.");
cameraview.setFaceDetectionListener(fdl);
rlMain.addView(cvGame, 0); //Adds cameraview to main view, "behind" everything else.
...
cameraview.startCamera();
setContentView(rlMain);

CameraView 类的 startCamera() 方法的代码如下:

public void startCamera() 
    this.getHolder().addCallback(shcb);
    this.getHolder().setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);

    this.camera = Camera.open(0);

还有回调:

private SurfaceHolder.Callback shcb = new SurfaceHolder.Callback() 
    @Override
    public void surfaceCreated(SurfaceHolder holder) 
        try 
            if (camera != null) camera.setPreviewDisplay(holder);
         catch (IOException e) 
            e.printStackTrace();
        
    

    @Override
    public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) 
        if(camera != null) 
            Size sizePreview = getBestPreviewSize(width, height, camera.getParameters()); //Custom method to find best preview size.
            parameters.setPreviewSize(sizePreview.width, sizePreview.height);
            requestLayout();

            camera.setParameters(parameters);
            camera.startPreview();

            if (fdl != null && camera.getParameters().getMaxNumDetectedFaces() > 0) 
                Log.d("CameraViewApp", "Starting face detection.");
                camera.startFaceDetection();
            
        
    

    @Override
    public void surfaceDestroyed(SurfaceHolder holder) 
        camera.stopFaceDetection();
        camera.stopPreview();
    
;

LogCat 中出现“Setting face detection listener”,LogCa 中出现“Starting face detection”,但 LogCat 中从未出现“Faces detected”。我尝试将相机对准屏幕上的人脸照片,尝试将相机对准自己的脸,并尝试切换到前置摄像头,这样我就可以确保自己的脸在视野中并且永远不会调用 onFaceDetection。

【问题讨论】:

【参考方案1】:

这是我自己愚蠢错误的典型案例。我有一个自定义方法用于在我的自定义 CameraView 类中设置人脸检测侦听器,但我没有在该自定义方法中设置实际侦听器。因此,请密切注意您的自定义恶作剧,伙计们。 :p

【讨论】:

以上是关于未调用 FaceDetectionListener onFaceDetection的主要内容,如果未能解决你的问题,请参考以下文章

在相机android中设置矩形焦点

onFaceDetection(Camera.Face[] faces, Camera camera) 继续执行

未完全加载单元格时未调用 didSelectItemAtIndexPath

数据流 - 未调用函数 - 错误 - 未定义名称

numberOfRowsInSection 已调用但 cellForRowAt 未调用

调用 textFieldShouldBeginEditing,未调用 textFieldDidBeginEditing