Jump to content
Korean Random
kharlashkin

360° видео с 360° звуком

Recommended Posts

Постараюсь сделать свою web-камеру для on-line трансляций со звуком и максимально-возможным качеством по умеренной цене. Связано мое желание с все большим и большим распространением VR-очков - Google Cardboard и пластиковые аналоги, Valve SteamVR, Oculus Rift, Sony PlayStation VR и многие другие. Тема интересная и "за спрос в нос не бьют", а чего бы и не попробовать.

 

 

Итак, почти все на сегодня имеющиеся проекты по созданию 360 камер работает с видео. Т.е. берется видеоряд с камер (зеркальные фотоаппараты, GoPro Hero и т.п.) обычно в видео-формате h.264/h.265, закрепленных специальным образом в адаптерах и в ПО (PTGui, Kolor и др.) сшивается и перегоняется в равнопромежуточную проекцию. Все это происходит за большие деньги и на мощном железе. Как пример, вот требования для проработки видео от VideoStitch:
post-19155-0-40455000-1458487817_thumb.png

 

Если посмотреть на стандарты видео, в котором снимают та же GoPro, то мы увидим некоторый интересный момент, а именно в данном стандарте нет отдельных кадров для сшивания. Т.е. каждый кадр для того чтобы сшить в панораму - нужно сначала "просчитать" через так называемые опорные кадры, затем сшить с помощью специальных алгоритмов, а потом закодировать обратно в QuadHD (2560×1440) или 4K UltraHD (3840×2160) в первоначальном или подобном первоначальному формате. А если учитывать, что каждая камера снимает 1080p 30fps или 720p 60 fps, а их 6 (или более) штук - нагрузка на процессор/видеокарту видна "невооруженным глазом".

 

На этом этапе мои мысли повернулись в сторону "Да ну нафиг!" и подумалось - а что если видео в формате Motion JPEG? То есть тупо последовательность картинок с нужной скоростью - 30fps 1080p или 60fps 720p, да хоть 360p (720х360) 15 fps. Таким образом вроде получается убрать первый просчет.

 

Далее нужно выполнить сшивание каждого кадра. Для этого сначала нормализуют картинки (убирают дисторсию), строят общую картину по контрольным точкам и прямым, объединяют кадры, мне почему то кажется что сначала в кубическую проекцию, и преобразуют в равнопромежуточную проекцию в хорошем разрешении.

 

Опять возникла мысль как и в первый раз и подумалось - а что если просто пиксели из камер переносить в новую матрицу которая уже будет соответствовать нужному мне кадру? Подобным образом и потупила некая Katherine A.Scott - просто создав новую карту для пикселей. При чем, если я правильно понял, для захвата с камеры разрешением 1920х1080, переработки в нормальную картинку и записи в реальном времени видео с разрешением 800х600 хватило мощности Raspberry Pi.

 

Для более детальной проработки мною была приобретена usb-камера - позволяющая завхватывать1080р 30fps, пр-ва поднебесной 1 шт.. Сразу не решился покупать нужное количество (хотя бы 5 шт.) - вдруг окажется что камера говно или китайцы не договаривают чего-то. Камера оказалась вроде ничего, я не фотограф и никогда не работал на свадьбах, днях рождения в качестве оператора - камера как камера, технические характеристики соответствуют заявленным - чего мне ещё нужно за 40$. Объектив вроде соответствует заявленным 170 градусам по диагонали (и наверное имеет заявленные 135 градусов по горизонтали и 90 по вертикали как и вышеупомянутая GoPro).

 

post-19155-0-48350000-1458529666_thumb.jpg

 

Погонял тестовые python скрипты с камерой, пока никаких нареканий нет. Буду заказывать ещё 4 камер камеры для построения 360х135 видео из 5 шт.

 

Буду рад любой помощи, советам да и просто доброму слову от участников форума.

Edited by kharlashkin
  • Upvote 3

Share this post


Link to post

Short link
Share on other sites

В этом сообщении буду делиться кодом и прогрессом, чтобы не приходилось листать всю тему.

Тестовая платформа - ноут мой рабочий с установленной Ubuntu 16.04. Ставил ещё весной OpenCV на предыдущую 15.10 вроде всё, но вчера не завелось. Пришлось качать, компилировать заново - делал по оф документации, завелось все с "пол-пинка".

