Python3.6.3 + OpenCV3.3.0 实现动态人脸捕获
准备工作
在开始之前,我们需要准备一些必要的工具和环境:
- Python3.6.3
- OpenCV3.3.0
- 摄像头设备(PC自带或USB摄像头)
安装Python3.6.3和OpenCV3.3.0
如果你还没有安装Python3和OpenCV,可以参考以下步骤:
安装Python3.6.3
- 访问官方网站:https://www.python.org/downloads/release/python-363/.
- 选择对应的操作系统版本,下载对应的安装包。
- 双击安装包,按照提示进行安装。
安装OpenCV3.3.0
- 下载OpenCV3.3.0的源代码,可以从官网(https://opencv.org/releases/)或者其他镜像网站下载最新的编译好的压缩包。
- 解压下载的压缩包,在命令行中进入解压后的文件夹。
- 在命令行中输入以下命令,编译并安装OpenCV:
mkdir build
cd build
cmake ../
make
sudo make install
在安装前,需要确保已经安装了cmake和其他依赖项。具体可以参考OpenCV官方文档。
动态人脸捕获实现
我们使用Python3.6.3和OpenCV3.3.0来实现动态人脸捕获。具体步骤如下:
步骤1:导入所需要的库
我们需要导入cv2,numpy和os库来实现人脸捕获。
import cv2
import numpy as np
import os
步骤2:加载人脸分类器
OpenCV提供了许多人脸分类器,我们可以使用其中的之一来检测人脸。在这里,我们使用的是haarcascade_frontalface_alt.xml
。
face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_alt.xml')
步骤3:打开摄像头
cap = cv2.VideoCapture(0)
其中0表示打开默认的摄像头设备,如果有多个设备,可以设置为1、2、3等。
步骤4:读取每一帧图像
ret, frame = cap.read()
其中ret表示摄像头是否正常打开,frame表示读取到的一帧图像。
步骤5:人脸检测
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
faces = face_cascade.detectMultiScale(gray, scaleFactor=1.1, minNeighbors=5, minSize=(30, 30))
其中,我们首先将图像转换为灰度图像(这一步会提高程序的运行速度),然后使用detectMultiScale
函数检测人脸。scaleFactor
、minNeighbors
、minSize
等参数需要我们根据实际情况进行调整。
步骤6:在图像中绘制矩形框
for (x, y, w, h) in faces:
cv2.rectangle(frame, (x, y), (x+w, y+h), (0, 255, 0), 2)
这一步,我们在读取到的每一帧图像中,将检测到的每一个人脸用绿色的矩形框出来。(x, y)
表示矩形框左下角的坐标,(x+w, y+h)
表示矩形框右上角的坐标。
步骤7:显示图像
cv2.imshow('Face Detection', frame)
这一步,我们将处理后的图像显示出来,然后等待ESC
键的输入。
步骤8:释放资源
cap.release()
cv2.destroyAllWindows()
最后,我们释放摄像头资源并关闭所有窗口。
示例1:动态人脸捕获
下面的代码实现动态人脸捕获的功能,只需要运行就可以在打开的窗口中实时显示摄像头捕获到的人脸。
import cv2
import numpy as np
import os
face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_alt.xml')
cap = cv2.VideoCapture(0)
while True:
ret, frame = cap.read()
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
faces = face_cascade.detectMultiScale(gray, scaleFactor=1.1, minNeighbors=5, minSize=(30, 30))
for (x, y, w, h) in faces:
cv2.rectangle(frame, (x, y), (x+w, y+h), (0, 255, 0), 2)
cv2.imshow('Face Detection', frame)
if cv2.waitKey(1) == 27:
break
cap.release()
cv2.destroyAllWindows()
示例2:图片中人脸捕获
下面的代码实现读取一张图片,并在上面用矩形框出其中的人脸。
import cv2
import numpy as np
import os
face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_alt.xml')
img = cv2.imread('test_image.jpg')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
faces = face_cascade.detectMultiScale(gray, scaleFactor=1.1, minNeighbors=5, minSize=(30, 30))
for (x, y, w, h) in faces:
cv2.rectangle(img, (x, y), (x+w, y+h), (0, 255, 0), 2)
cv2.imshow('Face Detection', img)
cv2.waitKey()
cv2.destroyAllWindows()
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python3.6.3+opencv3.3.0实现动态人脸捕获 - Python技术站