2014-12-14 6 views
5

sul mio Raspberry Pi, si verifica uno strano comportamento relativo all'uso del modulo PiCamera.Non è possibile inizializzare PiCamera come membro della classe quando lo script viene eseguito dal prompt dei comandi

Il seguente codice funziona senza problemi quando sia iniziato da IDLE (F5) o dal prompt dei comandi (python test.py $)

import picamera 

if __name__ == "__main__": 
    camera=picamera.PiCamera() 
    camera.close() 

Ma quando ho messo l'oggetto fotocamera in una classe verrà eseguito il codice solo quando ha iniziato da IDLE (F5):

import picamera 

class VF: 
    def __init__(self): 
     self.camera = picamera.PiCamera() 

    def __del__(self): 
     self.camera.close() 


if __name__ == "__main__": 
    myvf = VF() 

quando avvio il codice di cui sopra dal prompt dei comandi, ricevo il seguente messaggio di errore:

mmal: mmal_vc_component_enable: failed to enable component: ENOSPC

Traceback (most recent call last): File "test.py", line 14, in myvf = VF()

File "test.py", line 6, in init self.camera = picamera.PiCamera()

File "/usr/lib/python2.7/dist-packages/picamera/camera.py", line 379, in init camera_num, self.STEREO_MODES[stereo_mode], stereo_decimate)

File "/usr/lib/python2.7/dist-packages/picamera/camera.py", line 505, in _init_camera prefix="Camera component couldn't be enabled")

File "/usr/lib/python2.7/dist-packages/picamera/exc.py", line 133, in mmal_check raise PiCameraMMALError(status, prefix)

picamera.exc.PiCameraMMALError: Camera component couldn't be enabled: Out of resources (other than memory)

Il modulo della fotocamera funziona correttamente, ho appena ridotto il codice alla dimensione minima possibile. Qualcuno conosce questo problema o un problema simile e può probabilmente fornire una soluzione? La versione Python è 2.7 e il Raspberry Rasbiab-System è completamente aggiornato. Grazie in anticipo.

+1

Ho appena confermato questo comportamento su un altro Raspberry-Pi con un altro modulo fotocamera. – Pepschmier

risposta

2

Scoperto, che il modulo della telecamera non viene spento correttamente quando il distruttore non viene chiamato esplicitamente (il LED era spento, quindi non l'ha visto).

IDLE gestisce una telecamera in esecuzione ripristinandola in qualche modo prima dell'inizio dello script, ma non dell'interprete python.

Quindi tutto è a posto ora, quando il distruttore viene chiamato prima della fine dello script.

+0

Per "distruttore" intendi il metodo camera.close(), sì? – wil

3

Ho lottato con questo per ore e ho continuato a ricevere l'errore "Fuori risorse". Ho finalmente capito che nella mia funzione di take-the-picture, avevo bisogno di assicurarsi che ho fatto in questo modo:

 
    camera = PiCamera() 
    (...camera settings here...) 
    camera.capture(myfileName) 
    camera.close() 

Se non avessi fatto il close(), mi piacerebbe ottenere che ogni errore tempo. Assicurati quindi che camera.close() venga chiamata subito dopo lo "snap". Ha risolto il problema per me.

Problemi correlati