树莓派3B+ opencv3进行简单的人脸检测

测试环境如下

硬件准备:树莓派3B+,CSI摄像头(500万像素)

系统环境:已安装opencv3.4.2

树莓派型号

pi@raspberrypi:~ $ cat /proc/device-tree/model

Raspberry Pi 3 Model B Plus Rev 1.3

系统位数


pi@raspberrypi:~ $ getconf LONG_BIT

32

系统版本

pi@raspberrypi:~ $ lsb_release -a

No LSB modules are available.

Distributor ID: Raspbian

Description: Raspbian GNU/Linux 9.4 (stretch)

Release: 9.4

Codename: stretch

内核

pi@raspberrypi:~ $ uname -a

Linux raspberrypi 4.14.52-v7+ #1123 SMP Wed Jun 27 17:35:49 BST 2018 armv7l GNU/Linux

pi@raspberrypi:~ $ opencv_version 

3.4.2

开始测试:

在树莓派上安装 OpenCV 之后,我们测试一下,以确认摄像头正常运转。


pi@raspberrypi:~ $ pwd

/home/pi

创建python测试文件

sudo nano testcamera.py

代码如下

import numpy as np

import cv2

 

cap = cv2.VideoCapture(0)

cap.set(3,640) # set Width

cap.set(4,480) # set Height

  

while(True):

    ret, frame = cap.read()

#    frame = cv2.flip(frame, -1) # Flip camera vertically 表示垂直翻转摄像头画面

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

     

    cv2.imshow('frame', frame)

    cv2.imshow('gray', gray)

     

    k = cv2.waitKey(30) & 0xff

    if k == 27: # press 'ESC' to quit

        break


 cap.release()

cv2.destroyAllWindows()

保存后,直接运行这个脚本

python testcamera.py 

你将会看到一个灰色的摄像头启动的画面,表示成功。注意:复制代码过去的时候请把我注释的汉字去掉,否则会报错。垂直翻转摄像头是因为有些人的摄像头安装的反向是反的,我的是安装的正的,所以将那一行注释了。

灰色测试图_眸目压缩.jpg

Ctrl+C退出,测试摄像头结束。

接着开始简单的人脸检测,检测成功后悔会框住人脸。

新建人脸检测的python文件

sudo nano facedetection.py

代码如下

import numpy as np
import cv2

 

faceCascade = cv2.CascadeClassifier('/home/pi/opencv/opencv3/data/haarcascades/haarcascade_frontalface_default.xml')

 

cap = cv2.VideoCapture(0)
cap.set(3,640) # set Width
cap.set(4,480) # set Height

 

while True:
    ret, img = cap.read()
    img = cv2.flip(img, -1)
    gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
    faces = faceCascade.detectMultiScale(
        gray,    
        scaleFactor=1.2,
        minNeighbors=5,    
        minSize=(20, 20)
    )

 

    for (x,y,w,h) in faces:
        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('video',img)

 

    k = cv2.waitKey(30) & 0xff
    if k == 27: # press 'ESC' to quit
        break

 

cap.release()
cv2.destroyAllWindows()

注意,faceCascade = cv2.CascadeClassifier('/home/pi/opencv/opencv3/data/haarcascades/haarcascade_frontalface_default.xml')这行代码中要写你安装opencv目录下的haarcascade_frontalface_default.xml文件的绝对路径,否则会报错。这行代码可以加载「分类器」。上一篇文章安装opencv的时候我是把它安装在/home/pi/opencv/opencv3/目录下,因此定义faceCascade的绝对路径就是/home/pi/opencv/opencv3/data/haarcascades/haarcascade_frontalface_default.xml

接下来开始运行

python facedetection.py

你将会看到镜头检测到了一个人脸。

人脸识别成功_眸目压缩.jpg

至此,简单的人脸检测就已经成功了。


最后编辑于:2018/08/05作者: admin

发表评论