Я хотел бы спроектировать параллельный конвейер обработки видеоданных в Python со следующими идеями / требованиями:
У меня есть два внешних видеопотока (полученных через карты сбора данных) I хотел бы обрабатывать независимо и отображать потоки результатов в визуализации в конце конвейера.
Могут быть задействованы некоторые алгоритмы отслеживания, которые мне, возможно, придется запустить на GPU, чтобы максимизировать производительность.
- Частота кадров видео составляет ~ 20 Гц, и я хотел бы, чтобы результат отображался с минимально возможной задержкой.
Поскольку многопоточность ограничена Python с помощью GIL для ресурсоемких вычислений ЦП, я предполагал, что многопроцессорная обработка - это хорошее решение, но так ли это на самом деле?
Таким образом, я начал реализацию, основанную на multiprocessing
, где каждый процесс является «компонентом», который я отслеживаю / отправляю через multiprocessing.queue
(каналы ОС под капотом), и который выполняет одно действие (производя изображения, фильтрация, рендеринг и т. д. c.) и передает полученное изображение через multiprocessing.queue
в следующий процесс в конвейере.
Является ли этот тип модели хорошей идеей для этих требований, или есть более интуитивный / релевантный дизайн?
Звучит как "актерская модель", о которой я слышал, совместима ли она с GPU на основе вычисление? Должен ли я продолжать поиск в этом направлении?