Я добавил слушателя FaceDetection в мою камеру после запуска предварительного просмотра. Поэтому, когда лицо обнаруживает, я получаю обратный вызов и, на основании которого, я вычисляю соотношение площади лица и экрана предварительного просмотра. При некотором значении, если процент ниже, я увеличиваю камеру.
Но проблема в том, что после увеличения функция распознавания лиц не работает, не получая обратный вызов для FaceDetectionListener.
public class FaceDetectionListener implements Camera.FaceDetectionListener {
@Override
public void onFaceDetection( final Camera.Face[] faces, Camera camera ) {
Log.i(TAG, "onFaceDetection " + faces.length);
if ( faces.length > 0 ) {
final Handler handler = new Handler();
handler.postDelayed(new Runnable() {
@Override
public void run() {
Rect uRect = null;
//Do something after 100ms
for ( int i = 0; i < faces.length; i++ ) {
int left = faces[i].rect.left;
int right = faces[i].rect.right;
int top = faces[i].rect.top;
int bottom = faces[i].rect.bottom;
uRect = new Rect(left, top, right, bottom);
Log.d("FaceDetection", "face detected: " + faces.length +
" Face 1 Location Left: " + left +
" Right: " + right + " Top: " + top + " Bottom: " + bottom + " Area: " + (uRect.height() * uRect.width()));
}
FaceDetect faceDetect = new FaceDetect();
faceDetect.setArea(uRect.height() * uRect.width());
EventBus.getDefault().post(faceDetect);
}
}, 500);
}
}
}
Коды масштабирования -
private synchronized void zoomCamera( int zoomValue ) {
Log.i(TAG, "Camera Zoomed : " + zoomValue);
if ( mCamera.getParameters().isZoomSupported() ) {
Camera.Parameters parameters = mCamera.getParameters();
parameters.setRecordingHint(true);
parameters.setZoom(zoomValue);
mCamera.setParameters(parameters);
Log.i(TAG, "Camera ZOOMED : ");
}
}