Камеры и расширения ввода
В этой статье представлены модель камеры, параметры и другие замечания по использованию физических камер, а также способ расширения ввода с помощью custom camera.

Input frame
Input frame - это базовая единица данных в AR. Она представляет всю связанную информацию кадра, захваченного с камеры или другого источника данных. Обычно input frame содержит:
- Raw image data (camera image)
- Параметры камеры (например, intrinsics)
- Timestamp
- Матрицу transform камеры в мировых координатах
- Tracking status
Эта информация предоставляет AR-алгоритмам пространственно-временной контекст, необходимый для localization, tracking, rendering и других задач.
Физическая камера
Камеры, используемые сейчас в электронных устройствах, обычно состоят из нескольких линз и зеркал. Однако реальные оптические структуры обычно не используются для построения модели камеры; вместо этого используются упрощенные модели.
Модель pinhole camera

Это самая простая обычно используемая модель. Свет проходит через маленькое отверстие и формирует изображение, повернутое на 180 градусов, но данные, выводимые камерой, выпрямляют изображение. Для описания этой модели нужны шесть параметров: ширина и высота в пикселях \(w, h\), фокусные расстояния в пикселях \(f_x, f_y\) и пиксельные позиции principal point \(c_x, c_y\). Обратите внимание, что при масштабировании ширины и высоты в пикселях фокусные расстояния и позиции principal point также масштабируются соответственно, поэтому положение изображения может оставаться неизменным.
Модель камеры OpenCV
У некоторых камер есть заметная радиальная и тангенциальная distortion. Модель камеры OpenCV добавляет к модели pinhole camera высокоуровневые параметры для описания radial distortion и tangential distortion. Radial distortion описывается через \(k_1, k_2, k_3, \cdots\). Tangential distortion описывается через \(p_1, p_2\).
Примечание
Некоторые trackers не поддерживают модель камеры OpenCV.
Модель fisheye camera OpenCV
Fisheye camera использует perspective projection, чтобы сжать содержимое с большим углом обзора в меньшую область формирования изображения. Модель fisheye camera OpenCV не содержит correction distortion. На основе шести параметров модели pinhole camera она использует \(k_1, k_2, k_3, k_4, \cdots\) для описания.
Примечание
Некоторые trackers не поддерживают модель fisheye camera OpenCV.

Ориентация камеры и ориентация изображения
На телефоне, когда его обычно держат горизонтально (повернутым на 90 градусов против часовой стрелки от нормального portrait положения), а ориентация отображения экрана также landscape, изображение с задней камеры отображается на экране в том же направлении, что и реальная сцена. Изменение только ориентации отображения экрана без изменения физической ориентации экрана не изменяет ориентацию изображения, выводимого физической камерой. Когда телефон держат нормально в portrait, а ориентация отображения экрана также normal portrait, изображение с задней камеры нужно повернуть на 90 градусов по часовой стрелке перед отображением на экране, чтобы оно совпадало с реальной сценой. При повороте ориентации отображения экрана rendering изображения камеры требует обратной компенсации поворота, чтобы совпадать с реальной сценой.
Ориентация камеры и ориентация изображения обычно определяются относительно natural orientation устройства:
Телефон
Android
Android определяет natural orientation как направление, когда телефон обычно держат в portrait. Inertial measurement unit (IMU) также использует это направление как базовое. Угол поворота изображения, выводимого камерой, относительно этого направления можно получить как параметр камеры.
iOS
В iOS natural orientation явно не определена, но inertial measurement unit использует ту же базу, что и Android.
Планшет
У некоторых планшетов natural orientation - landscape, у некоторых, как у телефонов, normal portrait.
Очки
Natural orientation очков обычно landscape.
При rendering изображения камеры учитываются и ориентация камеры, и ориентация экрана.
Тип камеры и flip камеры
В телефонах обычно есть задняя и передняя камеры. Изображение, выводимое передней камерой, нужно horizontally flip перед отображением на экране, чтобы имитировать зеркало. Без horizontal flip оно выглядит очень непривычно.
Расширение ввода
EasyAR поддерживает расширение ввода с помощью custom camera. Custom camera может получать input frames из внешних источников и передавать их в AR-систему для использования trackers. Получение данных изображения для custom camera можно реализовать самостоятельно.
Руководства для платформ
Использование камер и расширений ввода тесно связано с платформой. Для разработки под целевую платформу см. следующие руководства: