Точный и текущий FieldOfView AVCaptureDevice

Из AVFoundation таких объектов, как AVCaptureDevice, я могу прочитать значение fieldOfView, используя

captureDevice.activeFormat.videoFieldOfView

И это дает мне значение около 58 градусов на iPhone 6s. Но мне нужно, чтобы текущее значение фактического fieldOfView отображалось в текущем кадре, пока работает AVCaptureSession. Под этим я подразумеваю, что значение, считанное с activeFormat, не отражает реального fieldOfView, когда объектив перемещается, чтобы получить изображение в фокусе. Например, когда я навожу камеру на удаленный объект, объектив перемещается, чтобы сохранить фокус, и fieldOfView немного увеличивается, примерно до 61 градуса. Вы можете наблюдать это поведение в ARKit камере - даже когда камера ловит фокус, отображаемые объекты становятся больше и меньше, фокусируясь вместе с предварительным просмотром камеры. Я хотел бы знать, как я могу добиться такого поведения и настроить fieldOfView на текущее положение объектива. Мне нужно применить это к SceneKit камере.

Вкратце: как найти текущую точную FieldOfView камеры с учетом текущего положения фокуса (или положения объектива)

Чтобы понять, что я имею в виду, посмотрите на эту гифку:

Фокусировка на iPhone

В начале вы можете видеть, как он фокусируется, а видео как бы немного увеличивает/уменьшает масштаб, чтобы поймать правильное положение объектива. Так что, когда эта линза движется, реальный видимый fieldOfView становится немного другим.


person Damian Dudycz    schedule 18.07.2018    source источник
comment
Ближайшее значение, которое я могу придумать, чтобы приблизиться к решению этой проблемы, — это AVCaptureDevice.lensPosition. Это значение изменяется от 0,0 до 1,0 при повышении резкости изображения для фокусировки. Но значение от 0 до 1 не дает мне достаточно информации, я не знаю, как именно это влияет на fieldOfView. Есть ли какие-то другие значения, которые я мог бы использовать для расчета этого?   -  person Damian Dudycz    schedule 18.07.2018
comment
Я не смог найти никакого Apple API, кроме того, что вы уже обнаружили. Вот небольшой совет. Чтобы получать обновленные значения lensPosition и fieldOfView , вы можете прикрепить CADisplayLink. Но fieldOfView, похоже, не имеет значения при изменении положения объектива или масштабирования, поэтому я думаю, вам следует найти подходящие формулы в Интернете. :(   -  person Denis Litvin    schedule 25.07.2018
comment
Спасибо за комментарий. Я уже использую отображаемую ссылку, так что да, это место, где я мог бы рассчитать это, но я нигде не могу найти формулы. Я не думаю, что смогу найти какие-либо формулы в Интернете, потому что этих значений у меня недостаточно. Было бы так, если бы LensPosition был в мм, но это просто какое-то произвольное значение от 0 до 1. Я даже отправил tsi в Apple, но пока без ответа. Я подумываю измерить максимальное поле зрения вручную по изображению, а затем использовать LensPosition, чтобы добавить разницу между заявленным значением поля зрения и положением объектива. Это могло бы работать, но не было бы очень точным и отличалось бы от других устройств.   -  person Damian Dudycz    schedule 26.07.2018
comment
Я только что получил ответ от Apple, подтверждающий, что это невозможно сделать с помощью общедоступного API. Мне осталось использовать жестко закодированные оценки. Они предложили мне заполнить запрос на реализацию этого в будущих выпусках.   -  person Damian Dudycz    schedule 26.07.2018
comment
Хорошо, я реализовал разрешение для этого, как я уже говорил ранее - я измерил фактические поля зрения камеры с помощью ARKit для случаев, когда LenPosition равен 0 и 1. И для этих значений для iPhone 6s фактическое поле зрения может отличаться от возвращаемого поля вид между -0,24167252 ..‹ 3,3269768. И это работает отлично, я измерил это, используя реальные объекты и применив их размер и расстояние, и это работает идеально. Может быть, есть какой-то другой способ получить эти значения для других устройств, не измеряя их вручную из ARKit? Мне нужно заполнить словарь значениями для различных устройств.   -  person Damian Dudycz    schedule 14.08.2018
comment
взгляните на этот ответ: stackoverflow.com/a/47643149/9497657   -  person AD Progress    schedule 04.09.2018
comment
@DamianDudycz, не могли бы вы поделиться своей работой по измерению fieldOfView при разных lensPosition? В настоящее время я работаю над чем-то подобным, где мне нужен текущий fieldOfView моего активного сеанса камеры iOS, который не может быть сеансом ARKit, но я заметил, что константа fieldOfView, возвращаемая из iOS, недостаточно хороша для моего варианта использования. Было бы здорово, если бы мне не пришлось переделывать ту же работу, что и ты...   -  person Carsten Haubold    schedule 04.03.2019