Android(玻璃)无法在 onFaceDetection 中检测人脸

Posted

技术标签:

【中文标题】Android(玻璃)无法在 onFaceDetection 中检测人脸【英文标题】:Android (Glass) Unable to Detect Faces in onFaceDetection 【发布时间】:2014-07-06 20:54:29 【问题描述】:

我有一个小应用程序只是为了测试相机预览和面部识别。预览表面显示,我可以看到 onFaceDetection 回调被调用。如果我在 onFaceDetection 中进行 Log 调用,我会看到它被重复调用,但 Faces[] 数组为空。

注意:下面的“日志”调用不是被调用的,在我下面的示例中,日志调用是从不调用的。但我可以在 for 语句之外添加另一个 Log 调用,它将被调用。

这是我的代码:

package com.example.glassgoggles;

import android.content.Context;
import android.hardware.Camera;
import android.hardware.Camera.Face;
import android.hardware.Camera.FaceDetectionListener;
import android.hardware.Camera.Parameters;
import android.util.Log;
import android.view.SurfaceHolder;
import android.view.SurfaceView;

public class CameraPreviewView extends SurfaceView implements SurfaceHolder.Callback, FaceDetectionListener 

    private SurfaceHolder surfaceHolder = null;
    private Camera camera = null;

    @SuppressWarnings("deprecation")
    public CameraPreviewView(Context context) 
        super(context);

        surfaceHolder = this.getHolder();
        surfaceHolder.addCallback(this);
        surfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
    

    @Override
    public void surfaceCreated(SurfaceHolder holder) 

        camera = Camera.open();
        this.setCameraParameters();
        try 
        
            camera.setPreviewDisplay(holder);
         
        catch (Exception e) 
        
            this.releaseCamera();
        

    

    @Override
    public void surfaceChanged(SurfaceHolder holder, int format, int width,
            int height) 
        if (camera != null)
        
            camera.setFaceDetectionListener(this);
            camera.startPreview();
            this.startFaceDetectionIfSupported();
        

    

    @Override
    public void surfaceDestroyed(SurfaceHolder holder) 
        this.releaseCamera();       
    

    public void releaseCamera() 
    
        if (camera != null) 
        
            camera.release();
            camera = null;
        
    

    public void setCameraParameters()
    
        if (camera != null)
        
            Parameters parameters = camera.getParameters();
            parameters.setPreviewFpsRange(30000, 30000);
            camera.setParameters(parameters);   
        
    

    public void startFaceDetectionIfSupported() 
        if (camera != null) 
            Parameters parameters = camera.getParameters();
            if (parameters.getMaxNumDetectedFaces() > 0) 
                Log.d("Face Detection", "Starting...");
                camera.startFaceDetection();
             else 
                Log.d("Face Detection", "No faces allowed...");
            
        
    

    @Override
    public void onFaceDetection(Face[] faces, Camera camera) 
        for(int i = 0; i < faces.length; i++) 
            Log.d("Face Check", "Found a face...");
        
    


【问题讨论】:

见:code.google.com/p/google-glass-api/issues/detail?id=282 上面的链接给人的印象是没有解决方案 - Glass 在使用预览时不会捕捉任何人脸。这是你的结论@DavidKullmann 吗?如果是这样,您是否使用过 FaceDetector 和 Glass? 【参考方案1】:

人脸检测不是人脸识别。这只是一种识别相机预览中是否有人脸的方法,它可以用于诸如手机相机预览在人脸周围绘制一个框并可能聚焦于人脸的功能。但 Glass 有一个定焦摄像头,因此人脸检测并不适用。最重要的是...

Google Glass 的 Glassware 政策明确禁止面部识别。

C.1.e 节说:

请勿使用摄像头或麦克风来交叉引用和立即提供可识别用户以外任何人的个人信息,包括面部识别和声纹等用例。目前不会批准这样做的玻璃器皿。

参考:

https://developers.google.com/glass/policies

我希望这可以使您的问题更加清晰。如果您对“面部识别”的使用是一个错字,并且您的意思是“面部检测”,您应该编辑您的问题。

【讨论】:

以上是关于Android(玻璃)无法在 onFaceDetection 中检测人脸的主要内容,如果未能解决你的问题,请参考以下文章

Android 弹窗毛玻璃背景实践

Android 毛玻璃效果的实现

Android毛玻璃处理代码(Blur)

Android 毛玻璃模糊图片算法

android--毛玻璃效果(背景虚化)的实现

Android毛玻璃模糊化效果处理