Проблемы с обработкой видео в реальном времени - PullRequest
2 голосов
/ 31 января 2020

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

Я пытаюсь обработать захват видео в реальном времени с камеры клиента. Захваченный видеопоток преобразуется в кадры и отправляется на сервер для обработки. После обработки сервер отправляет его обратно на экран клиента.

Мой бэкэнд-код записан в Python, и я использую SocketIo для отправки фреймов из внешнего интерфейса в бэкэнд. Вы можете взглянуть на этот дизайн, чтобы получить лучшее представление о том, что происходит - image

  1. Мой сервер (app.py) будет работать в бэкэнде, и клиент будет получать доступ index. html
  2. Соединение SocketIo будет установлено sh, и видеопоток, снятый с помощью веб-камеры, будет отправляться на серверные кадры по кадрам.
  3. Затем эти кадры будут обрабатываться на сервере и отправьте обратно клиенту.
  4. Обработанные кадры, поступающие с сервера, могут быть показаны в теге img.

Итак, моя проблема с этой архитектурой - задержка. Есть заметная задержка даже после ограничения fps. От клиента к серверу, затем обработка и обратно клиенту, каждый кадр занимает в среднем 150 мс и не дает ответ в реальном времени. Я пробовал мой код обработки изображений отдельно без программирования сокетов на локальном компьютере, и он ближе к реальному времени (на один кадр уходит 80 мс).

Но я не понимаю здесь, как я могу минимизировать отставание с этим дизайном или импровизировать его? Есть ли лучший способ выполнить эту задачу, чтобы получить больше результатов в реальном времени?

Заранее спасибо!

1 Ответ

1 голос
/ 01 февраля 2020

Python - отличный язык для быстрого прототипирования приложений Computer Vision. Однако это не рекомендуется для производственного кода из-за его производительности. Преобразуйте код в C ++ , и вы увидите значительное улучшение производительности во время выполнения.

SocketIo это не лучший вариант, поскольку он использует TCP-соединение. Вы заметите лучшую производительность в библиотеке, которая передает данные через UDP. Вы можете потерять несколько пикселей здесь и там, но обычно это хороший компромисс для потокового видео.

Вот еще несколько соображений о SocketIo и TCP против UDP. .

...