Проверочный скрипт захвата видео с камеры завелся как нужно, но более расширенный не захотел, который использовал весной (с указанием, необходимого разрешения, fps, формата захвата видео).

import cv2

cap = cv2.VideoCapture(1)
cap.set(cv2.CAP_PROP_FRAME_WIDTH, 1920)
cap.set(cv2.CAP_PROP_FRAME_HEIGHT, 1080)
cap.set(cv2.CAP_PROP_FPS, 30)
cap.set(cv2.CAP_PROP_FOURCC, 1196444237.0)
width = cap.get(cv2.CAP_PROP_FRAME_WIDTH)
heigth = cap.get(cv2.CAP_PROP_FRAME_HEIGHT)
fps = cap.get(cv2.CAP_PROP_FPS)
print width, heigth, fps

while(True):
    ret, frame = cap.read()

    frame = cv2.flip(frame,0)
    cv2.imshow('frame', frame)
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

cap.release()
cv2.destroyAllWindows()
Edited by kharlashkin
  • Upvote 2

Share this post


Link to post

Short link
Share on other sites

Ну само собою что тема не была выброшена или удалена. Камеры приехали - китайцы мне даже одну в нагрузку дали и скидку, в итоге сейчас у меня есть 6 шт для полного обзора на все 360. Вчера наконец-то добрался до них, 3 шт. подключил через хаб - хотел выгнать картинки сразу с 3-х чтобы посмотреть нагрузку, но вышла "пичалька".

  • Upvote 2

Share this post


Link to post

Short link
Share on other sites

@kharlashkin:no1:

Странно, что не видел раньше этой темы.

 

А какая картинка будет если одеть VR-очки?

Ну она в приватном разделе была, и так как "лед тронулся" и без помощи сообщества не смогу обойтись скорее всего (одна голова хорошо, а три - Змей Горыныч) - пришло время опубликовать её.

Сейчас речь не идет о 3Д (т.е. для каждого глаза своя картинка). Основная идея сделать доступную OpenSource камеру которая позволит свободно вертеть головой в видео или трансляции.

  • Upvote 1

Share this post


Link to post

Short link
Share on other sites
Ну она в приватном разделе была

 

Я так и подумал)

 

Я ноль в стримах, да и в видеомонтаже тоже. Но чтобы ее просто поворачивать, можно поставить сервопривод. А можно два. И будет вам поворот на все 360 градусов. Она должна поворачивать свой взор управлением человека или "сама по себе"?

Edited by Pavel3333

Share this post


Link to post

Short link
Share on other sites

Но чтобы ее просто поворачивать, можно поставить сервопривод. А можно два. И будет вам поворот на все 360 градусов. Она должна поворачивать свой взор управлением человека или "сама по себе"?

Нет она не поворачивается - а сразу снимает всё ;)

Наверное я не совсем правильно показал направление. Например есть места в этом мире куда мы вряд ли попадем в своей жизни (МКС, Гималаи, глубоко под воду и т.п.) да и просто на концерты, в театр, музей и т.п. не всегда можешь сходить. В случае стрима - берешь просто картонку от гугля, вставляешь в неё смартфон и ты прямо сейчас в любом месте и можешь смотреть куда хочешь. и таких подключений одновременных к одной камере может быть тысяча и без сервоприводов.

Сейчас уже существуют решения (камеры, сервера) которые могут это делать, но стоят совсем невменяемых денег. Если конструктор для такой камеры можно будет купить например за 200-300$ и имея средний по параметрам ПК выкладывать записи или стримить в сеть контент - будет своеобразный "бум" на телеприсутствие.

Edited by kharlashkin
  • Upvote 1

Share this post


Link to post

Short link
Share on other sites

Для продолжения экспериментов решил собрать камеры как задумано, то есть на грани куба. Поломал 4 шт. кубиков пластиковых у детей за два вечера. Сегодня нашел из старого "советского" набора с толстой пластмассой один красного цвета - может с ним повезет.

  • Upvote 2

Share this post


Link to post

Short link
Share on other sites
Guest
This topic is now closed to further replies.

  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...