Cercando di uscita display di cattura per l'analisi in tempo reale con OpenCV; Ho bisogno di aiuto con l'interfacciamento con il sistema operativo per l'ingresso
Domanda
Voglio applicare operazioni dalla libreria OpenCV visione artificiale, in tempo reale, al video catturato dal mio schermo del computer. L'idea in questo caso particolare è quello di individuare caratteristiche interessanti durante il gioco in un gioco popolare e fornire all'utente una migliore esperienza; ma mi veniva in mente molti altri scenari in cui uno vorrebbe avere un accesso diretto a questi dati pure. In ogni caso, per la fase di sviluppo potrebbe essere accettabile utilizzare il video in scatola, ma per la prestazione dell'applicazione finale e la reattività sono ovviamente critico.
sto cercando di fare questo su Ubuntu 10.10 a partire da ora, e preferirebbe utilizzare un sistema di UNIX-like, ma tutte le opzioni sono di interesse. Le mie competenze C sono molto limitate, così ogni volta che parla di OpenCV attraverso Python è possibile, cerco di utilizzarlo. Si prega di notare che io sto cercando di catturare non da un dispositivo di macchina fotografica, ma da un flusso in diretta di uscita del display; e io sono in perdita su come prendere l'input. Per quanto posso dire, CaptureFromCAM funziona solo per i dispositivi della macchina fotografica, e mi sembra che il requisito per le prestazioni in tempo reale il risultato finale rende l'archiviazione in un file e ritorno lettura attraverso CaptureFromFile una cattiva opzione.
La via più promettente che ho trovato finora sembra essere utilizzando ffmpeg con l'opzione x11grab alla cattura da un display X11; (Ad esempio il comando ffmpeg -f x11grab -sameq -r -s 25 WXGA -i: 0.0 out.mpg cattura 1366x768 di visualizzazione da 0 a 'out.mpg'). Immagino che dovrebbe essere possibile trattare il flusso di output da ffmpeg come file per essere letto da OpenCV (presumibilmente utilizzando la funzione CaptureFromFile) magari utilizzando tubi; ma questo è tutto su un livello molto più alto di quanto io abbia mai affrontato prima e ho potuto davvero usare alcune direzioni. Pensi che questo approccio è fattibile? E ancora più importante si può pensare a uno migliore? Come lo fareste?
Soluzione
vorrei scartare x11grab o altri programmi di cmd-LINE per mettere le immagini, se siete alla ricerca di prestazioni in tempo reale.
Scrivi la tua schermo grabber in modo da poter inviare direttamente a OpenCV. Si potrebbe dare un'occhiata a xwd codice sorgente se volete sapere come fare sotto X11.
Altri suggerimenti
Penso che la sfida principale è il requisito in tempo reale. Credo che bisogna creare qualche pezzo di software per OpenCV, ispirato dal codice per il video grabbing in ffmpeg. ma che di sicuro avrebbe coinvolge livello C codifica.
Il mio suggerimento è quello di cercare di ottenere il vostro algoritmo visione prima a destra, utilizzando il video ffmpeg-catturato.