如何将自研深度学习情绪检测模型与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)。
- 模型对接:
- 替换模型加载代码(比如你的模型是PyTorch的,就用torch.load加载)。
- 根据你的模型输入要求调整预处理步骤(比如是否需要RGB图、归一化方式、输入尺寸等)。
- 替换情绪预测的推理代码,确保输出对应情绪标签。
- 标注绘制:用
cv2.rectangle画人脸框,cv2.putText标注情绪文本,可自行调整颜色、字体等参数。
内容的提问来源于stack exchange,提问作者Anim
相关产品推荐
相关产品推荐

