webentwicklung-frage-antwort-db.com.de

Wie streame ich ein openCV-Video auf eine HTML-Webseite?

Ich baue einen Roboter mit einer Webcam, um eine einfache Objekterkennung zu ermöglichen. Im Moment möchte ich das Video einfach auf eine auf dem Roboter gehostete Webseite streamen und von einem anderen Gerät aus betrachten können. Ich habe ein einfaches Testskript in Python geschrieben (ich werde schließlich zu C++ wechseln, meiner bevorzugten Sprache), das einen Stream von meiner Webcam abrufen kann und dann alles, was ich brauche, damit mache. Das Problem ist also, dass ich das Video nicht in eine Datei schreiben kann, während die App ausgeführt wird. Es schreibt die Datei erst, nachdem ich das Skript beendet habe. Ich habe bereits einen Webserver, und ich kann den grundlegenden Code in HTML schreiben, um ein Video aus einer Datei zu hosten, und all das funktioniert.

Zusammenfassend: Ist openCV2 in Python und/oder C++ in der Lage, Videos nur mit openCV live zu streamen? Wenn nicht, welche Bibliothek würden Sie empfehlen, ein CV-Capture-Objekt oder ein Mat-Objekt zu nehmen und in ein Stream, den ich dann auf einer Webseite platzieren kann? Ist das Tag in HTML eine gute Idee, um Videos zu streamen?

Vielen Dank für den Rat, ich kann alle Hinweise benutzen, die ich bekommen kann!

Wenn Sie weitere Informationen benötigen, die über den von mir angegebenen Code hinausgegangen sind, fragen Sie bitte nach und ich werde das tun!

16
PyroAVR

Das Problem des Streamings von Frames aus OpenCV und Python wurde im folgenden Thread behoben: Pipe-Raw-OpenCV-Bilder an FFmpeg

Das hat für mich nicht funktioniert, aber sie behaupten, dass es für sie war. 

Der Grund dafür, dass es in meinem Fall nicht funktioniert, scheint zu sein, dass für einige Ausgabe-Frames zusätzliche Bytes hinzugefügt wurden oder verloren gingen, irgendwo zwischen der Ausgabe von stdout in capture.py und der Eingabe von FFMPEG. Daher entspricht die Anzahl der Bytes nicht der Anzahl der Frames. Ich bin nicht sicher, warum das so ist. Ich habe Windows 7 verwendet.

Ich werde gespannt sein, was Ihre Erfahrung ist, wenn Sie dies versuchen. Ich habe auch eine modifizierte Version von capture.py mit cv2 ausprobiert und bin aus den gleichen Gründen gescheitert. 

3

Versuchen Sie, this und this zu lesen.

Grundsätzlich müssen Sie OpenCV verwenden, um die Frames zu erfassen und in bestimmte Formate zu packen, die dem Streaming-Protokoll entsprechen. Anschließend können Sie sie von Ihrem Server mit HTML5 auf die Seite stellen. Möglicherweise müssen Sie VLC oder FFMepg verwenden, um Ihren cv :: Mat zu packen. Hoffe das wird hilfreich sein.

1
tomriddle_1234

Unter Laborbedingungen senden Sie vollständige Bilder

Sie scheinen sich unter Laborbedingungen zu befinden, daher gibt es eine vereinfachte, aber dennoch verwendbare Lösung. Streamen Sie einfach PNGs in Base64 mit Websockets. Auf der Clientseite (Webbrowser) erhalten Sie nur die base64-Bilder und laden diese direkt in die src eines <img>. Es funktioniert sehr gut für Laborszenarien, wenn auch langsam.

0
Ariel M.