如何记录/导出模型检测到的情绪?

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

【讨论】:

这个答案有多个问题。忽略语法错误,此代码将创建一个包含一帧的视频文件,仅此而已。这个问题出现在问题中,所以这个答案实际上使情况变得更糟。此外,它甚至没有解决这个问题。我很困惑这个答案是如何得到任何支持的。

以上是关于如何记录/导出模型检测到的情绪?的主要内容,如果未能解决你的问题,请参考以下文章

如何导出 Windows 计划任务历史记录

从 Tensorflow 对象检测 API 动物园模型导出错误的冻结图

navicat for MySQL怎么导出SQL脚本

java如何将查询到的表中数据导出到excel中(包含字段名)

如何导出服务工作者中事件接收到的数据以响应组件

生产与学术之Pytorch模型导出为安卓Apk尝试记录