PiCameraValueError: Incorrect buffer length for resolution 1920x1080
<p>This is my code to detect circle/balls.
I want to detect soccer ball from Pi camera. (soccer ball could be in any color.) I am having trouble with some PiCameraValueError. What is wrong with this code. I am using Raspberry Pi 2, Python2, and OpenCV.</p>

<pre><code>from picamera.array import PiRGBArray
from picamera import PiCamera
import time
import cv2
import sys
import imutils
import cv2.cv as cv
# initialize the camera and grab a reference to the raw camera capture
camera = PiCamera()

rawCapture = PiRGBArray(camera)

# capture frames from the camera
for frame in camera.capture_continuous(rawCapture, format="bgr"):
    # grab the raw NumPy array representing the image, then initialize the timestamp
    # and occupied/unoccupied text
    image = frame.array
    img   = cv2.medianBlur(image, 5)
    imgg  = cv2.cvtColor(img, cv2.COLOR_RGB2GRAY)
    cimg  = cv2.cvtColor(imgg, cv2.COLOR_GRAY2BGR)
    imgg  = cv2.blur(imgg, (3,3))
            #imgg = cv2.dilate(imgg, np.ones((5, 5)))
            #imgg = cv2.GaussianBlur(imgg,(5,5),0)
    circles = cv2.HoughCircles(imgg, cv.CV_HOUGH_GRADIENT, 1, 20, param1=100, param2=40, minRadius=5, maxRadius=90)
    cv2.imshow("cimg", imgg)
    key = cv2.waitKey(1)
    if key &amp; 0xFF == ord('q'):
        break
    if circles is None:
        continue

    print circles
            #circles = np.uint16(np.around(circles))
    for i in circles[0,:]:
        cv2.circle(cimg,(i[0],i[1]),i[2],(0,255,0),1) # draw the outer circle
                   #cv2.circle(cimg,(i[0],i[1]),2,(0,0,255),3) # draw the center of the circle
        cv2.imshow("Filtered", cimg)

cv2.destroyWindow("cimg")
cv2.destroyAllWindows() 
</code></pre>

<p>As explained <a href="https://github.com/waveform80/picamera" rel="nofollow">here</a>,</p>

<blockquote>
  <p>the <code>PiCameraValueError</code> is a secondary exception raised in response to
  the KeyboardInterrupt exception. This is quite normal and not a bug
  (it's more a consequence of how generic the output mechanism is in
  picamera), but it is difficult to detect and respond to in Python 2
  (the usual method there would probably be to catch the
  PiCameraValueError as well in whatever loop your main script runs).
  Under Python 3, <a href="http://stackoverflow.com/questions/16414744/python-exception-chaining">exception chaining</a> is implemented so you could
  potentially look back through the stack of exceptions to find the
  KeyboardInterrupt one.</p>
</blockquote>

<p>What you need to do is clear the stream between captures. The <a href="http://picamera.readthedocs.org/en/release-1.7/array.html#picamera.array.PiRGBArray" rel="nofollow">PiRGBArray</a> docs cover doing this with truncate function.</p>

<p>Here is an example from, <a href="http://stackoverflow.com/questions/29938829/python-face-detection-raspberry-pi-with-picamera">python face detection raspberry pi with picamera</a></p>

<pre><code>import io
import time
import picamera
with picamera.PiCamera() as camera:
    stream = io.BytesIO()
    for foo in camera.capture_continuous(stream, format='jpeg'):
    # YOURS:  for frame in camera.capture_continuous(stream, format="bgr",  use_video_port=True):
        # Truncate the stream to the current position (in case
        # prior iterations output a longer image)
        stream.truncate()
        stream.seek(0)
        if process(stream):
            break
</code></pre>

python opencv raspberry-pi detection raspbian