Instance
Проверочный экземпляр Сервиса инференса MarQus #
Сервис инференса нейросетевых моделей MarQus для автоматизации процессов распознавания и сортировки различных типов ТБО. #
2023 #

\newpage

Аннотация #

В настоящем документе представлено руководство по установке экземпляра cервиса инференса нейросетевых моделей MarQus и описание методологии проверки.

Развёртывание локально. #

Сервис инференса нейросетевых моделей для автоматизации процессов распознавания и сортировки различных типов ТБО (marqus-video-recotracker) представляет собой набор микросервисов, реализованных и запускаемых в платформе Docker.

Системные требования #

Требования к предустановленному ПО:

  • Операционная система: Любой дистрибутив Linux с ядром 5.4 или выше
  • CPU: Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz and newer
  • RAM: минимум 8 GB
  • HDD/SSD: минимум 64 GB
  • GPU: Nvidia 1080Ti или новей
  • GPU: память не ниже 11264 МБ
  • Compiler: GCC 7.3.1 или новей
  • CUDA: 11.0 или новей
  • Docker: 20.10 или новей

\newpage

Установка и запуск #

Для установки и запуска сервиса необходимо:

  1. Cкачать образ, используя команду
docker pull harbor.zebrains.team/mlearning/marqus-video-recotracker:latest
  1. Запустить новый контейнер из образа
docker run --name marqus-video-recotracker -p 8001:8001/tcp -p 8002:8002/tcp harbor.zebrains.team/mlearning/marqus-video-recotracker:latest
  1. Проверить в браузере

Открыть ссылку http://127.0.0.1:8001

Должны увидеть API сервиса marqus-video-recotracker:

  1. Проверить эндпоинт /recotracker/info

В Response body должны увидеть информацию о доступности cuda.

  "torch_info": {
    "cuda.is_available": true
  },

Если cuda недоступна, то сервис всё равно будет работать, но производительность сервиса упадёт на порядок.

Готово, решение запущено.

Проверка работоспособности. #

Для проверки работоспособности сервиса существует несколько вариантов. Рассмотрим два из них - полную проверку и эмуляцию.

Полная проверка. #

При запущенном сервисе необходимо направить с видеокамеры ZeroMQ поток по TCP адресу 127.0.0.1 на порт 5500.

Сервис будет принимать кадры из видеопотока, в реальном времени выполнять предикт (детекцию, сегментацию, классификацию и трекинг) и отдавать результат в ZeroMQ поток по TCP адресу 127.0.0.1 на порт 5501.

Минимальный код на Python для Raspberry Pi этого выглядит так:

import time

from dynaconf import settings
from imutils.video import VideoStream

from vss import VideoStreamSender

# Stream from Raspberry Pi camera
if __name__ == "__main__":
    picam = VideoStream(usePiCamera=True).start()
    time.sleep(2)
    sender = imagezmq.ImageSender(connect_to="tcp://127.0.0.1:5500", REQ_REP=false)
    while True:
        img = picam.read()
        sender.send_image(socket.gethostname(), img)
        time.sleep(0.1)

\newpage

Камера должна снимать ленту конвейера строго сверху и работать в NIR диапазоне.

Примеры:

{width=60%}

{width=70%}

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

Проверка с помощью симулятора. #

Для проверки и тестирования сервиса можно использовать симулятор. Симулятор генерирует видеопоток и направляет ZeroMQ поток по TCP адресу 127.0.0.1 на порт 5500.

При этом не ставится цель тестировать качество предикта, но достигается цель проверки и тестирования всех основных процессов, происходящих при детекции, сегментации, классификации и трекинге.

Для проверки и тестирования таким способом необходимо:

  1. Cкачать docker-compose.yaml по ссылке https://marqus.zebrains.team/code/docker-compose.yaml

  2. Выполнить

docker compose up
  1. Открыть в браузере

Открыть ссылку http://127.0.0.1:8000

Должны увидеть API сервиса marqus-video-streamer:

Открыть ссылку http://127.0.0.1:8001

Должны увидеть API сервиса marqus-video-recotracker:

\newpage

Открыть ссылку http://127.0.0.1:8002

Должны увидеть результат:

В результате виден выходной видеопоток в виде фреймов с визуализацией работы сервиса, а в ZeroMQ поток по TCP адресу 127.0.0.1 на порт 5501 будет передаваться цифровой результат распознавания.