Как рассчитать поле зрения в arcore? - PullRequest
0 голосов
/ 16 октября 2018

Есть ли свойство или метод, который можно использовать для доступа к полю обзора («FoV», «угол обзора») камеры при работе с arcore?

Из некоторых экспериментов видно, чтоFoV обычно составляет около 60 градусов, но, предположительно, это будет зависеть от аппаратного обеспечения устройства.

Если к нему нельзя получить прямой доступ, есть ли способ вместо этого рассчитать угол FoV по любому из свойств объекта камеры, например:посмотреть матрицу?

1 Ответ

0 голосов
/ 03 апреля 2019

ARCore библиотека v1.8.0 не возвращает значение FoV.Вместо этого вы можете рассчитать его, используя Camera параметры:

val frame = session.update()
val camera = frame.camera
val imageIntrinsics = camera.imageIntrinsics

val focalLength = imageIntrinsics.focalLength[0]
val size = imageIntrinsics.imageDimensions
val w = size[0]
val h = size[1]

val fovW = Math.toDegrees(2 * Math.atan(w / (focalLength * 2.0)))
val fovH = Math.toDegrees(2 * Math.atan(h / (focalLength * 2.0)))

Другое решение с Camera2 API:

val cameraId = session.cameraConfig.cameraId

val cameraManager = context.getSystemService(Context.CAMERA_SERVICE) as CameraManager
val characteristics = cameraManager.getCameraCharacteristics(cameraId)

val maxFocus = characteristics.get(CameraCharacteristics.LENS_INFO_AVAILABLE_FOCAL_LENGTHS)
val size = characteristics.get(CameraCharacteristics.SENSOR_INFO_PHYSICAL_SIZE)
val w = size.width
val h = size.height

val fovW = Math.toDegrees(2 * Math.atan(w / (maxFocus[0] * 2.0)))
val fovH = Math.toDegrees(2 * Math.atan(h / (maxFocus[0] * 2.0)))
...