You need to enable JavaScript to run this app. 如何修改实时情绪识别代码,实现单张静态图像情绪检测功能?
优惠活动
大模型
产品
解决方案
定价
更多

如何修改实时情绪识别代码,实现单张静态图像情绪检测功能?

问题解决方案

报错原因

  • cv2.VideoCapture 是OpenCV专门用于读取摄像头流、视频文件的接口,并不适用于读取单张静态图片。你传入图片路径后读取失败,ret返回False时frame不会是正常的图像数组,后续调用图像处理相关方法时就会触发属性不存在的报错。

可直接运行的修改后代码

from tensorflow.keras.preprocessing.image import img_to_array
import cv2
from tensorflow.keras.models import load_model
import numpy as np

# 模型路径参数
detection_model_path = 'haarcascade_files/haarcascade_frontalface_default.xml'
emotion_model_path = 'models/_mini_XCEPTION.102-0.66.hdf5'

# 加载模型
face_detection = cv2.CascadeClassifier(detection_model_path)
emotion_classifier = load_model(emotion_model_path, compile=False)
EMOTIONS = ["angry" ,"disgust","scared", "happy", "sad", "surprised","neutral"]

# 这里替换为你自己的本地图片绝对路径
img_path = 'FZKmwbkp.png'
# 直接读取静态图片
frame = cv2.imread(img_path)
if frame is None:
    print(f"错误:无法读取图片 {img_path},请检查路径是否正确")
    exit()

# 图像处理逻辑
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
faces = face_detection.detectMultiScale(gray,scaleFactor=1.1,minNeighbors=5,minSize=(30,30),flags=cv2.CASCADE_SCALE_IMAGE)

if len(faces) == 0:
    print("错误:未检测到图片中的人脸")
    exit()

# 取面积最大的人脸处理
faces = sorted(faces, reverse=True, key=lambda x: (x[2] - x[0]) * (x[3] - x[1]))[0]
(fX, fY, fW, fH) = faces
# 提取人脸ROI做预处理
roi = gray[fY:fY + fH, fX:fX + fW]
roi = cv2.resize(roi, (64, 64))
roi = roi.astype("float") / 255.0
roi = img_to_array(roi)
roi = np.expand_dims(roi, axis=0)

# 情绪预测
preds = emotion_classifier.predict(roi)[0]
emotion_probability = np.max(preds)
label = EMOTIONS[preds.argmax()]

# 命令行输出结果
print("="*30)
print(f"识别到的情绪:{label},置信度:{emotion_probability*100:.2f}%")
print("各情绪概率明细:")
for emotion, prob in zip(EMOTIONS, preds):
    print(f"- {emotion}: {prob*100:.2f}%")
print("="*30)

注意事项

  • 请把代码里的img_path替换为你本地图片的绝对路径,避免出现路径找不到的问题
  • 如果不需要显示各个情绪的明细,可自行删除对应打印逻辑

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.19 14:36:01