Mar*_*eca 2 python face-detection raspberry-pi2
我是 python 和 opencv 的新手,我正在尝试用树莓派构建一个人脸检测项目。我收到此错误,这是我的代码
回溯(最近一次调用最后一次):
File "/home/pi/Desktop/picamera-code/FaceDetection1.0", line 19, in <module>
for frame in
camera.capture_continuous(rawCapture, format="bgr", use_video_port=True):
Run Code Online (Sandbox Code Playgroud)
代码:
import numpy as np
import cv2
from picamera.array import PiRGBArray
from picamera import PiCamera
import time
camera = PiCamera()
camera.resolution = (640, 480)
camera.framerate = 32
rawCapture = PiRGBArray(camera, size=(640, 480))
time.sleep(0.1)
face_cascade = cv2.CascadeClassifier('/home/pi/Downloads/haarcascade_frontalface_default.xml')
for frame in camera.capture_continuous(rawCapture, format="bgr", use_video_port=True):
img=np.asarray(frame.array)
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
faces = face_cascade.detectMultiScale(gray, 1.3, 5)
for (x,y,w,h) in faces:
img = cv2.Rectangle(img,(x,y),(x+w,y+h),(255,0,0),2)
roi_gray = gray[y:y+h, x:x+w]
roi_color = img[y:y+h, x:x+w]
cv2.imshow('img',img)
cv2.waitKey(0)
cv2.destroyAllWindows()
Run Code Online (Sandbox Code Playgroud)
问题出在你的camera.capture_continuos. 第一个值,输出,不能只是一个数组,因为它记录了无限迭代,正如文档所说。取而代之的是,您应该放置一个输出文件。如果你想要一个流来捕获它,你也可以使用 io.Bytes 。
在此链接中,它向您解释了有关如何使用框架以及应将输出重定向到何处的示例。
您可以执行类似于 API 文档中建议的操作。获取流并截断它以获得您当前获得的图像:
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
Run Code Online (Sandbox Code Playgroud)