使用API 14我已经创建了一个成功使用面部检测的Activity(我在这个Face Detection中有点新手)。
我不想显示相机的预览;我只是想知道用户的脸在镜头前的时间。我添加了几个按钮来使SurfaceView可见/不可见,我发现当人脸检测不可见或已经过时,它会停止工作。
有没有办法在不需要布局中的SurfaceView的情况下启用面部检测?
以下是我编码的方式:
mCamera.setPreviewDisplay(mSurfaceHolder);
mCamera.startPreview();
if(mCamera.getParameters().getMaxNumDetectedFaces() >0) {
mCamera.setFaceDetectionListener(new Camera.FaceDetectionListener() {
@Override public void onFaceDetection(Face[] faces, Camera camera) {
if(faces.length > 0) {
System.out.println("Found someone");
}
}
});
mCamera.startFaceDetection();
}
要隐藏surfaceview,我添加了一个黑色视图。 : - )
<View android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="#000"/>
我有一个合理的环顾四周,我还没有找到使用startFaceDetection()的代码。
感谢您的任何想法/帮助。
答案 0 :(得分:1)
您应该为您的目的使用虚拟 SurfaceTexture 。
通过传递任何整数(例如
)来创建SurfaceTexture对象 mSurfaceTexture = new SurfaceTexture(1);
现在,打开相机并执行以下操作:
mCamera = Camera.open(Camera.CameraInfo.CAMERA_FACING_FRONT);
try{
mCamera.setPreviewTexture(mSurfaceTexture);
}
catch (IOException t) {
//Do Something here
}
3)你可以用同样的方式做其他事情,即使用面部检测。
答案 1 :(得分:0)
如果省略
,则不会显示相机预览setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
我还没有使用人脸检测对此进行测试(没有4.0设备且模拟器还不支持它)。但它应该有用。
参考:https://groups.google.com/forum/?fromgroups#!topic/android-developers/EzBgJRetaCo
你也可以尝试使用setPreviewTexture(SurfaceTexture st)而不是setPreviewDisplay,并使用你可以控制的SurfaceTexture。