测试环境如下
硬件准备:树莓派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
你将会看到一个灰色的摄像头启动的画面,表示成功。注意:复制代码过去的时候请把我注释的汉字去掉,否则会报错。垂直翻转摄像头是因为有些人的摄像头安装的反向是反的,我的是安装的正的,所以将那一行注释了。
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
你将会看到镜头检测到了一个人脸。
至此,简单的人脸检测就已经成功了。
发表评论