python人脸情绪识别
时间: 2023-06-15 15:07:27 浏览: 221
基于python语言实现的人脸情感识别
Python可以使用OpenCV和Dlib等库实现人脸情绪识别。以下是一个使用OpenCV和Keras库实现人脸情绪识别的示例代码:
```python
import cv2
from keras.models import load_model
import numpy as np
# 加载人脸检测器和情绪识别模型
face_classifier = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')
emotion_classifier = load_model('emotion_model.h5')
# 定义情绪标签
emotion_labels = ['Angry', 'Disgust', 'Fear', 'Happy', 'Sad', 'Surprise', 'Neutral']
# 使用摄像头捕获视频
cap = cv2.VideoCapture(0)
while True:
# 读取视频帧
ret, frame = cap.read()
# 转换为灰度图像
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
# 检测人脸
faces = face_classifier.detectMultiScale(gray, scaleFactor=1.1, minNeighbors=5, minSize=(30, 30))
# 对每个人脸进行情绪识别
for (x, y, w, h) in faces:
# 提取人脸图像
face_image = gray[y:y+h, x:x+w]
# 缩放图像大小
face_image = cv2.resize(face_image, (48, 48))
# 归一化像素值
face_image = face_image / 255.0
# 转换为4D张量
face_image = np.expand_dims(face_image, axis=0)
face_image = np.expand_dims(face_image, axis=-1)
# 进行情绪识别
emotion_prediction = emotion_classifier.predict(face_image)[0]
# 获取最大概率所对应的情绪标签
emotion_label = emotion_labels[np.argmax(emotion_prediction)]
# 在视频帧上绘制人脸和情绪标签
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('Emotion Detection', frame)
# 按下q键退出循环
if cv2.waitKey(1) & 0xFF == ord('q'):
break
# 释放摄像头并关闭窗口
cap.release()
cv2.destroyAllWindows()
```
注意,以上代码需要使用预先训练好的情绪识别模型,可以在网上下载现成的模型文件(如本例中的emotion_model.h5),也可以自己训练模型。
阅读全文