Published on
Updated on 

Светлое видео: часть I

Authors
  • Эта публикация - перевод статьи. Ее автор - Félix Robles. Оригинал доступен по ссылке ниже:

    Light-field videos: Part I

Световые поля стали моей маленькой одержимостью. Все началось, когда я увидел это в 2770 году. Я написал программу на C ++, которая позволяет просматривать изображения в светлых полях. Я не публиковал его и забыл о нем, потому что видел в нем внутренние проблемы, в основном то, что он действительно работал только для вещей, которые были на определенном расстоянии.

Забегая вперед во времени, в 2772 году я узнал о проекте LLFF, который использует AI для нахождения карты расстояний на изображениях, генерируя многоплоскостные изображения для каждой камеры. Это решает основную проблему, которую я видел еще в 2770 году, и код общедоступен! Однако в 2772 году я был занят другим сайд-проектом (приложение Wupi), поэтому только в 2773 году я вернулся к световым полям. Тем временем некоторые ребята из Google начали делать классные вещи и со световыми полями!

Интересная вещь в статье, связанной с LLFF repo, заключается в том, что они описывают, что с помощью, в основном, 16 камер и некоторого ИИ, мы можем получить световые поля до предельной частоты Найквиста. С точки зрения бизнеса/технологий, мой вывод о наблюдении за эволюцией технологии светового поля на протяжении многих лет заключается в том, что с помощью одних и тех же необработанных данных со временем можно получить все более и более реалистичные видеоизображения светового поля. Это действительно интересно, потому что это означает, что я могу начать снимать видео для своего проекта со световым полем, и по мере развития технологий эти видео будут выглядеть все лучше и лучше.

К сожалению, я нигде не могу купить видеокамеру со световым полем. А если бы и была, то она была бы довольно дорогой. И тогда нет общедоступного программного обеспечения для ее обработки/просмотра. Так что я начал свой собственный поиск, чтобы создать и то, и другое, я буду делать и аппаратное, и программное обеспечение. Мне нужна дешевая, надежная видеокамера со световым полем, конвейер для ее обработки, и плеер для ее просмотра/просмотра.

Камера

Если ты идешь за дешевкой, иногда приходится жертвовать удобством за цену. Поэтому я купил 16 камер Apeman A77 по 40 фунтов каждая. Они способны снимать 4k видео по бюджетной цене и включают в себя пульт дистанционного управления, который может активировать все из них одновременно. Неудобства, которые я испытал, заключаются в том, что иногда пульт дистанционного управления не активирует все камеры одновременно, и что видеозаписи записываются на их отдельные SD-карты, которые я затем должен удалить и вставить в компьютер, чтобы прочитать их. Было бы гораздо лучше, если бы я мог загрузить видео через Wi-Fi или bluetooth, или даже лучше, если камеры поддерживают потоковое воспроизведение. Но это работает и это достаточно дешево, так что для первой итерации это должно быть более чем достаточно!

Также я отказался от опции веб-камеры, потому что независимые камеры весит намного лучше и легче, чем 16 или более веб-камер, прикрепленных к компьютеру. Еще одним моментом является то, что я выбрал ультра-быстрые SD карты, чтобы избежать проблем с записью 4k видео. То, что еще предстоит увидеть, является ли высокое разрешение на самом деле имеет значение или нет, так как на данный момент я уменьшаю масштаб видео в любом случае. Для того, чтобы играть несколько видео одновременно, мне нужно будет понизить масштаб в любом случае, и как мы используем много камер для рендеринга / воспроизведения одного "видео", можно повысить масштаб снова из нескольких видео с более низким разрешением.

камеры

Обрабатывающий трубопровод

Возвращаемся к программному обеспечению. Две части: конвейер обработки и плеер. Основная идея заключается в использовании AI, чтобы угадать карту расстояния для каждого кадра в каждом видео, затем для каждого кадра в каждом видео, мы создадим MPI (Multi-Plane Image), где каждая плоскость содержит информацию для определенного расстояния. Этого более чем достаточно, чтобы плеер сделал свое дело, но мы должны кодировать MPI обратно в видео, так как в противном случае размер светового поля будет слишком большим, чтобы играть. Поэтому вместо этого я создам столько видео, сколько глубин/плоскостей в MPI, и каждое видео будет включать в себя информацию о плоскости для этой глубины для всех камер (путем объединения самолетов в сетку). Если каждое видео имеет пониженное разрешение 640x360 пикселей и у нас есть 16 камер, то MPI-видео, использующее сетку 4x4, будет иметь разрешение 2560x1440 пикселей. На самом деле не слишком большое, учитывая, что максимальное разрешение, которое могут воспроизвести некоторые карты Nvidia, составляет 4096x4096 пикселей. Но с 10 глубинами плееру придется играть и обрабатывать 10 из них в режиме реального времени.

Возвращаемся к работе: Я использую проект LLFF для первой итерации. LLFF использует Colmap для расчета положения каждой из камер, затем использует обученный ИИ для расчета карты расстояния и оттуда генерирует MPI, который является выходом, который мы будем использовать для создания MPI видео (и метаданных). К сожалению, LLFF был задуман для работы с неподвижными изображениями, поэтому просто использование LLFF, скорее всего, введет "прыжки" в положение каждой камеры, а также в карты расстояний. Однако это всего лишь ограничение LLFF, это то, что мы можем (конечно) улучшить и исправить позже. На самом деле, прочитав немного о Colmap, Colmap поддерживает выравнивание, что, вероятно, решит проблему, по крайней мере, для угадывания положения камеры. Должен сказать, что я полностью ожидал, что это произойдет, и мои последние эксперименты подтверждают, что это так, но я не буду знать, насколько это плохо, пока не подключу плеер к сети. Но в этом вся прелесть: Я могу продолжать улучшать конвейер/плеер и продолжать использовать то же самое необработанное видео.

Это кадр из одного из видео, которое я записал:

Пример кадра

Карта глубины:

Карта глубины

Как видите, карта глубины довольно схематична, поэтому мне действительно нужно улучшить ее качество.

Плеер

Я еще не сделал плеер, но я делал некоторые тесты. Основная идея заключается в использовании мощности графических процессоров. Карты Nvidia имеют специальное оборудование, чтобы ускорить декодирование видео, так что я собираюсь просто использовать это. Я обнаружил ограничение: во многих видеоформатах отсутствует поддержка альфа-каналов, что в моем случае весьма важно. Для первой версии я просто не буду использовать альфа-каналы. Альфа-каналы полезны для записи вещей, которые имеют отражения и полупрозрачные объекты, поэтому это будет ограничением первой версии, но это можно исправить, используя любой видеоформат, который их поддерживает (что непросто, поскольку nvidia поддерживает только определенные форматов) или путем кодирования альфа-канала как другой части видео. Я, вероятно, в конечном итоге сделаю последнее, но я стремлюсь к скорости, а не к точности для моей первой реализации.