当相机处于预览模式时,我需要找到用户的脸形(圆形,椭圆形等),并根据形状显示脸部轮廓。我在我的项目中使用Camera.FaceDetectionListener,我的应用程序支持的最小系统是14.根据文档的说法,此版本应该支持此功能但是没有呀为什么我的设备(SG2)不支持此功能,而其版本为4.1.2。
这是我的代码:
private Camera.FaceDetectionListener mFaceDetectionListener = new Camera.FaceDetectionListener() {
@Override
public void onFaceDetection(Camera.Face[] faces, Camera camera) {
Log.d(TAG, "Face detected.");
Camera.Face face[] = new Camera.Face[MAX_FACES];
Log.d(TAG, face.length + " face(s) detected.");
Rect rect = face[0].rect;
Log.d(TAG, "width: " + rect.width());
Log.d(TAG, "height: " + rect.height());
}
};
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
// Get context of application
mContext = getActivity().getApplicationContext();
if(!Device.checkCameraHardware(mContext))
return null;
// Assign layout to fragment
View view = inflater.inflate(R.layout.fragment_face_camera, container, false);
// Create an instance of Camera
mCamera = getCameraInstance();
mCamera.setFaceDetectionListener(mFaceDetectionListener);
// Create our Preview view and set it as the content of our activity.
mPreview = new CameraPreview(mContext, mCamera);
FrameLayout preview = (FrameLayout) view.findViewById(R.id.camera_preview);
preview.addView(mPreview);
ImageButton captureButton = (ImageButton) view.findViewById(R.id.ibCaptureButton);
captureButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// get an image from the camera
mCamera.takePicture(null, null, mPicture);
}
}
);
return view;
}
@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
if(this.getView() == null) {
Toast.makeText(mContext, "Device doesn't have camera!", Toast.LENGTH_LONG).show();
return;
}
Camera.Parameters param = mCamera.getParameters();
if(param.getMaxNumDetectedFaces() > 0) {
// start detecting number of faces
mCamera.startFaceDetection();
} else
Log.d(TAG, "The device doesn't support face detection preview feature.");
}
@Override
public void onPause() {
super.onPause();
releaseCamera(); // release the camera immediately on pause event
}
我的输出始终是"设备不支持面部检测预览功能。"。我的代码是对的吗?
根据我的搜索,我发现此功能并不总是可信任的(即使在每个Android设备中都没有> v.14)。所以,我发现OpenCV和JavaCv是替代品。
我尝试使用OpenCV的样本,但它最大的缺点是迫使用户下载OpenCV Manager应用程序。请查看this sample以供参考。
还有一些其他库/技术可以在图像中找到面孔,但我这样看。那么,你的建议是什么?我需要让相机处于预览模式并在相机打开时进行人脸识别,然后找到用户的脸部形状并显示正确的脸部轮廓(图像显示为预览顶部的叠加)。
任何建议都将不胜感激。感谢