2012-12-18 10 views
6

Sto cercando un modo per integrare una webcam nel mio programma python.Opzioni per leggere la webcam usando Python/Linux

Sono in esecuzione su un modello Raspberry Pi da OC a 900 mHz, quindi la soluzione dovrà essere ARM compatibile e (si spera) leggera.

La maggior parte dei post che ho visto consigliano di utilizzare il modulo OpenCV per leggere la webcam, ma non riesco a ottenere nient'altro che una cornice nera da visualizzare dalla mia webcam. Suppongo che OpenCV non sia compatibile con la mia webcam. Tuttavia, ogni altra applicazione webcam disponibile per Linux può rilevare e visualizzare il feed dalla mia webcam.

Mi chiedo se ci sono altri metodi leggeri o semplici per catturare dalla mia webcam usando python. Forse un modo in cui potrei interfacciarmi direttamente con il dispositivo video0 che appare sotto/dev/per la mia webcam? Sono aperto a qualsiasi suggerimento; perché quello che sto facendo ora, non funziona.

Grazie

(come richiesto):

uscita del v4l2-ctl --all:

Driver Info (not using libv4l2): 
    Driver name : uvcvideo 
    Card type  : UVC Camera (046d:081b) 
    Bus info  : usb-bcm2708_usb-1.2 
    Driver version: 3.2.27 
    Capabilities : 0x04000001 
     Video Capture 
     Streaming 
Format Video Capture: 
    Width/Height : 640/480 
    Pixel Format : 'YUYV' 
    Field   : None 
    Bytes per Line: 1280 
    Size Image : 614400 
    Colorspace : SRGB 
Crop Capability Video Capture: 
    Bounds  : Left 0, Top 0, Width 640, Height 480 
    Default  : Left 0, Top 0, Width 640, Height 480 
    Pixel Aspect: 1/1 
Video input : 0 (Camera 1: ok) 
Streaming Parameters Video Capture: 
    Capabilities  : timeperframe 
    Frames per second: 30.000 (30/1) 
    Read buffers  : 0 

e questo è il frammento di codice che sto utilizzando:

import cv 

cv.NamedWindow("camera", 1) 
capture = cv.CaptureFromCAM(0) 

while True: 
    img = cv.QueryFrame(capture) 
    cv.ShowImage("camera", img) 
    if cv.WaitKey(10) == 27: 
     break 

cv.DestroyWindow("camera") 

Grazie per la vostra Aiuto!

+0

Si prega di inviare 'v4l2-ctl --all' e un po 'di codice che si sta utilizzando ora. – gertvdijk

+0

L'ho aggiunto al mio post di apertura. Grazie! –

risposta

3

È possibile utilizzare gstreamer-0.10.

  1. Farlo funzionare sulla riga di comando. ad esempio gst-launch -v v4l2src! decodebin! ffmpegcolorspace! pngenc! filesink location = out.png

  2. Utilizzare la funzione parse_launch per ottenere un collegamento a una pipeline funzionante nel codice Python.

    import gst 
    
    pipeline = gst.parse_launch(""" 
    v4l2src ! decodebin ! ffmpegcolorspace ! pngenc ! filesink location="%s" 
    """ % sys.argv[-1]) 
    
    pipeline.set_state(gst.STATE_PLAYING) 
    
1

Ho provato diversi metodi per catturare singoli fotogrammi da una webcam:

uvccapture è un'opzione ed ecco un comando:

uvccapture -d /dev/video0 -o outfile.jpg 

streamer è un altro e il comando si presenta in giro come questo:

Sì, mi rendo conto che questa non è la prestazione più alta dal momento che devi usare il modulo "comando" di Python per eseguire questo comando e ottenere i risultati, e t gallina apre il file risultante in OpenCV per eseguire l'elaborazione.

MA funziona. L'ho usato in produzione su diversi progetti di automazione con successo. Il ritardo che ho riscontrato è tutto basato sul mio software di elaborazione delle immagini, le immagini RAW possono essere visualizzate MOLTO rapidamente.

+0

Salvalo in RAMDisk, '/ run/shm' e la velocità sarà ancora più veloce. – Mustafa

Problemi correlati