Построение сквозного видеоконвейера машинного обучения

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

Архитектура:

Давайте перейдем к техническим вопросам… Я решил создать полноценное демо-приложение от производителя к потребителю для потоковой передачи видео. Я взял образец видео из источника RTSP, используя поток URL через Producer внутри сети Docker. Продюсер написан на Go для отправки кадров в тему Kafka. Помните, что необходимо некоторое изменение размера изображения, чтобы конвейер не перегружался, что, как следствие, позволяет библиотеке Sarama не вызывать исключение.

В этом приложении у нас есть два потребителя. Один потребитель работает внутри контейнерной сети и общается с каналом Kafka через порт kaka:9093. Другой предназначен для запуска с локального хоста, получающего доступ к каналу Kafka через localhost:9092. В обоих случаях я создал образ докера и локальную среду, содержащую одни и те же пакеты, в основном включая популярную платформу Computer Vision (OpenCV) и популярные платформы ML/DL (TF, Keras, Theano и Caffe). Очевидно, что вам не нужно использовать все фреймворки DL, но это хороший иллюстративный образ, который можно держать в своем наборе инструментов.

Воспроизведение демо:

Начнем с клонирования репозитория git:

$ git clone https://github.com/pborgesEdgeX/full_app.git
$ cd full_app/
$ docker-compose up

Когда вы выполняете команду docker-compose, контейнеры-производители, каналы Kafka и потребители создаются и начинают выполняться. Вы должны увидеть вывод, подобный этому:

На этом этапе вы можете запустить потребителя с вашего локального хоста. В этом случае вы должны использовать наш bash-скрипт:

$ chmod u+x consumer-localhost.sh
$ ./consumer-localhost.sh

Доступ к конечным точкам:

Как только система запущена и работает, вы можете увидеть потребителей, работающих на веб-сервере на базе Flask.

Доступ к потребителю внутри сети Docker можно получить: http://0.0.0.0:5001

Доступ к потребителю, работающему с локального хоста, возможен: http://0.0.0.0:5000

Добавление ваших крутых алгоритмов машинного обучения:

Если вы хотите изменить потребителя, перейдите в папку потребителя. Там вы можете найти файл main.py. Добавьте свои собственные алгоритмы ML/DL, где у вас есть прямой доступ к пикселям изображения в функции get_stream():

feed = msg.value.get("pix")

Или, если вы хотите получить в байтах:

b = bytes(feed, 'utf-8')

Список включенных модулей:

Резюме:

Этот проект служит облегченной демонстрацией конвейера потоковой передачи видео. Вы не должны использовать этот проект в производственной среде, но это хороший способ начать работу с Kafka, Flask и библиотеками ML, используя Python. Удачного кодирования!