Авторизация
Сброс пароля
Внимание, камера, пульс
Заказчик: WCH
Мир меняется, развивается, и если раньше турниры по шахматам все слушали по радио, то теперь за процессом можно наблюдать, не выходя из дома. Наблюдать не только за шахматной доской, но и за шахматистами, которые всегда выглядят сосредоточенно и расчетливо и даже не понятно: волнуются ли они вообще?
1. Вводная задача от заказчика, проблематика, цели
Суть проекта заключается в том, чтобы за счёт открытой библиотеки и видеокамеры распознать лицо, выявить пульс игрока в шахматы и передать его значение через API. Реализацию проекта разделили на два этапа.
2. Описание реализации кейса и творческого пути по поиску оптимального решения
Этап 1. Исследование
Перед началом разработки, нужно было проверить концепцию: работает ли определение пульса через камеру в принципе.
Чтобы обнаружить сердечно-сосудистую пульсовую волну, проходящую через тело, использовался метод фотоплетизмографии. Метод основан на принципе, где кровь поглощает свет больше, чем окружающие ткани, поэтому изменения объема крови соответственно влияет на пропускание или отражение света. Применение ФПГ включает мониторинг насыщения кислородом (пульсовая оксиметрия), частоты сердечных сокращений (ЧСС), дыхания (ЧД) и тому подобного.
При проведении исследования мы столкнулись с несколькими трудностями.
Первое, необходимо было специальное положение камеры, чтобы распознать лицо, точнее лоб. С течением времени данные собираются из этого места для оценки частоты сердечных сокращений пользователя. Это делается путем измерения средней оптической интенсивности в области лба, только в зеленом канале субизображения.
Второе, с чем мы столкнулись - при определении пульса необходимо было организовать качественное освещение. Так как при изменении света на анализируемом участке лица во время изменения наклона головы, системе приходилось начинать анализировать данный участок заново, в результате чего появлялась пауза до выдачи нового результата.
В конце исследования была выявлена идеальная схема: при хорошем освещении и минимальном шуме из-за движения стабильное сердцебиение должно быть выделено примерно за 15 секунд анализа видео потока. Подтвердив работу концепции, клиент попросил реализовать ее на стеке Python.
3. Результаты сотрудничества
Этап 2. Разработка
Чтобы мы смогли вывести пульс игрока нам необходимо получить и проанализировать физиологические сигналы человека такие как оксигемоглобин и волны Майера. Физиологические данные могут быть оценены, благодаря характеристикам оптического поглощения.
Оксигемоглобин - гемоглобин, соединенный с кислородом. Он переносит кислород от органов дыхания к тканям. Кривая диссоциации оксигемоглобина смещается вправо при увеличении температуры тела и повышении содержания СО2 в крови. Т.е если человек начинает дышать чаще или при волнении у него повышается температура тела, то оксигемоглобин становится выше нормы и наоборот.
Волны Майера - быстрые колебания артериального давления и сердечного ритма. У человека частота этих колебаний составляет около 0,1 Гц, то есть приблизительно шесть раз в минуту. Экспериментальные исследования показывают, что амплитуда волн Майера возрастает при активации симпатической нервной системы.
После оценки частоты сердечных сокращений пользователя, также вычисляется изменение фазы в реальном времени, связанное с этой частотой. Это позволяет усилить сердцебиение при рендеринге кадра постобработки, в результате чего выделенное место на лбу пульсирует синхронно с собственным сердцебиением пользователя.
Теперь, когда мы знаем какие данные нам нужны, с ними нужно что-то делать. Для этого был реализован API сервер, который принимал поток видео по специальной ссылке и в специальном формате. Далее происходит обработка и вычисление данных, а распознанный пульс записывается в базу данных на момент времени записи.
Оксигемоглобин
Волны Майера
4. Заключение
Еще раз на пальцах
Порядок действий такой:
определяем лицо пользователя в видео потоке с веб-камеры;
получаем координаты (местоположение) лица в кадре;
считываем и анализируем полученные данные;
выводим на экран пульс игрока.
Разработка и исследование заняли 2.5 месяца и само решение уже использовалось на гран-при Европы при прямой трансляции.