Essayer de capturer la sortie d'affichage pour l'analyse en temps réel avec OpenCV; Je besoin d'aide avec l'interface avec le système d'exploitation pour l'entrée

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

Question

Je veux appliquer des opérations de la bibliothèque de vision informatique OpenCV, en temps réel, à la vidéo capturée à partir de l'écran de mon ordinateur. L'idée dans ce cas particulier est de détecter des caractéristiques intéressantes pendant le jeu dans un jeu populaire et fournir à l'utilisateur une expérience améliorée; mais je ne pouvais penser à plusieurs autres scénarios où l'on voudrait avoir accès direct à ces données ainsi. En tout cas, pour la phase de développement, il est peut-être acceptable en utilisant la vidéo en conserve, mais pour les performances et la réactivité de l'application finale sont évidemment critiques.

Je suis en train de le faire sur Ubuntu 10.10 dès maintenant, et préférerait utiliser un système de type UNIX, mais toutes les options sont d'intérêt. Mes compétences en C sont très limitées, donc chaque fois que parler à travers OpenCV Python est possible, j'essaie d'utiliser à la place. S'il vous plaît noter que je suis en train de capturer pas d'un dispositif de caméra, mais à partir d'un flux en direct de la sortie d'affichage; et je suis à une perte quant à la façon de prendre l'entrée. Pour autant que je peux dire, CaptureFromCAM ne fonctionne que pour les appareils de la caméra, et il me semble que l'exigence de la performance en temps réel dans le résultat final rend le stockage dans le fichier et la lecture à travers CaptureFromFile une mauvaise option.

La route la plus prometteuse que j'ai trouvé à ce jour semble être en utilisant ffmpeg avec l'option x11grab à la capture d'un écran X11; (Par exemple la commande ffmpeg -f x11grab -sameq -r 25 -s wxga -i: 0,0 out.mpg capture d'écran 1366x768 0 à 'out.mpg'). J'imagine qu'il devrait être possible de traiter le flux de sortie de ffmpeg en tant que fichier à lire par OpenCV (probablement en utilisant la fonction CaptureFromFile) peut-être à l'aide de tuyaux; mais tout cela est à un niveau beaucoup plus élevé que je ne l'ai jamais eu affaire à l'avant et je ne pouvais vraiment utiliser certaines directions. Pensez-vous que cette approche est réalisable? Et plus important encore, vous pouvez penser à une meilleure? Comment voulez-vous faire?

Était-ce utile?

La solution

J'écarterait x11grab ou tout autre outil cmd ligne pour prendre des captures d'écran si vous êtes à la recherche de la performance en temps réel.

Écrivez votre propre écran Grabber de sorte que vous pouvez l'envoyer directement à OpenCV. Vous pouvez jeter un oeil à XWD code source si vous voulez savoir comment faire sous X11.

Autres conseils

Je pense que le principal défi est l'exigence en temps réel. Je pense que vous devez créer un morceau de logiciel pour OpenCV, inspiré par le code pour la vidéo en saisissant ffmpeg. mais bien sûr serait implique le niveau C de codage.

Ma suggestion est d'essayer d'obtenir votre algorithme de bonne vision d'abord, en utilisant la vidéo capturée ffmpeg.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top