因工作需要面部检测,为了确保人脸辨识度可靠,需要保证人脸区域曝光充足。因此需要在Android 摄像头中针对
人脸区域进行针对性的曝光。经过找寻一大堆资料,在Camera2 API下实现了此功能,但是Camera2操作起来太复杂,因此转而
设计Camera API,二者原理一样,最终也是成功设计出来了。
class faceDetectListener implements Camera.FaceDetectionListener{
@Override
public void onFaceDetection(Camera.Face[] faces, Camera camera) {
Camera.Parameters parameters = camera.getParameters();
if(faces.length > 0){
faceText.setText("X:" + faces[0].rect.centerX() + "Y:" + faces[0].rect.centerY());
Log.d("FaceDetection", "face detected: "+ faces.length +
" Face 1 Location X: " + faces[0].rect.centerX() + "Y: " + faces[0].rect.centerY() );
int x = faces[0].rect.centerX();
int y = faces[0].rect.centerY();
Rect rect = new Rect(x-100, y-100, x+100, y+100);
Camera.Area area = new Camera.Area(rect, 1000);
parameters.setMeteringAreas(Arrays.asList(area));
}
if(faces.length <= 0){
faceText.setText("no face");
// Rect rect = new Rect(-100, -100, 100, 100);
// Camera.Area area = new Camera.Area(rect, 1000);
// parameters.setMeteringAreas(Arrays.asList(area));
}
camera.setParameters(parameters);
}
}
主体逻辑放在人脸检测的监听事件中,首先获取检测到的人脸坐标,然后以人脸坐标为中心绘制一个边长为200的矩形。再将这个矩形区域配上权重,最后配置摄像头
参数。