opencv人脸表情识别代码
时间: 2023-08-10 10:06:04 浏览: 67
以下是使用OpenCV进行人脸表情识别的示例代码:
```python
import cv2
# 加载分类器文件
face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')
eye_cascade = cv2.CascadeClassifier('haarcascade_eye.xml')
# 加载表情识别模型
model = cv2.face.createFisherFaceRecognizer()
model.load('emotion_detection_model.xml')
# 打开摄像头
cap = cv2.VideoCapture(0)
while True:
# 读取帧
ret, frame = cap.read()
# 转换为灰度图像
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
# 检测人脸
faces = face_cascade.detectMultiScale(gray, 1.3, 5)
# 对每个检测到的人脸进行处理
for (x,y,w,h) in faces:
# 画出矩形框
cv2.rectangle(frame,(x,y),(x+w,y+h),(255,0,0),2)
# 对每个人脸区域进行表情识别
roi_gray = gray[y:y+h, x:x+w]
roi_gray = cv2.resize(roi_gray, (48, 48), interpolation=cv2.INTER_AREA)
label = model.predict(roi_gray)[0]
# 根据表情标签输出表情文字
if label == 0:
cv2.putText(frame, 'Angry', (x, y-10), cv2.FONT_HERSHEY_SIMPLEX, 0.9, (255,0,0), 2)
elif label == 1:
cv2.putText(frame, 'Happy', (x, y-10), cv2.FONT_HERSHEY_SIMPLEX, 0.9, (0,255,0), 2)
elif label == 2:
cv2.putText(frame, 'Neutral', (x, y-10), cv2.FONT_HERSHEY_SIMPLEX, 0.9, (0,0,255), 2)
# 在眼睛区域画出圆形
roi_color = frame[y:y+h, x:x+w]
eyes = eye_cascade.detectMultiScale(roi_gray)
for (ex,ey,ew,eh) in eyes:
cv2.circle(roi_color, (ex+int(ew/2), ey+int(eh/2)), int(ew/3), (0, 255, 0), 2)
# 显示帧
cv2.imshow('Emotion Detection', frame)
# 按下q键退出
if cv2.waitKey(1) & 0xFF == ord('q'):
break
# 释放摄像头并关闭窗口
cap.release()
cv2.destroyAllWindows()
```
这个代码使用了OpenCV的哈尔级联分类器检测人脸和眼睛,并使用Fisher算法进行表情识别。注意,这只是一个示例代码,实际上在进行人脸表情识别时需要更复杂的模型和数据集。