Построение сквозного видеоконвейера машинного обучения
Я всегда думал, что здорово потратить время на кодирование проекта с полным видеопотоком, на самом деле, когда я искал все классные приложения, я редко находил хорошо объясненное руководство, которое дало бы мне представление о том, как построить конвейер, который будет принимать видеопоток и делать его доступным для приложения для последующей обработки, такой как вариант использования для обнаружения лиц или классификации объектов. Я имею в виду… Я понимаю, строить фундамент скучно, но для тех, кто хочет попробовать, это ваш шанс.
Архитектура:
Давайте перейдем к техническим вопросам… Я решил создать полноценное демо-приложение от производителя к потребителю для потоковой передачи видео. Я взял образец видео из источника 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. Удачного кодирования!