Обмен видео данными между C ++ и Python - PullRequest
1 голос
/ 29 июля 2011

У меня есть USB-камера (uEye), которая имеет интерфейс C ++, позволяющий настроить некоторые функции камеры. Программа C ++ может считывать данные изображения с камеры и сохранять их где-то в предварительно выделенной памяти. Все это работает под Windows.

Python с numpy дает мне простую среду для работы с изображениями и тратить некоторое время на работу над моими алгоритмами обработки.

Я хотел бы сделать следующее:

  1. Используйте программу c ++ для настройки камеры и получения изображений (с частотой видео),
  2. Передать данные в Python
  3. Обработка данных в Python

У меня сложилось впечатление, что я не хочу встраивать C ++ в Python или Python в C ++, поскольку я предпочитаю иметь две автономные системы (поэтому я могу использовать камеру без содержимого Python или использовать элементы Python без камеры).

Что я могу найти до сих пор, так это методы совместного использования некоторых данных с использованием каналов, сокетов или отображенной памяти, хотя, как представляется, они ограничены небольшими объемами данных или строк. Однако я не могу найти указание на то, достаточно ли это быстро, и что я должен попытаться реализовать. Должен ли я сделать это?

Если это плохая идея, что может быть лучшей альтернативой? Вставить код Python в C ++ или наоборот? Или же вместе с Python, потому что экономия времени на разработку не компенсирует дополнительных усилий, направленных на то, чтобы заставить работать межпроцессное взаимодействие?

Ответы [ 2 ]

3 голосов
/ 29 июля 2011

В блоге PyPy было недавнее сообщение об обработке видео в реальном времени.В этом примере они используют mplayer для захвата и отображения видео, что может быть предпочтительнее, чем пытаться взаимодействовать с вашей программой на C ++ (при условии, что она работает с вашей веб-камерой).Если нет, то в этом случае простое решение - просто подключить stdout / stdin двух ваших приложений.Также, вероятно, неплохо бы взглянуть на PyPy для обработки видео.

2 голосов
/ 29 июля 2011

Поскольку вы говорите, что устройство имеет «интерфейс C ++», я предполагаю, что оно предоставляет файл заголовка + DLL, к которому вы можете привязать устройство и управлять им через API. В таком случае самым быстрым подходом было бы обернуть этот API в Python (используя Swig или другие инструменты C ++ - to-Python API). Это обеспечит очень низкие накладные расходы всего за пару вызовов процедур, передавая данные непосредственно в виде указателей в память.

Если вы не хотите «жениться» на Python, напишите себе управляющее приложение и на C ++, но я думаю, что самый быстрый и удобный способ подключения API к Python - это выше.

...