yolo v5识别人物情绪

复制代码
# 安装 YOLOv5 依赖
git clone https://github.com/ultralytics/yolov5
cd yolov5
pip install -r requirements.txt
  1. 加载 YOLOv5-face 模型用于五官检测
python 复制代码
from yolov5_face.face_detector import YoloDetector
import cv2

# 初始化模型(下载好模型或替换为你自己的路径)
model_path = "weights/yolov5s-face.pt"
detector = YoloDetector(model_path, device='cuda')  # 或 'cpu'

img = cv2.imread("test.jpg")
bboxes = detector.predict(img)

for box in bboxes:
    x1, y1, x2, y2, conf, landmarks = box
    # landmarks = [left_eye, right_eye, nose, left_mouth, right_mouth]
    cv2.rectangle(img, (x1, y1), (x2, y2), (255,0,0), 2)
    for (x, y) in landmarks:
        cv2.circle(img, (int(x), int(y)), 2, (0,255,0), -1)
  1. 加载情绪识别模型(CNN)
python 复制代码
import torch
import torch.nn as nn
from torchvision import transforms
from PIL import Image

# 假设我们使用一个训练好的 FER 模型
class EmotionCNN(nn.Module):
    def __init__(self):
        super().__init__()
        self.net = nn.Sequential(
            nn.Conv2d(1, 32, 3), nn.ReLU(),
            nn.MaxPool2d(2),
            nn.Conv2d(32, 64, 3), nn.ReLU(),
            nn.AdaptiveAvgPool2d(1),
            nn.Flatten(),
            nn.Linear(64, 7)  # 7类表情
        )

    def forward(self, x):
        return self.net(x)

emotion_model = EmotionCNN()
emotion_model.load_state_dict(torch.load("emotion_model.pth", map_location="cpu"))
emotion_model.eval()

transform = transforms.Compose([
    transforms.Resize((48, 48)),
    transforms.Grayscale(),
    transforms.ToTensor()
])

# 裁剪人脸区域
face_crop = img[y1:y2, x1:x2]
face_pil = Image.fromarray(cv2.cvtColor(face_crop, cv2.COLOR_BGR2RGB))
input_tensor = transform(face_pil).unsqueeze(0)

with torch.no_grad():
    output = emotion_model(input_tensor)
    pred = torch.argmax(output, dim=1).item()

emotions = ["愤怒", "厌恶", "恐惧", "高兴", "难过", "惊讶", "平静"]
emotion_label = emotions[pred]
cv2.putText(img, emotion_label, (x1, y1 - 10), cv2.FONT_HERSHEY_SIMPLEX, 0.8, (0, 0, 255), 2)
  1. 完整流程打包整合
python 复制代码
def detect_face_and_emotion(image_path):
    img = cv2.imread(image_path)
    faces = detector.predict(img)
    
    for box in faces:
        x1, y1, x2, y2, conf, landmarks = box
        face_crop = img[y1:y2, x1:x2]
        face_pil = Image.fromarray(cv2.cvtColor(face_crop, cv2.COLOR_BGR2RGB))
        input_tensor = transform(face_pil).unsqueeze(0)
        output = emotion_model(input_tensor)
        pred = torch.argmax(output, dim=1).item()
        emotion_label = emotions[pred]
        
        # 显示框和文字
        cv2.rectangle(img, (x1, y1), (x2, y2), (255,0,0), 2)
        cv2.putText(img, emotion_label, (x1, y1 - 10), cv2.FONT_HERSHEY_SIMPLEX, 0.8, (0,0,255), 2)
    
    cv2.imshow("Result", img)
    cv2.waitKey(0)
相关推荐
YOLO数据集集合5 小时前
外墙裂缝目标检测YOLO数据集:6,296张图像助力建筑病害智能识别| 外墙裂缝检测 YOLO数据集 建筑健康监测 无人机巡检 目标检测8030期
yolo·目标检测·无人机·建筑·外墙裂缝·建筑病害
richard_yuu7 小时前
Hopfield 网络:联想记忆的「鼻祖」,为什么它能「回忆」?
深度学习·神经网络·yolo·机器学习
炎龙铠甲会合体9 小时前
从 SPEC 到上板:在 Zynq-7020 上用 RTL 手写一个 YOLO 卷积加速器(完整教程)
yolo·fpga开发·axi·芯片验证
sali-tec1 天前
C# 基于OpenCv的视觉工作流-章110-YOLO 实例分割
图像处理·人工智能·opencv·算法·yolo·计算机视觉
richard_yuu2 天前
动态规划:强化学习的「数学基础」,从 MDP 到值迭代
深度学习·神经网络·算法·yolo·机器学习·动态规划
初学大模型2 天前
先剔后识:OpenCV三维预处理与YOLO语义检测协同的机器人视觉系统可行性分析
人工智能·opencv·yolo·计算机视觉·机器人
Python图像识别2 天前
18-【2027毕设】YOLO11烟雾检测识别系统 - Python完整源码+PyQt5界面+训练模型+数据集
python·深度学习·yolo·毕业设计·毕设
Python图像识别2 天前
17-【2027毕设】YOLO11水稻病害检测识别系统 - Python完整源码+PyQt5界面+训练模型+数据集
python·深度学习·yolo·毕业设计·毕设
YOLO数据集集合2 天前
睡岗检测数据集 | 睡岗检测 行为识别 岗位监督 安全管理9114期
深度学习·yolo·目标检测·数据集·安全管理·行为识别·睡岗检测
羊羊小栈9 天前
基于「YOLO目标检测 + 多模态AI分析」的水稻病害智能检测分析预警系统(LangChain框架)
人工智能·yolo·目标检测·毕业设计·创业创新·大作业