You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将自研深度学习情绪检测模型与Python实时屏幕捕获代码对接?

对接情绪检测模型与屏幕捕获代码的实现方案

核心流程

实时屏幕捕获 → 图像格式转换 → 人脸检测 → 人脸预处理 → 情绪预测 → 绘制标注结果

完整代码实现

import time
import cv2
import mss
import numpy as np

# ---------------------- 替换为你的模型相关配置 ----------------------
# 加载已训练的情绪检测模型(示例用Keras模型,根据你的模型框架调整)
# from keras.models import load_model
# emotion_model = load_model("your_emotion_model.h5")

# 情绪标签,和你的模型输出对应
EMOTION_LABELS = ["愤怒", "厌恶", "恐惧", "开心", "难过", "惊讶", "中性"]

# 人脸检测:使用OpenCV Haar级联(也可替换为DNN人脸检测器)
face_cascade = cv2.CascadeClassifier(cv2.data.haarcascades + "haarcascade_frontalface_default.xml")

# 模型输入要求(示例:48x48灰度图,根据你的模型调整)
MODEL_INPUT_SHAPE = (48, 48)
# -------------------------------------------------------------------

with mss.mss() as sct:
    monitor = {"top": 0, "left": 0, "width": 1000, "height": 1000}
    
    while True:
        # 捕获屏幕帧
        img = np.array(sct.grab(monitor))
        # 转换颜色空间:BGRA → BGR(OpenCV兼容格式)
        frame = cv2.cvtColor(img, cv2.COLOR_BGRA2BGR)
        # 转灰度图(用于人脸检测和部分情绪模型输入)
        gray_frame = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)

        # 检测人脸
        faces = face_cascade.detectMultiScale(gray_frame, scaleFactor=1.1, minNeighbors=5, minSize=(30, 30))

        # 遍历检测到的人脸
        for (x, y, w, h) in faces:
            # 裁剪人脸区域
            face_roi = gray_frame[y:y+h, x:x+w]
            # 预处理人脸:调整尺寸、归一化(根据你的模型要求修改)
            face_roi = cv2.resize(face_roi, MODEL_INPUT_SHAPE)
            face_roi = face_roi / 255.0
            face_roi = np.expand_dims(face_roi, axis=0)
            face_roi = np.expand_dims(face_roi, axis=-1)  # 若模型需要通道维度

            # 情绪预测(替换为你的模型推理代码)
            # emotion_preds = emotion_model.predict(face_roi)[0]
            # emotion_idx = np.argmax(emotion_preds)
            # emotion_label = EMOTION_LABELS[emotion_idx]
            # 测试用:暂时用随机标签替代
            emotion_label = np.random.choice(EMOTION_LABELS)

            # 在画面上绘制人脸框和情绪标签
            cv2.rectangle(frame, (x, y), (x+w, y+h), (0, 255, 0), 2)
            cv2.putText(frame, emotion_label, (x, y-10), cv2.FONT_HERSHEY_SIMPLEX, 0.9, (0, 255, 0), 2)

        # 显示处理后的画面
        cv2.imshow("会议情绪检测", frame)

        # 按q退出
        if cv2.waitKey(25) & 0xFF == ord("q"):
            cv2.destroyAllWindows()
            break

关键部分说明

  • 图像格式转换:mss捕获的图像是BGRA格式,必须转成OpenCV常用的BGR格式才能正常处理。
  • 人脸检测:示例用OpenCV自带的Haar级联,若需要更高精度,可替换为DNN人脸检测器(cv2.dnn.readNetFromCaffe)。
  • 模型对接:
    1. 替换模型加载代码(比如你的模型是PyTorch的,就用torch.load加载)。
    2. 根据你的模型输入要求调整预处理步骤(比如是否需要RGB图、归一化方式、输入尺寸等)。
    3. 替换情绪预测的推理代码,确保输出对应情绪标签。
  • 标注绘制:用cv2.rectangle画人脸框,cv2.putText标注情绪文本,可自行调整颜色、字体等参数。

内容的提问来源于stack exchange,提问作者Anim

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 22:46:02