如何进行实时人脸检测,opencv,python3,raspberrypi 3

时间:2018-03-09 21:19:46

标签: python-3.x opencv opencv3.0

我正在尝试使用picamera和rpi3创建一个供个人使用的小程序。我一直试图使用opencv实现实时人脸检测。它永远不会奏效。我得到的错误代码是 “错误:(-215)scn == 3 || scn == 4 in function cvtColor”

我尝试使用的代码是:

import numpy as np
import cv2
cam = cv2.VideoCapture(0)
name = 'detect'
face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')
cv2.namedWindow(name, cv2.WINDOW_AUTOSIZE)
while True:
    s, img = cam.read()
    gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
    faces = face_cascade.detectMultiScale(gray, 1.3, 5)
    for (x,y,w,h) in faces:
        cv2.rectangle(img,(x,y),(x+w,y+h),(255,0,0),2)
    cv2.imshow(name, img)    
    k = cv2.waitKey(0)
    if k == 27:
        cv2.destroyWindow("Detect")
        break

免责声明,我在这里发布的代码不是我的。我打算复制粘贴编辑代码以供个人使用。我声称没有创建它,我只需要它来工作

非常感谢提前

1 个答案:

答案 0 :(得分:0)

我找到了解决方案。我没有使用上面发布的代码,而是窃取了一些新代码并根据自己的喜好对其进行了编辑。出于某种原因,它只能在从终端触发时才能工作,但这是可以接受的。

所需的命令(在linux上)是:     cd(path_to_script)&& python3(script_name)--picamera 1

感谢@beaker帮助我

from imutils.video import VideoStream
from imutils import face_utils
import datetime
import argparse
import imutils
import time
import dlib
import cv2
ap = argparse.ArgumentParser()
ap.add_argument("-r", "--picamera", type=int, default=-1,
    help="whether or not the Raspberry Pi camera should be used")
args = vars(ap.parse_args())
print("[INFO] camera sensor warming up...")
vs = VideoStream(usePiCamera=args["picamera"] > 0).start()
time.sleep(2.0)
faceCascade = cv2.CascadeClassifier('/home/pi/Documents/Python Projects/Camera/haarcascade_frontalface_default.xml')
while True:
    frame = vs.read()
    frame = imutils.resize(frame, width=400)
    gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
    faces = faceCascade.detectMultiScale(
        gray,
        scaleFactor=1.1,
        minNeighbors=5,
        minSize=(30, 30),
        flags = cv2.CASCADE_SCALE_IMAGE)
    for (x, y, w, h) in faces:
        cv2.rectangle(frame, (x, y), (x+w, y+h), (0, 255, 0), 10)
    cv2.imshow("Frame", frame)
    key = cv2.waitKey(1) & 0xFF
    if key == ord("q"):
        break
cv2.destroyAllWindows()
vs.stop()

免责声明,我在这里发布的代码不是我的。我打算复制粘贴编辑代码以供个人使用。我声称没有创建它