未调用 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的主要内容,如果未能解决你的问题,请参考以下文章
onFaceDetection(Camera.Face[] faces, Camera camera) 继续执行
未完全加载单元格时未调用 didSelectItemAtIndexPath