项目1:学生课堂专注度分析系统-3人脸检测-yolov8n-face轻量版
·
学生课堂专注度分析系统中人脸检测模块轻量版代码免费下载链接如下:
https://download.csdn.net/download/hjm213/92688763
下载后务必将face_detection_yolo8_face.py中以下语句修改为自己的路径:
os.chdir(r"E:/CSDN/Classroom_Focus_System_FD_YOLO_Lite")
学生课堂专注度分析系统,首先需要进行人脸检测,本代码提供了图像、视频及摄像头三种输入方式,代码示例如下;
if __name__ == "__main__":
# 根据模式执行对应检测,分别对应图片、视频及摄像头入口
if DETECTION_MODE == "image":
detect_image(IMAGE_PATH)
elif DETECTION_MODE == "video":
detect_video(VIDEO_PATH)
elif DETECTION_MODE == "camera":
detect_camera()
else:
print(f"❌ 错误:DETECTION_MODE 只能是 'image'/'video'/'camera'")
可以在PyCharm中切换GUP与CPU环境。
![]()
图片检测部分代码示例及注释如下:
from ultralytics import YOLO
import cv2
import torch
import os
import time
# 确保工作目录是指定路径
os.chdir(r"E:\code\Classroom_Focus_System")
# -------------------------- 核心配置项 --------------------------
# 检测模式:"camera"(摄像头) / "video"(视频) / "image"(图片)
DETECTION_MODE = "image"
# 各模式对应的文件路径
IMAGE_PATH = "test.jpg" # 图片检测路径(支持jpg/png/bmp等)
VIDEO_PATH = "test.mp4" # 视频检测路径
SAVE_RESULT = True # 是否保存检测结果(图片/视频)
CONF_THRESHOLD = 0.5 # 人脸置信度阈值(过滤低精度结果)
# -------------------------- 初始化配置 --------------------------
# 自动判断设备(有RTX 5070用GPU,无显卡用CPU)
device = 0 if torch.cuda.is_available() else 'cpu'
# 加载YOLOv8人脸检测模型(轻量版,CPU也能快速运行)
model = YOLO('yolov8n-face.pt')
#(以下为更高精度模型)
#model = YOLO('yolov8s-face.pt')
#model = YOLO('yolov8m-face.pt')
#model = YOLO('yolov8l-face.pt')
#model = YOLO('yolov8x-face.pt')
# 打印环境信息
print("=" * 60)
print(f"工作目录:{os.getcwd()}")
print(f"使用设备:{'RTX 5070 (GPU)' if device == 0 else 'CPU'}")
print(f"检测模式:{DETECTION_MODE.upper()}")
print(f"置信度阈值:{CONF_THRESHOLD}")
print("=" * 60)
# -------------------------- 图片检测函数 --------------------------
def detect_image(image_path):
"""
本地图片人脸检测(适配yolov8n.pt通用模型+类别过滤)
:param image_path: 输入图片路径
"""
# 1. 检查图片文件
if not os.path.exists(image_path):
print(f"❌ 错误:图片文件 {image_path} 不存在!")
return
# 2. 读取图片
image = cv2.imread(image_path)
if image is None:
print(f"❌ 错误:无法读取图片 {image_path}(格式不支持/文件损坏)")
return
# 3. 人脸检测(计时)
start_time = time.time()
results = model(image, device=device, conf=CONF_THRESHOLD)
detect_time = round(time.time() - start_time, 3)
# ========== 过滤出仅"person/人脸"类别(class_id=0) ==========
# 初始化空列表存储人脸检测框
face_boxes = []
# 遍历所有检测框,只保留person类(ID=0)
for box in results[0].boxes:
# YOLOv8通用模型中,person类的ID固定为0(对应人脸/人体)
if int(box.cls) == 0:
face_boxes.append(box)
# ========== 只绘制人脸检测框 ==========
# plot(boxes=face_boxes) 仅绘制过滤后的人脸框,其他类别不显示
annotated_image = results[0].plot(boxes=face_boxes)
# ========== 统计真实的人脸数量 ==========
face_count = len(face_boxes) # 替换原来的len(results[0].boxes)
# 添加检测信息(耗时、人脸数量)
cv2.putText(
annotated_image,
f"Faces: {face_count} | Time: {detect_time}s",
(10, 30),
cv2.FONT_HERSHEY_SIMPLEX,
1, (0, 255, 0), 2
)
# 5. 保存检测结果(可选)
if SAVE_RESULT:
save_path = f"output_{os.path.basename(image_path)}"
cv2.imwrite(save_path, annotated_image)
print(f"✅ 检测结果已保存:{save_path}")
# 6. 显示检测结果
print(f"✅ 图片检测完成 | 检测耗时:{detect_time}s | 检测到人脸数:{face_count}")
cv2.imshow('YOLO Face Detection (Image)', annotated_image)
print("\n💡 提示:按任意键关闭图片窗口...")
cv2.waitKey(0) # 按任意键关闭
cv2.destroyAllWindows()
篇幅受限代码未完全展示,人脸检测模块轻量版代码免费下载链接如下:
https://download.csdn.net/download/hjm213/92688763
下载后务必将face_detection_yolo8_face.py中以下语句修改为自己的路径:
os.chdir(r"E:/CSDN/Classroom_Focus_System_FD_YOLO_Lite")
备注:
本项目基础学习代码可免费下载;
部分性能测试资源需VIP会员下载;
部分工程应用代码需付费下载。
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐
所有评论(0)