Меню Закрыть

Захват лица через веб камеру

Содержание

Захват мимики человека и её перенос на виртуального персонажа является очень серьёзной проблемой среди специалистов по спецэффектам и разработчиков видеоигр. Похоже, что выход приложения FaceRig значительно облегчит жизнь начинающим режиссёрам и разработчикам.

Способов перенесения мимики человека на 3D-персонажей кино и игр существует несколько. Первый и самый трудоёмкий способ – это снять человека на видео, а потом вручную практически покадрово перенести каждую его эмоцию и движение отдельных мышц на виртуального персонажа. В итоге может получиться как приемлемый результат, так и полная чепуха, очень далёкая от реалистичности. Этот способ применялся во множестве старых трёхмерных игр, и сейчас результаты этой методики смотрятся на экране, мягко говоря, нелепо.

Второй способ, который сейчас активно применяют во многих кино и игровых студиях, заключается в приклеивании к лицу актёра специальных крошечных шариков-маркеров, окрашенных в яркий цвет. Во время исполнения той или иной сцены, актёра снимают под разными углами несколько камер. Движение шариков отслеживается в каждый момент времени и заносится в память компьютера. Позднее эти записи конвертируют в специальных приложениях и накладывают на 3D-лицо виртуального персонажа, который тут же начинает повторять мимику актёра, исполнившего его роль. Этой методикой пользуются, например, сотрудники французской студии Quantic Dreams, которые подарили нам игры Heavy Rain и Beyond: Two Souls. В последней игре датчиками пришлось обклеить голливудских актёров Элен Пейдж и Уиллема Дэфо, чтобы как можно точно изобразить их персонажей во время игрового процесса.

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

Куда более доступным многим кажется набирающая обороты тенденция производить захват мимики актёров посредством доступных любому желающему средств. Некоторые уже приспособили под это дело сенсор Kinect, который является аксессуаром к игровой консоли Xbox 360. А некоторые пытаются добиться подобных результатов при помощи обычной веб-камеры, которая наверняка есть в каждом современном доме.
Именно эту цель перед собой поставили разработчики программного обеспечения из Румынии. В данный момент они уже тестируют рабочий билд приложения FaceRig, способного перенести эмоции и мимику человека на виртуального персонажа при помощи обычной веб-камеры. Пока приложение работает лишь с персонажами, которые были созданы самими разработчиками, но в самом ближайшем будущем они обещали ввести поддержку импортирования 3D-моделей из различных редакторов.

Читайте также:  Что сделать телефон не видит сим карту

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

В данный момент разработчики FaceRig собирают 120 000 долларов на заключительный этап разработки своего приложения. Вы тоже можете поучаствовать и поддержать их своим рублём. Всего за 5 долларов США вы получите ранний доступ к бета-версии приложения, которое станет полноценным после финального релиза.

Стриминг и распознавание лиц через веб-камеру

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

Для начала нам нужно научиться получать видео с веб-камеры. Есть множество вариантов, как это можно сделать с Go. К сожалению, большинство из них тянут за собой CGO биндинги к OpenCV, при этом поддержка функциональности очень ограничена, а сами проекты довольно монструозны. А так как всегда нужно подбирать инструмент под задачу, то для захвата видео мы будем использовать python.

В python мы можем использовать с OpenCV для стриминга “Motion JPEG” через стандартный вывод.

“Motion JPEG(M-JPEG)” звучит как что-то сложное и фантастическое. Хотя на сам деле это всего лишь конкатенация фреймов в один JPEG с определенных использованием разделителей. Больше всего это похоже на CSV для видео. Как правило, за простоту приходится платить размерами файлов, потому что не используется видео сжатие.

M-PEG используется во многих устройствах: IP камерах, цифровых камерах. Возможно у вас уже есть устройство, которое поддерживает этот протокол. В таком случае вы можете использовать аналогичный подход для стриминга.

Ниже показан кусок кода capture.py , который кадр за кадром захватывает видео с камеры и стримит его stdout

Читайте также:  Как накладывать текст на картинку

Небольшое отступление от перевода

На сомом деле нет ничего сложно, чтобы в этом месте использовать Go. К тому же, питоновская либа для работы c opencv тоже реализована через биндинги к сишному коду.

В качестве замены питоновского скрипта выше, можно использовать либу github.com/blackjack/webcam. Достаточно всего лишь чуть-чуть модернизировать пример из папки examples, чтобы все заработало:

