Der Versuch, Capture-Display-Ausgang für Echtzeitanalyse mit OpenCV; Ich muss für die Eingabe mit einer Schnittstelle mit dem Betriebssystem helfen

StackOverflow https://stackoverflow.com/questions/4060265

Frage

Ich mag Operationen von der OpenCV Computer-Vision-Bibliothek anzuwenden, in Echtzeit, um Video von meinem Computer-Display erfaßt. Die Idee, in diesem speziellen Fall interessante Funktionen während des Spiels in einem beliebten Spiel zu erkennen und den Benutzer eine verbesserte Erfahrung bieten; aber ich konnte denken einige andere Szenarien, in denen man sich wünschen würde, als auch Live-Zugriff auf diese Daten zu haben. Jedenfalls für die Entwicklungsphase könnte es akzeptabel sein, in Dosen Video verwenden, sondern auch für die Endanwendung Leistung und Reaktions ist offensichtlich kritisch.

Ich versuche, dies zu tun, auf Ubuntu 10.10 ab sofort, und würde es vorziehen, eine UNIX-ähnliches System zu verwenden, aber alle Optionen von Interesse sind. Meine C Fähigkeiten sehr begrenzt sind, so, wenn zu OpenCV durch Python im Gespräch möglich ist, versuche ich, statt zu verwenden. Bitte beachten Sie, dass ich nicht von einer Kameravorrichtung zu erfassen versuchen, sondern von einem Live-Stream von Display-Ausgabe; und ich bin ratlos, wie die Eingabe zu übernehmen. Soweit ich das beurteilen kann, CaptureFromCAM funktioniert nur für Kamerageräte, und es scheint mir, dass die Voraussetzung für die Echtzeit-Performance in Endergebnisses Speicherung in Datei und Lesen zurück durch CaptureFromFile eine schlechte Option macht.

Der vielversprechendste Weg, den ich gefunden habe, so scheint weit ffmpeg mit der x11grab Option Capture von einer X11-Display zu verwenden; (Zum Beispiel der Befehl ffmpeg -f x11grab -sameq -r 25 es WXGA -i: 0,0 out.mpg Captures 1366x768 Anzeige 0 auf 'out.mpg'). Ich kann mir vorstellen sollte es möglich sein, den Ausgangsstrom von ffmpeg zu behandeln, als eine Datei (unter Verwendung der CaptureFromFile Funktion vermutlich) von OpenCV gelesen werden vielleicht von Rohren verwendet wird; aber das ist alles auf einem viel höheren Niveau, als ich jemals behandelt haben, bevor und ich konnte wirklich einige Richtungen verwenden. Glauben Sie, dieser Ansatz machbar ist? Und was noch wichtiger ist können Sie denken an einem besseren? Wie würden Sie es tun?

War es hilfreich?

Lösung

würde ich x11grab oder andere cmd-line Tools verwerfen Screenshots zu nehmen, wenn Sie für die Echtzeit-Performance suchen.

Schreiben Sie Ihre eigene Screen Grabber , so dass Sie es direkt an OpenCV senden kann. Sie können einen Blick auf xwd Quellcode , wenn Sie wissen möchten, wie das unter X11 zu tun.

Andere Tipps

Ich denke, die größte Herausforderung ist die Echtzeitanforderung. Ich glaube, Sie haben einige Stück Software durch den Code für OpenCV, inspiriert in ffmpeg Video Grabbing erstellen. aber das ist sicher würde beinhaltet Stufe C-Codierung.

ist mein Vorschlag, um zu versuchen, Ihre Vision Algorithmus richtig zu machen erstens durch die ffmpeg-aufgenommenen Videos verwenden.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top