2017-08-25 230 views
1

のための不正なバッファ長私はラズベリーパイは、パイのカメラからのビデオフィードに顔(複数可)を検出するためにしようとしていますが、これは私のコードpiCameraValueError:解像度640×480

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 

である私はそれを実行しようとしたが、私このエラーメッセージが表示されました

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 

どこが間違っていましたか?私はPythonプログラミングの初心者なので、どうやって修正するのか、どこで始めるのか混乱します。事前にお返事ありがとうございます

答えて

0

コードが正しくインデントされていないようです。私はあなたがあなたがいるときに現在のフレームをクリアすることになっているので、それがエラーの原因だったと思うimage = frame.array

ラインと同じようにインデントされるように

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

faces = faceCascade.detectMultiScale(

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

:私はこれらの行をインデントすることをお勧め次のフレームに備えて準備しておいてください。rawCapture.truncate(0)でこれをやろうとしています。

インデントは、コード行がどのようにブロックとして扱われるので、Pythonでは本当に重要です。私はいくつかのプログラミング言語の中括弧がコード行をブロックとしてどのように扱うかを見ています。

関連する問題