编写 Python 程序,分别实现以下两个功能: ✓ 利用 opencv 启动笔记本上的摄像头,实时读取摄像头中的视频流, 对视频流中每一帧图像,使用 opencv 检测人脸,并在检测到的人脸 周围画一个矩形框,最后将视频流和人脸矩形框实时显示在 opencv 窗口中,利用 opencv 启动笔记本上的摄像头,实时读取摄像头中的视频流,对视 频流中每一帧图像,使用 dlib 检测 68 个人脸特征点,并在检测到的人脸 特征点画在图像帧上,最后将视频流和人脸特征点实时显示在 opencv 窗 口中。
时间: 2024-03-17 10:39:45 浏览: 15
以下是实现这两个功能的Python程序:
```python
import cv2
import dlib
# 使用opencv检测人脸并画矩形框
def detect_faces_opencv(frame, face_cascade):
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
faces = face_cascade.detectMultiScale(gray, 1.3, 5)
for (x,y,w,h) in faces:
cv2.rectangle(frame,(x,y),(x+w,y+h),(255,0,0),2)
return frame
# 使用dlib检测人脸特征点并画在图像帧上
def detect_landmarks_dlib(frame, predictor):
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
faces = detector(gray)
for face in faces:
landmarks = predictor(gray, face)
for n in range(0, 68):
x = landmarks.part(n).x
y = landmarks.part(n).y
cv2.circle(frame, (x, y), 1, (0, 0, 255), -1)
return frame
# 加载opencv人脸检测器
face_cascade = cv2.CascadeClassifier(cv2.data.haarcascades + "haarcascade_frontalface_default.xml")
# 加载dlib人脸检测器和特征点预测器
detector = dlib.get_frontal_face_detector()
predictor = dlib.shape_predictor('shape_predictor_68_face_landmarks.dat')
# 打开摄像头
cap = cv2.VideoCapture(0)
while True:
# 读取一帧图像
ret, frame = cap.read()
if not ret:
break
# 调用函数检测人脸并画框
frame_opencv = detect_faces_opencv(frame, face_cascade)
# 调用函数检测人脸特征点并画在图像帧上
frame_dlib = detect_landmarks_dlib(frame, predictor)
# 实时显示视频流和人脸检测结果
cv2.imshow('frame_opencv', frame_opencv)
cv2.imshow('frame_dlib', frame_dlib)
# 按下q键退出循环
if cv2.waitKey(1) == ord('q'):
break
# 释放摄像头并关闭窗口
cap.release()
cv2.destroyAllWindows()
```
这个程序首先定义了两个函数,一个用于使用opencv检测人脸并画矩形框,另一个用于使用dlib检测人脸特征点并画在图像帧上。然后加载了opencv人脸检测器、dlib人脸检测器和特征点预测器,接着打开摄像头,不断读取视频流并调用上述两个函数进行人脸检测和特征点检测,并将结果实时显示在opencv窗口中。最后,当按下q键时,程序退出循环并释放摄像头并关闭窗口。