Skip to main content
 首页 » 编程设计

带有picamera的python人脸检测树莓派

2025年05月04日14findumars

我是 python 和 opencv 的新手,我正在尝试使用 raspberry pi 构建人脸检测项目。我收到这个错误,这是我的代码

追溯(最近的调用最后):

 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): 

代码:

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() 

请您参考如下方法:

问题出在您的 camera.capture_continuos 中。第一个值,输出,不能只是一个数组,因为它像文档所说的那样用无限迭代记录。而不是这个你应该放一个输出文件。如果您想要一个流来捕获它,您也可以使用 io.Bytes。

在此link它向您解释了有关如何使用框架以及应将输出重定向到何处的示例。

您可以按照 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