Конечно, в этом коде не хватает проверок. Например, когда мы вызываем cam.GetSupportedFormats и проходим по всему списку, там вполне может не быть Motion-JPEG . Точно также, размер 320 на 240 может не поддерживаться и неплохо было бы использовать функцию cam.GetSupportedFrameSizes . Такой код нельзя использовать в продакшене, тем не менее, он работает и подходит нам в качестве примера.

Стриминг с помощью Go http сервер

Теперь у нас есть стрим, который мы можем прочитать и обработать в Go. Давайте создадим простой http сервер, который будет отправлять стрим с вебкамеры в браузер.

Если перейти по ссылке http://localhost:8081/cam , то запуститься новый процесс и начнется воспроизведение видео прямо в браузере.

Обратите внимание на использование context.Context . С его помощью мы можем остановить процесс, когда http запрос будет прерван.

И еще одно замечание от переводчика. Так как мы теперь умеем получать стрим от камеры в нужном нам формате с помощью Go, то нам не нужно делать отдельный бинарник и вот это все. Можно добавить весь этот функционал непосредственно в программу, реализующую http хендлеры.

Обработка стрима и распознавание лиц

Теперь когда у нас есть возможность управлять стримом в Go, мы можем приступить к самой интересной части.

Основная идея в том, чтобы читать из стандартного вывода программы capture.py и использовать пайп для чтения стрима фрейм за фреймом.

Теперь мы модем использовать multipart.Reader для чтения одного кадра в память. Мы можем считывать и записывать кадры когда и сколько захотим.

Дальше мы можем использовать Facebox SDK для работы с запущенным инстансом Facebox и, собственно, распознавать лица.

Как только мы провели все манипуляции с кадром, его необходимо отдать пользователю. Нужно принять во внимание, что все выполняется в рамках одной рутины, а это неплохо так будет тормозить воспроизведение видео. К тому же, распознавание лиц очень затратная операция по ЦПУ. Если вы не хотите чтобы видео тормозило, то распознавание нужно выполнять в отдельной рутине.

Читайте также:  Самый лучший телефон для фотографий

Полный код http обработчика faceboxhandler :

Чтобы запустить все что мы написали, нужно открыть в браузере http://localhost:8081/facebox . На этой странице будет крутиться видео(с большим лагом, правда), а в консоли будут выводиться сообщения. Конечно, все это будет работать только если вы обучили свой Facebox.

Заключение

Теперь вы знаете как с помощью Go и Python можно быстро сделать видео сервис. А при небольшом усилии еще и добавить туда распознавание лиц.

Хорватская компания MashMe запустила сбор средств на Kickstarter на одноимённую технологию, с помощью которой пользователи могут общаться и записывать видео, заменив себя на цифровых аватаров, в точности повторяющих движения и мимику. Об этом сообщает Mashable.

MashMe не требует специального оборудования: для её функционирования достаточно обычной веб-камеры. Система автоматически распознаёт движения тела и мимику пользователя, а также по голосу определяет его эмоции.

Все эти показатели в реальном времени отражаются на трёхмерном аватаре, который, как предполагает Mashable, можно будет использовать в видеочатах вроде Skype или Google Hangouts, а также при записи роликов. По мнению создателей, продукт придётся по душе видеоблогерам, которые смогут не только изменить свою внешность до неузнаваемости, но и рассказывать целые истории в виртуальных мирах.

Технология находится в разработке уже два с половиной года, однако на её завершение MashMe понадобились дополнительные средства, поэтому компания разместила свой проект Kickstarter. На момент написания заметки он привлёк чуть больше 7 тысяч долларов из требуемых 50 тысяч, однако до завершения кампании остаётся ещё 33 дня.

Журналист Mashable опробовал MashMe в действии и отметил, что система работает хорошо, но всё же время от времени глючит и ошибается. По словам разработчиков, дополнительные средства будут потрачены на полировку технологии, а также консультации с профессионалами в области анимации и создания видео.

Компания намерена выпустить две версии MashMe: бесплатную — для обычных пользователей, и платную — с «профессиональным» набором инструментов. В обоих случаях разработчики надеются достигнуть максимальной простоты в применении.

У технологии MashMe уже есть конкуренты на рынке — например, программа Faceshift. Она работает только с лицом пользователя, тогда как решение хорватского стартапа захватывает также и движения частей тела.

Рекомендуем к прочтению

Добавить комментарий

Ваш адрес email не будет опубликован.