[python][mediapipe]摄像头人脸检测

该代码示例展示了如何利用Mediapipe的BlazeFace模型和OpenCV库实现实时的人脸检测。它设置了置信度阈值和模型选择,处理视频流,并在检测到人脸时在帧上绘制预测框和关键点。用户可以通过按q键退出程序。
摘要由CSDN通过智能技术生成
import cv2
import mediapipe as mp

# 导入BlazeFace模型
mp_face_detection = mp.solutions.face_detection
model = mp_face_detection.FaceDetection(
    min_detection_confidence=0.5,  # 置信度阈值,过滤掉小于置信度的预测框
    model_selection=1,  # 选择模型,0 适用于人脸离摄像头比较近(2米内),1 适用于比较远(5米以内)
)
# 导入可视化函数以及可视化样式
mp_drawing=mp.solutions.drawing_utils
# 关键点样式
keypoint_style=mp_drawing.DrawingSpec(thickness=5,circle_radius=3,color=(0,255,0))
# 人脸预测框样式
bbox_style=mp_drawing.DrawingSpec(thickness=5,circle_radius=3,color=(255,0,0))
cap = cv2.VideoCapture(0)

# 获取视频帧速率 FPS
frame_fps = int(cap.get(cv2.CAP_PROP_FPS))
# 获取视频帧宽度和高度
frame_width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))
frame_height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))
print("video fps={},width={},height={}".format(frame_fps, frame_width, frame_height))
while True:
    ret, frame = cap.read()
    if not ret:
        break
    # BGR转RGB
    img_RGB = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
    # 将RGB输入模型预测结果
    results = model.process(img_RGB)
    # 可视化人脸框和人脸关键点
    for detection in results.detections:
        mp_drawing.draw_detection(frame,
                                  detection,
                                  keypoint_drawing_spec=keypoint_style,
                                  bbox_drawing_spec=bbox_style)
    cv2.imshow('frame', frame)
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break
cap.release()
cv2.destroyAllWindows()
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
要实现摄像头人脸识别,需要使用一些库来帮助我们完成。以下是基于Python摄像头人脸识别的实现步骤。 1. 安装必要的库 在Python中使用OpenCV和face_recognition库来实现人脸识别。可以使用以下命令安装: ``` pip install opencv-python pip install face_recognition ``` 2. 采集人脸照片 首先需要采集照片作为模型的训练数据。可以使用摄像头拍摄多张照片,并将这些照片存储在一个文件夹中。确保每个人的照片都存储在单独的文件夹中。 3. 训练人脸识别模型 使用已采集的照片训练人脸识别模型。可以使用face_recognition库来训练模型,并将其保存到本地。 4. 实时识别人脸 打开摄像头并开始实时识别人脸。可以使用OpenCV库来读取摄像头视频流,并使用face_recognition库来识别摄像头中的人脸。可以在识别到人脸时在屏幕上显示人名或标签。 下面是一个Python程序示例,可以实现上述步骤: ``` import cv2 import face_recognition # 读取已知人脸照片并训练模型 known_faces = [] known_names = [] for person_name in ["person1", "person2", "person3"]: image = face_recognition.load_image_file(f"{person_name}.jpg") face_encoding = face_recognition.face_encodings(image)[0] known_faces.append(face_encoding) known_names.append(person_name) # 打开摄像头并开始实时识别人脸 video_capture = cv2.VideoCapture(0) while True: # 读取视频帧 ret, frame = video_capture.read() # 将视频帧转换为RGB格式 rgb_frame = frame[:, :, ::-1] # 在视频帧中识别人脸 face_locations = face_recognition.face_locations(rgb_frame) face_encodings = face_recognition.face_encodings(rgb_frame, face_locations) for face_encoding, face_location in zip(face_encodings, face_locations): # 尝试将人脸匹配到已知人脸 matches = face_recognition.compare_faces(known_faces, face_encoding) name = "Unknown" # 如果找到了匹配的人脸,则显示对应的名字 if True in matches: first_match_index = matches.index(True) name = known_names[first_match_index] # 绘制人脸边框和名字 top, right, bottom, left = face_location cv2.rectangle(frame, (left, top), (right, bottom), (0, 0, 255), 2) cv2.putText(frame, name, (left + 6, bottom - 6), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0, 0, 255), 1) # 显示视频帧 cv2.imshow('Video', frame) # 等待按键退出程序 if cv2.waitKey(1) & 0xFF == ord('q'): break # 释放摄像头并关闭窗口 video_capture.release() cv2.destroyAllWindows() ``` 在这个示例中,我们从三个不同的文件中加载人脸照片,然后使用face_recognition库训练模型。然后,我们打开摄像头,并在每一帧中识别人脸并将其与已知人脸进行比较。如果找到了匹配的人脸,则在屏幕上显示该人的名字。最后,我们等待按键退出程序。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

FL1623863129

你的打赏是我写文章最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值