2016-06-05 11 views
0

Ich möchte Kamerastrom in opencv verarbeiten (das funktioniert gut), aber dann die resultierenden verarbeiteten Frames über das Netzwerk ausgeben, so dass ich sie sehen kann, wie es ein eingebettetes System ohne Monitor ist. Ich habe Tage damit verbracht, nachzusehen, kann aber nicht herausfinden, wie ich die Frames in Python auf gstreamer verschieben kann. Es sieht so aus, als ob ich eine appsrc-> udp-Pipeline in gstreamer erstellen sollte (das ist kein Problem), aber ich kann nirgends finden, wie man die Frames in opencv mit python nach appsrc verschiebt. Ich habe einige Beispiele in C++ gesehen, aber ich habe keine Ahnung, wie man sie in Python übersetzt. Es scheint, kann man entweder Puffer wie folgt kopieren: Push images into Gstreamer pipeline Oder bedeutet dies einen einfacheren Weg durch eine appsrc direkt in opencv videowriter Eröffnung: How to write opencv mat to gstreamer pipeline?Wie gibt man in Python opencv an gstreamer aus?

Hat jemand ein sehr einfaches Beispiel haben aus wie opencv zur Ausgabe an Gstreamer in Python?

Antwort

0

Ich bin kein Experte Python .. aber was ist this ..

Angenommen, Sie haben diesen Code für den Anschluss des appsrc bedarfsDatenSignal (wie here):

source = gst.element_factory_make("appsrc", "source") 
.. you need to set caps, then connect: 
source.connect('need-data', self.needdata) 

Dann in der needdata Funktion Sie müssen den Datenzeiger Ihres opencv-Rahmens abrufen und GstBuffer daraus erstellen und ausgeben.

Angenommen, Sie haben zwei Variablen. self.data ist die tatsächliche opencv-Daten und self.size ist die Größe der Daten:

def needdata(self, src, length): 
    buf = Gst.Buffer.new_allocate(self.size) 
    buf.fill(0, self.data) 
    src.emit('push-buffer', buf) 

Hm nicht sicher, was in dieser Länge variabel .. die pygst auf GStreamer 1.0 scheint ganz ohne Papiere zu sein .. oder ich kann die Dokumentation nicht finden ..

+0

Danke für die Antwort und Zeiger. Ich habe das ausprobiert, kann aber die korrekten Caps, Bildformate oder wie man self.data oder self.size einstellt, nicht ausrechnen. Die opencv-Dokumentation ist so schlecht und es gibt keine funktionierenden Beispiele in Python, die ich denke, der einzige Weg, dies auszuarbeiten, ist mit C++ - Code zu beginnen und dann zu versuchen, das in Python zu übersetzen. Es gibt Code für C++, also fange ich damit an. Ich werde hier updaten, wenn ich irgendwo hinkomme. Ich kann nicht glauben, dass es null Beispielcode gibt, um opencv mit gstreamer in Python zu verbinden! – Dom

+0

Sie setzen die self.data mit der Zuweisung der zugewiesenen Daten-Array von opencv (oder verwenden Sie einige Kopie memcpy Python Style-Funktion - ich bin in Python noob) .. ja die Python gstreamer docs fehlen ganz .. aber es ist eine veraltete 0.10 gstreamer python Beispiele [irgendwo] (https://cgit.freedesktop.org/gstreamer/gst-python/tree/old_examples?h=1.8) .. gute Idee mit C++ - Sie können auch einfach C verwenden, da Gstreamer in C ist. .gl – nayana