Обработка видео для распознавания лиц при помощи Go и Python

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

Требования

  • Языка программирования Go
  • Python 2 и OpenCV
  • Facebox machinebox.io

Есть вопросы по Python?

На нашем форуме вы можете задать любой вопрос и получить ответ от всего нашего сообщества!

Telegram Чат & Канал

Вступите в наш дружный чат по Python и начните общение с единомышленниками! Станьте частью большого сообщества!

Паблик VK

Одно из самых больших сообществ по Python в социальной сети ВК. Видео уроки и книги для вас!

Внедряем видеопоток

Один из вопросов, который может возникнуть – можем ли мы поддерживать видео в боксах, например – при распознавании лиц в Facebox.

Поддержка видео присутствует в Machine Box, но проблема в том, что работа видеопотока может быть очень сложной, кроме того, у разных людей разные требования. Так что вместо поддержки видео сейчас, мы решили составить базовые примеры, чтобы показать, как внедрить video pipeline и интегрировать их с боксами, предоставленными Machine Box.

Обработка видео для распознавания лиц при помощи Go и Python

Извлечение кадров видео в Python и OpenCV

Первое, что нам нужно сделать, это открыть видео файл и извлечь кадры для обработки, для этого мы используем Python и OpenCV. Это несложно, и мы можем семплировать эти фрагменты, так как нам, скорее всего, не нужно рассматривать каждый кадр целого видео. Одного кадра в секунду будет достаточно для распознавания лица.

Давайте взглянем на код Python:

Суть данного скрипта в том, чтобы открыть видео, и при помощи настраиваемой частоте кадров получить информацию об одном из них, а также сам кадр. Его мы получаем в кодировке base64 как JSON и выводим в стандартную выдачу.

Создаем видеопоток при помощи и обработчиков Go и HTTP

Так как мы можем извлекать кадры и направлять их в стандартную выдачу, мы можем использовать Go для управления выполнением команд Python, отправки кадров в Facebox для определения, и получать отчет снова в браузере, при помощи API браузера EventSource. Это нужно нам для трансляции процесса обработки видео в реальном времени.

Обработка видео для распознавания лиц при помощи Go и Python

Выполняем Python скрипт при помощи Go

Мы используем Go для управления жизненным циклом скрипта Python, чтобы извлечь видео. Для этого мы можем использовать exec.CommandContext, где мы можем передать параметры, а используя context.Context из http.Request, мы можем отменить выполнение в любое время.

После выполнения мы можем прочесть stdout и декодировать JSON из команды. Давайте взглянем на фрагмент кода Go:

Вызов Facebox для распознавания лиц

После того, как мы добавили кадр в память, мы можем проводить любую работу. В данном случае, мы отправляем кадр в Facebox для выполнения распознавания лиц.

Это делается очень просто при помощи SDK Go, при работе в других языках вы можете просто использовать простой вызов HTTP в боксе.

После того, как вы поместили кадр в память, вы легко можете отправить его в несколько боксов Machine Box и выполнить проверку на адалт контент при помощи nudebox. Так вам не придется проводить проверку видео дважды.

Полезный совет. Сохраните ответ JSON из Facebox, наряду с кадром и данными видео базе данных или поисковике (например, Elastic Search). Так вы можете выполнять запросы и поиск своих видео.

Используем Server Sent Events для отправления отчетов обратно в браузер

Нам нужно работать в реальном режиме в браузере, и Server Sent Events позволяет нам это делать. В Go это происходит прямолинейно, нам нужно только указать правильные заголовки, вот так:

Теперь каждый раз, когда нам нужно отправить что-то в браузер, нам нужно только выслать сообщение с «data:» префикс с двойным окончанием \n\n, чтобы указать, что вы закончили с данным событием, например:

Таким образом, при помощи небольшой функции Go мы можем отправить столько событий, сколько сами захотим:

В браузере мы можем обработать все события даже при помощи нескольких строк Javascript.

Обработка видео для распознавания лиц при помощи Go и Python

Вот полный код http.Handler:

Вывод

Вы можете использовать Go и Python для внедрения действительно мощных инструментов распознавания лиц и многих других возможностей.

Создайте аккаунт в machinebox.io чтобы воспользоваться Facebox.

Полный код

Github: https://github.com/machinebox/videoanalysis