如何记录/导出模型检测到的情绪?
Posted
技术标签:
【中文标题】如何记录/导出模型检测到的情绪?【英文标题】:How to record/export the emotions detected by a model? 【发布时间】:2021-11-25 21:04:09 【问题描述】:如何在下面的代码中记录/导出模型分类的情绪?
我的意思是,如果这个模型用于在线会议,我如何可视化检测到的情绪并看到最主要的情绪?
例如,我想生成某种会议报告/分析。
谢谢!
这里是视频捕捉/情感展示部分的代码:
cap = cv2.VideoCapture(0)
if args["isVideoWriter"] == True:
fourrcc = cv2.VideoWriter_fourcc("M", "J", "P", "G")
capWidth = int(cap.get(3))
capHeight = int(cap.get(4))
videoWrite = cv2.VideoWriter("output.avi", fourrcc, 22,
(capWidth, capHeight))
while True:
ret, frame = cap.read()
frame = cv2.resize(frame, (720, 480))
if not ret:
break
grayFrame = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
rects = detector(grayFrame, 0)
for rect in rects:
shape = predictor(grayFrame, rect)
points = shapePoints(shape)
(x, y, w, h) = rectPoints(rect)
grayFace = grayFrame[y:y + h, x:x + w]
try:
grayFace = cv2.resize(grayFace, (emotionTargetSize))
except:
continue
grayFace = grayFace.astype('float32')
grayFace = grayFace / 255.0
grayFace = (grayFace - 0.5) * 2.0
grayFace = np.expand_dims(grayFace, 0)
grayFace = np.expand_dims(grayFace, -1)
emotion_prediction = emotionClassifier.predict(grayFace)
emotion_probability = np.max(emotion_prediction)
if (emotion_probability > 0.36):
emotion_label_arg = np.argmax(emotion_prediction)
color = emotions[emotion_label_arg]['color']
cv2.rectangle(frame, (x, y), (x + w, y + h), color, 2)
cv2.line(frame, (x, y + h), (x + 20, y + h + 20),
color,
thickness=2)
cv2.rectangle(frame, (x + 20, y + h + 20), (x + 110, y + h + 40),
color, -1)
cv2.putText(frame, emotions[emotion_label_arg]['emotion'],
(x + 25, y + h + 36), cv2.FONT_HERSHEY_SIMPLEX, 0.5,
(255, 255, 255), 1, cv2.LINE_AA)
else:
color = (255, 255, 255)
cv2.rectangle(frame, (x, y), (x + w, y + h), color, 2)
if args["isVideoWriter"] == True:
videoWrite.write(frame)
cv2.imshow("Emotion Recognition", frame)
k = cv2.waitKey(1) & 0xFF
if k == 27:
break
cap.release()
if args["isVideoWriter"] == True:
videoWrite.release()
cv2.destroyAllWindows()
【问题讨论】:
专注于一个问题/问题。从帖子中删除其余部分并将它们建模为单独的问题......并在提问之前进行研究,因为其中一些可能已经有了答案 好的。会做!谢谢 您在寻找什么类型的“报告”?你似乎已经知道你可以在frame
(矩形、文本……)上画画。您可以收集 emotion_label_arg
的所有值并计算简单的统计数据(直方图和最常见的值,...)。这种数学是由 numpy 提供的,如果不是由 python 本身提供的话。
【参考方案1】:
您好,您可以通过以下方式实现您的代码。 注意:我没有检查此代码,因此您可以更改和调试并使用它
import datetime, time
import cv2
FPS = 5.0 # Change Frames Per Second
os.makedirs('./clips', exist_ok=True) # Make Dir For Store Videos
camera = cv2.VideoCapture(0)
camera.set(cv2.CAP_PROP_FOURCC, cv2.VideoWriter_fourcc('M', 'J', 'P', 'G')) # depends on fourcc available camera
camera.set(cv2.CAP_PROP_FRAME_WIDTH, 640) # Frame Width
camera.set(cv2.CAP_PROP_FRAME_HEIGHT, 480) # Frame Height
camera.set(cv2.CAP_PROP_FPS, FPS)
frame_width = int(camera.get(3))
frame_height = int(camera.get(4))
size = (frame_width, frame_height)
while True:
global FPS
img = camera.get_frame()
### your code
## when Imotion detect rec = True
if rec:
now = datetime.datetime.now()
filename = "vid_.mp4".format(str(now).replace(":", ''))
path = os.path.sep.join(['clips', filename])
fourcc = cv2.VideoWriter_fourcc(*'FMP4')
out = cv2.VideoWriter(path, fourcc, FPS, size)
img= cv2.putText(img,"Recording...", (0,25), cv2.FONT_HERSHEY_SIMPLEX, 1, (0,0,255),4)
out.write(img)
time.sleep(1/FPS) # 1s / 25fps = 0.04 # it needs some time for code.
else:
## other code
【讨论】:
这个答案有多个问题。忽略语法错误,此代码将创建一个包含一帧的视频文件,仅此而已。这个问题不出现在问题中,所以这个答案实际上使情况变得更糟。此外,它甚至没有解决这个问题。我很困惑这个答案是如何得到任何支持的。以上是关于如何记录/导出模型检测到的情绪?的主要内容,如果未能解决你的问题,请参考以下文章
从 Tensorflow 对象检测 API 动物园模型导出错误的冻结图