kharlashkin Posted March 20, 2016 Share Posted March 20, 2016 (edited) Постараюсь сделать свою web-камеру для on-line трансляций со звуком и максимально-возможным качеством по умеренной цене. Связано мое желание с все большим и большим распространением VR-очков - Google Cardboard и пластиковые аналоги, Valve SteamVR, Oculus Rift, Sony PlayStation VR и многие другие. Тема интересная и "за спрос в нос не бьют", а чего бы и не попробовать. Итак, почти все на сегодня имеющиеся проекты по созданию 360 камер работает с видео. Т.е. берется видеоряд с камер (зеркальные фотоаппараты, GoPro Hero и т.п.) обычно в видео-формате h.264/h.265, закрепленных специальным образом в адаптерах и в ПО (PTGui, Kolor и др.) сшивается и перегоняется в равнопромежуточную проекцию. Все это происходит за большие деньги и на мощном железе. Как пример, вот требования для проработки видео от VideoStitch: Если посмотреть на стандарты видео, в котором снимают та же 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). Погонял тестовые python скрипты с камерой, пока никаких нареканий нет. Буду заказывать ещё 4 камер камеры для построения 360х135 видео из 5 шт. Буду рад любой помощи, советам да и просто доброму слову от участников форума. Edited March 21, 2016 by kharlashkin 3 @ Link to comment Short link Share on other sites More sharing options...
kharlashkin Posted March 21, 2016 Author Share Posted March 21, 2016 (edited) В этом сообщении буду делиться кодом и прогрессом, чтобы не приходилось листать всю тему. Тестовая платформа - ноут мой рабочий с установленной 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 November 4, 2016 by kharlashkin 2 @ Link to comment Short link Share on other sites More sharing options...
kharlashkin Posted November 4, 2016 Author Share Posted November 4, 2016 Ну само собою что тема не была выброшена или удалена. Камеры приехали - китайцы мне даже одну в нагрузку дали и скидку, в итоге сейчас у меня есть 6 шт для полного обзора на все 360. Вчера наконец-то добрался до них, 3 шт. подключил через хаб - хотел выгнать картинки сразу с 3-х чтобы посмотреть нагрузку, но вышла "пичалька". 2 @ Link to comment Short link Share on other sites More sharing options...
Pavel3333 Posted November 4, 2016 Share Posted November 4, 2016 @kharlashkin, Странно, что не видел раньше этой темы. А какая картинка будет если одеть VR-очки? Link to comment Short link Share on other sites More sharing options...
kharlashkin Posted November 4, 2016 Author Share Posted November 4, 2016 @kharlashkin, Странно, что не видел раньше этой темы. А какая картинка будет если одеть VR-очки? Ну она в приватном разделе была, и так как "лед тронулся" и без помощи сообщества не смогу обойтись скорее всего (одна голова хорошо, а три - Змей Горыныч) - пришло время опубликовать её. Сейчас речь не идет о 3Д (т.е. для каждого глаза своя картинка). Основная идея сделать доступную OpenSource камеру которая позволит свободно вертеть головой в видео или трансляции. 1 @ Link to comment Short link Share on other sites More sharing options...
Pavel3333 Posted November 4, 2016 Share Posted November 4, 2016 (edited) Ну она в приватном разделе была Я так и подумал) Я ноль в стримах, да и в видеомонтаже тоже. Но чтобы ее просто поворачивать, можно поставить сервопривод. А можно два. И будет вам поворот на все 360 градусов. Она должна поворачивать свой взор управлением человека или "сама по себе"? Edited November 4, 2016 by Pavel3333 Link to comment Short link Share on other sites More sharing options...
kharlashkin Posted November 4, 2016 Author Share Posted November 4, 2016 (edited) Но чтобы ее просто поворачивать, можно поставить сервопривод. А можно два. И будет вам поворот на все 360 градусов. Она должна поворачивать свой взор управлением человека или "сама по себе"? Нет она не поворачивается - а сразу снимает всё ;) Наверное я не совсем правильно показал направление. Например есть места в этом мире куда мы вряд ли попадем в своей жизни (МКС, Гималаи, глубоко под воду и т.п.) да и просто на концерты, в театр, музей и т.п. не всегда можешь сходить. В случае стрима - берешь просто картонку от гугля, вставляешь в неё смартфон и ты прямо сейчас в любом месте и можешь смотреть куда хочешь. и таких подключений одновременных к одной камере может быть тысяча и без сервоприводов. Сейчас уже существуют решения (камеры, сервера) которые могут это делать, но стоят совсем невменяемых денег. Если конструктор для такой камеры можно будет купить например за 200-300$ и имея средний по параметрам ПК выкладывать записи или стримить в сеть контент - будет своеобразный "бум" на телеприсутствие. Edited November 4, 2016 by kharlashkin 1 @ Link to comment Short link Share on other sites More sharing options...
kharlashkin Posted November 8, 2016 Author Share Posted November 8, 2016 Для продолжения экспериментов решил собрать камеры как задумано, то есть на грани куба. Поломал 4 шт. кубиков пластиковых у детей за два вечера. Сегодня нашел из старого "советского" набора с толстой пластмассой один красного цвета - может с ним повезет. 2 @ Link to comment Short link Share on other sites More sharing options...
Recommended Posts