所以基本上,我有这个代码,
if(mCamera.getParameters().getMaxNumDetectedFaces()==0)
{
System.out.println("Face detection not avaliable");
}
else
{
System.out.println("Max faces: " + Integer.toString(mCamera.getParameters().getMaxNumDetectedFaces()));
}
mCamera.setFaceDetectionListener(new FaceDetectionListener() {
@Override
public void onFaceDetection(Face[] faces, Camera camera) {
// TODO Auto-generated method stub
System.out.println("Face detection callback called." + Integer.toString(faces.length));
}
});
调用mCamera.startFaceDetection();
后,调用回调,一切正常。但是,如果我更换摄像头,相同的代码会导致回调永远不会被调用。 getMaxNumDetectedFaces
,两台摄像机都返回35,所以我认为前置摄像头支持它。我可以来回更换相机,每次调用此代码,它将适用于后置摄像头,但不适用于前置摄像头。
还有什么我可能做错了吗?
答案 0 :(得分:1)
相机的质量是否可能无法正常工作(前面的那个,对吧?)是否不足以让面部检测工作?相机的图像可能太嘈杂,无法让面部检测器工作。还有许多其他变量可能阻碍这一点。
同时搜索前置摄像头,看起来前置摄像头的点可能会被镜像。这在http://developer.android.com/reference/android/hardware/Camera.Face.html
中描述我希望这会有所帮助。
答案 1 :(得分:0)
有没有办法检查相机是否正在被读取? Java在注册网络摄像头等方面一直存在一些问题....也许试着确保你能用网络摄像头看到图像。
顺便说一句,如果您需要任何进一步的帮助,我们需要了解更多有关代码的信息。图书馆等....
答案 2 :(得分:0)
此代码将返回前置摄像头的ID,其他人可以更改摄像头。相机信息:
private int findFrontFacingCamera() {
int cameraId = -1;
// Search for the front facing camera
int numberOfCameras = Camera.getNumberOfCameras();
for (int i = 0; i < numberOfCameras; i++) {
Camera.CameraInfo info = new Camera.CameraInfo();
Camera.getCameraInfo(i, info);
if (info.facing == Camera.CameraInfo.CAMERA_FACING_FRONT) {
Log.d("FaceDetector", "Camera found");
cameraId = i;
break;
}
}
return cameraId;
}
我的代码可以在我的Gallaxy平板电脑上工作,但它不会调用拍摄照片,因此不会在其他设备中调用面部检测,所以在搜索了一段时间之后我发现这个解决方案有效。我在调用takePicture的类中添加了以下代码:
camera.startPreview();
答案 3 :(得分:-2)
您可以使用Webcame从网络摄像头捕获图像。它会自动检测网络摄像头,因此无需额外配置网络摄像头。它一次也支持多个网络摄像头。