2011-01-14 1 views
7

Sto provando a fare in modo che OpenCV elabori un frame nel mezzo di una pipe gstreamer.Aggiunta dell'elaborazione OpenCV a un flusso video gstreamer

Ho un tubo gstreamer generare il flusso, inviarlo a appsink per il codice OpenCV per ricevere:

v4l2src ! ffmpegcolorspace ! jpegenc ! appsink name=sink 

E un altro tubo di ottenerlo da appsrc (a cui OpenCV invia i dati) e l'output sullo schermo :

appsrc name=src ! jpegdec ! xvimagesink 

apro ogni fotogramma con una richiesta di pull-buffer lavello e processo con OpenCV, quindi utilizzare push-buffer src. Sto facendo tutto questo in Python.

Per qualche ragione, che non sembra funzionare (segmentation fault).

Ma non sto davvero cercando di risolverlo; è comunque terribilmente inefficiente. Mi sto solo chiedendo se esiste un modo migliore per far sì che OpenCV elabori il frame prima che raggiunga un sink di output?

+2

Dal momento che si desidera più di quanto GST-OpenCV in grado di offrire, se non ti dispiace scrivere la logica in C (o C++), forse si dovrebbe provare a scrivere come un plugin per GST? Puoi prendere uno dei sorgenti dei plugin gst-opencv come punto di partenza – sinelaw

+1

Un'altra cosa: il tuo esempio sembra afferrare solo da v4l2 e penso che l'API HighGui di Opencv supporti già (o almeno v4l senza il '2'). questa sarebbe la soluzione più semplice se non hai veramente bisogno di gstreamer. – sinelaw

+0

1. Buon suggerimento, potrei farlo. 2. Hai ragione, potrei usare HighGUI in questo caso, ma v4l2src è stato usato solo come esempio. Nell'applicazione effettiva intendo ottenere il flusso video da una fonte tcp, quindi non posso davvero implementare il tutto in OpenCV. – SMiLE

risposta

2

Hai provato gst-opencv? Fornisce parecchie primitive opencv come plugin gstreamer.

EDIT: Sembra che sia stato incorporato in gst-plugins-bad e che il collegamento sopra non sia aggiornato.

+0

Grazie per la risposta. Ho considerato gst-opencv, ma ho deciso contro di esso perché voglio la libertà di elaborare i frame video nel modo che preferisco (ad esempio, applicare algoritmi di apprendimento automatico specifici del dominio) e le opzioni offerte da gst-opencv sono molto generiche. – SMiLE

1

so che sono passati alcuni anni da quando tua domanda iniziale, ma solo per la cronaca, OpenCV può aprire direttamente condutture GStreamer. Vedere la risposta (auto) in Using custom camera in OpenCV (via GStreamer) per un esempio.

E, a proposito, OpenCv 3.0 (branch master) in realtà integra gstreamer supporto 1.0.