2013-11-25 28 views
13

Sto creando un robot con una webcam per fornire un semplice rilevamento di oggetti. Per ora, vorrei semplicemente trasmettere il video a una pagina Web ospitata sul robot e poterlo visualizzare da un altro dispositivo. Ho scritto un semplice script di test in Python (passerò infine al C++, la mia lingua preferita) che può ottenere un flusso dalla mia webcam, e quindi fare tutto ciò che mi serve con esso da lì. Il problema, quindi, è che non riesco a scrivere il video su un file mentre l'app è in esecuzione, scrive solo il file dopo che ho lasciato lo script. Ho già un server web in esecuzione, e posso scrivere il codice di base in HTML per ospitare un video da un file, e tutto ciò funziona.Come faccio a riprodurre in streaming un video openCV su una pagina Web HTML?

Per riassumere: OpenCV2 in Python e/o C++ è in grado di riprodurre video utilizzando solo openCV? In caso contrario, quale libreria consiglieresti di provare a prendere un oggetto di cattura CV o un oggetto Mat e scriverlo su un flusso che posso quindi inserire in una pagina web? In HTML, il tag è una buona idea per lo streaming di video?

Grazie mille per il consiglio, posso usare tutti i suggerimenti * Posso ottenere!

Se avete bisogno di qualcosa di chiarito/codice pubblicato/spiegazione oltre quello che ho dato, si prega di chiedere e lo farò!

+0

Hai esaminato uno qualsiasi degli strumenti di immagine/video JavaScript disponibili su github? CamanJS, Clmtrackr, JS Feat .. possibile portare le matrici da opencv a JS? Qual è il processore del robot - Ripple pi, Beaglebone, Intel Edison o qualcosa di più creativo? Forse una scheda madre con scheda grafica completa (per framerate di elaborazione davvero veloci ...)? – zipzit

+0

Ciao signore! Come hai risolto questo problema, ho anche la stessa domanda. Grazie! –

+0

@BahramdunAdil, le tecnologie sono cambiate ... Credo che ora siamo su OpenCV3 e lo streaming HTTP e i relativi protocolli hanno fatto molta strada.Non ho una soluzione che funzionerà necessariamente per te, ma ti suggerirei di provare un framework esistente per lo streaming di video, come uno streamer rtmp. In bocca al lupo! – PyroAVR

risposta

1

Provare a leggere this e this.

Quindi, in pratica, è necessario utilizzare OpenCV per acquisire i frame e comprimerli in formati specifici che si adattano al protocollo di streaming, quindi dal server utilizzare HTML5 per inserirlo nella pagina. Potrebbe essere necessario utilizzare VLC o FFMepg per imballare il tuo cv :: Mat. Spero che questo sarà utile.

+0

Grazie, ci proverò. Sto lavorando su una piattaforma embedded (beaglebone) quindi vedremo come va. Vi terrò aggiornati! – PyroAVR

+2

Sei riuscito a risolvere questo problema? –

2

Il problema di frame di streaming di OpenCV e Python è stata affrontata in questo thread: Pipe raw OpenCV images to FFmpeg

Questo non ha funzionato per me, ma dicono che ha fatto per loro.

Il motivo per cui non funziona nel mio caso sembra essere che per alcuni frame di output sono stati aggiunti o persi byte aggiuntivi, da qualche parte tra l'output di stdout in capture.py e l'input di FFMPEG. Pertanto, il numero di byte non corrisponde al numero di frame. Non sono sicuro del perché questo sia il caso. Ho usato Windows 7.

Sarò curioso di sapere qual è la tua esperienza se provi questo. Ho anche provato una versione modificata di capture.py usando cv2, e ho fallito per gli stessi motivi.

0

In condizioni di laboratorio si inviano immagini a

Lei sembra essere in condizioni di laboratorio, per cui v'è una soluzione semplicistica, ma utilizzabile, solo lo streaming di PNG in Base64 utilizzando WebSockets. Sul lato client (browser Web) si ricevono solo le immagini di base64 e le si carica direttamente nello src di un <img>. Funziona molto bene per gli scenari di laboratorio, anche se lento.