我有一个小应用程序只是为了测试相机预览和面部识别。预览表面显示,我可以看到调用onFaceDetection回调。如果我在onFaceDetection中放入一个Log调用,我会看到它被重复调用,但是有一个空的Faces []数组。
注意:" Log"下面的调用不是被调用的调用,下面示例中的日志调用是从不调用。但是我可以在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...");
}
}
}
答案 0 :(得分:1)
人脸检测不是面部识别。这只是一种识别相机预览中是否有面孔的方法,它可以用于一种功能,例如当手机相机预览在脸部周围绘制一个框并且可能聚焦在脸部时。但Glass有固定焦距相机,因此人脸检测并不适用。除此之外...
Google Glass玻璃政策政策明确禁止面部识别。
第C.1.e节说:
请勿使用相机或麦克风进行交叉引用,并立即显示识别用户以外的任何人的个人信息,包括面部识别和声纹等用例。执行此操作的玻璃器皿目前尚未获得批准。
参考:
https://developers.google.com/glass/policies
我希望为您的问题增加一些清晰度。如果您使用“面部识别”是一个错字,并且您打算说“面部检测”,您应该编辑您的问题。