Устаревший API-интерфейс камеры предложил объекту Camera функцию autofocus()
, с помощью которой мы могли бы увеличить фокус предварительного просмотра / захвата после обнаружения того, что полученные кадры / изображения размыты.
Теперь мы обновилинаше приложение использует API-интерфейс camera2 и все еще пытается выяснить, как мы можем вручную активировать автофокусировку камеры.Для инициализации предварительного просмотра мы используем следующий код:
// When the session is ready, we start displaying the preview.
mCaptureSession = cameraCaptureSession;
try {
// Auto focus should be continuous for camera preview.
mPreviewRequestBuilder.set(CaptureRequest.CONTROL_AF_MODE,
CaptureRequest.CONTROL_AF_MODE_CONTINUOUS_PICTURE);
// Flash is automatically enabled when necessary.
setAutoFlash(mPreviewRequestBuilder);
// Finally, we start displaying the camera preview.
mPreviewRequest = mPreviewRequestBuilder.build();
mCaptureSession.setRepeatingRequest(mPreviewRequest,
mCaptureCallback, mBackgroundHandler);
} catch (CameraAccessException e) {
e.printStackTrace();
}
Позже при доступе к кадрам захвата для анализа качества изображения и, если оно слишком размытое, мы хотели бы снова запустить автофокусировку, чтобы повысить качество результата.:
private final ImageReader.OnImageAvailableListener mOnImageAvailableListener
= new ImageReader.OnImageAvailableListener() {
@Override
public void onImageAvailable(ImageReader reader) {
Log.e(TAG, "Image captured!");
Image image = reader.acquireLatestImage();
float focusScore = analyseImage(image);
if(focusScore < 10) {
// Here we would like to trigger some focus functionality
} else {
// Take the result frame as good enough and proceed
}
image.close();
}
};
Обновление: Следующий ответ также помог мне реализовать решение этой проблемы:
ссылка