Frontend Engineer
レンズの中心点からイメージセンサー(フイルム面)までの距離。カメラによって異なる。
人の目で言うと水晶体の中心から網膜までの距離。
大きいほど遠くのものを写せる。小さいほど広い範囲を写せる。
カメラからフォーカスした物体までの距離。
camera2CameraControl.captureRequestOptions = CaptureRequestOptions.Builder() .setCaptureRequestOption(CaptureRequest.CONTROL_AF_MODE, CameraMetadata.CONTROL_AE_MODE_OFF) .setCaptureRequestOption(CaptureRequest.LENS_FOCUS_DISTANCE, 0f) .build()
単位はLENS_INFO_FOCUS_DISTANCE_CALIBRATIONの値に依存する。
public static final int LENS_INFO_FOCUS_DISTANCE_CALIBRATION_APPROXIMATE = 1; public static final int LENS_INFO_FOCUS_DISTANCE_CALIBRATION_CALIBRATED = 2; public static final int LENS_INFO_FOCUS_DISTANCE_CALIBRATION_UNCALIBRATED = 0;
APPROXIMATE または CALIBRATED に設定されている場合、単位はディオプター(1/メートル) 。
0.5 ディオプターは 2 メートルの焦点距離。
4 ディオプターは 0.25 メートルの焦点距離。
UNCALIBRATEDの時、LENS_INFO_MINIMUM_FOCUS_DISTANCEが最小値である以外、正確な値はないらしい。
大まかにはディオプター単位らしいが、正確ではないとのこと。
まずは以下のようにして調べるのがいいかも
// HWがAFに対応しているか Log.d("Test", packageManager.hasSystemFeature(PackageManager.FEATURE_CAMERA_AUTOFOCUS).toString()) val camera = cameraProvider.bindToLifecycle( this, cameraSelector, previewUseCase, imageCaptureUseCase) val camChars = Camera2CameraInfo.extractCameraCharacteristics(camera.cameraInfo) val discoveredMinFocusDistance = camChars.get(CameraCharacteristics.LENS_INFO_MINIMUM_FOCUS_DISTANCE) val focusDistanceCalibration = camChars.get(CameraCharacteristics.LENS_INFO_FOCUS_DISTANCE_CALIBRATION) Log.i("discoveredMinFocusDistance: ", "$discoveredMinFocusDistance") Log.i("focusDistanceCalibration: ", "$focusDistanceCalibration")
レンズの中心点からイメージセンサー(フイルム面)までの距離。カメラによって異なる。
人の目で言うと水晶体の中心から網膜までの距離。
大きいほど遠くのものを写せる。小さいほど広い範囲を写せる。
カメラからフォーカスした物体までの距離。
camera2CameraControl.captureRequestOptions = CaptureRequestOptions.Builder() .setCaptureRequestOption(CaptureRequest.CONTROL_AF_MODE, CameraMetadata.CONTROL_AE_MODE_OFF) .setCaptureRequestOption(CaptureRequest.LENS_FOCUS_DISTANCE, 0f) .build()
単位はLENS_INFO_FOCUS_DISTANCE_CALIBRATIONの値に依存する。
public static final int LENS_INFO_FOCUS_DISTANCE_CALIBRATION_APPROXIMATE = 1; public static final int LENS_INFO_FOCUS_DISTANCE_CALIBRATION_CALIBRATED = 2; public static final int LENS_INFO_FOCUS_DISTANCE_CALIBRATION_UNCALIBRATED = 0;
APPROXIMATE または CALIBRATED に設定されている場合、単位はディオプター(1/メートル) 。
0.5 ディオプターは 2 メートルの焦点距離。
4 ディオプターは 0.25 メートルの焦点距離。
UNCALIBRATEDの時、LENS_INFO_MINIMUM_FOCUS_DISTANCEが最小値である以外、正確な値はないらしい。
大まかにはディオプター単位らしいが、正確ではないとのこと。
まずは以下のようにして調べるのがいいかも
// HWがAFに対応しているか Log.d("Test", packageManager.hasSystemFeature(PackageManager.FEATURE_CAMERA_AUTOFOCUS).toString()) val camera = cameraProvider.bindToLifecycle( this, cameraSelector, previewUseCase, imageCaptureUseCase) val camChars = Camera2CameraInfo.extractCameraCharacteristics(camera.cameraInfo) val discoveredMinFocusDistance = camChars.get(CameraCharacteristics.LENS_INFO_MINIMUM_FOCUS_DISTANCE) val focusDistanceCalibration = camChars.get(CameraCharacteristics.LENS_INFO_FOCUS_DISTANCE_CALIBRATION) Log.i("discoveredMinFocusDistance: ", "$discoveredMinFocusDistance") Log.i("focusDistanceCalibration: ", "$focusDistanceCalibration")
Frontend Engineer