2017-08-25 3 views
1

Je suis en train de faire ma pi framboise détecter le visage (s) dans l'alimentation vidéo de la caméra de pi, c'est mon codepiCameraValueError: Incorrect longueur tampon pour la résolution 640x480

import time 
import cv2 
import sys 
import numpy as np 
from picamera.array import PiRGBArray 
from picamera import PiCamera 

# camera settings 
camera = PiCamera() 
camera.resolution = (640, 480) 
camera.framerate = 32 
rawCapture = PiRGBArray(camera, size=(640,480)) 

time.sleep(1) 

# video input 
faceCascade = cv2.CascadeClassifier('/home/pi/opencv-3.1.0/data/haarcascades/haarcascade_frontalface_default.xml') 


# capture frame from the camera 
for frame in camera.capture_continuous(rawCapture, format="bgr", use_video_port=True): 

    image = frame.array 

# face detection 
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) 

faces = faceCascade.detectMultiScale(
     gray, 
     scaleFactor=1.1, 
     minNeighbors=5, 
     minSize=(30, 30), 
     flags=cv2.CASCADE_SCALE_IMAGE 
    ) 

# Draw a rectangle around the faces 
for (x, y, w, h) in faces: 
     cv2.rectangle(frame, (x, y), (x+w, y+h), (0, 255, 0), 2) 

#show the frames 

     cv2.imshow("Frame", image) 
     key = cv2.waitKey(1) & 0xFF 

     rawCapture.truncate(0) 

     if key == ord("q"): 
      break 

J'ai essayé de l'exécuter, mais je a reçu ce message d'erreur

Traceback (most recent call last): 
    File"/home/pi/pythonpy/videofacedet/craft/videofacedet(selfmade).py", line 21, in <module> 
for frame in camera.capture_continuous(rawCapture, format="bgr", use_video_port=True): 
File "/usr/lib/python2.7/dist-packages/picamera/camera.py", line 1702, in capture_continuous 
if not encoder.wait(self.CAPTURE_TIMEOUT): 
File "/usr/lib/python2.7/dist-packages/picamera/encoders.py", line 395, in wait 
self.stop() 
File "/usr/lib/python2.7/dist-packages/picamera/encoders.py", line 419, in stop 
self._close_output() 
File "/usr/lib/python2.7/dist-packages/picamera/encoders.py", line 349, in _close_output 
mo.close_stream(output, opened) 
File "/usr/lib/python2.7/dist-packages/picamera/mmalobj.py", line 371, in close_stream 
stream.flush() 
File "/usr/lib/python2.7/dist-packages/picamera/array.py", line 238, in flush 
self.array = bytes_to_rgb(self.getvalue(), self.size or self.camera.resolution) 
File "/usr/lib/python2.7/dist-packages/picamera/array.py", line 127, in bytes_to_rgb 
    'Incorrect buffer length for resolution %dx%d' % (width, height)) 
PiCameraValueError: Incorrect buffer length for resolution 640x480 

où est-ce que ça s'est mal passé? Je suis novice en programmation python, donc je ne comprends pas comment je peux le réparer et par où commencer. Merci d'avance pour vos réponses

Répondre

0

Votre code ne semble pas être indenté correctement. Je proposerais indenter ces lignes:

gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) 

faces = faceCascade.detectMultiScale(

for (x, y, w, h) in faces: 

à la indentées même que la ligne image = frame.array

Je pense que ce la cause de l'erreur puisque vous êtes censé effacer l'image actuelle lorsque vous êtes fait avec elle pour se préparer à l'image suivante et je vois que vous essayez de le faire avec rawCapture.truncate(0).

L'indentation est vraiment importante en python puisque c'est ainsi que les lignes de code sont traitées comme des blocs. Je vois cela comme la façon dont les accolades dans certains langages de programmation traitent les lignes de code comme des blocs.