人脸检测识别-python库包or开源项目(仅CPU)

本文介绍几种基于Python的人脸检测与识别技术,包括dlib、face_recognition等库的使用方法,并提供Windows环境下安装指导及代码示例。

目录

0. 前提

1. 人脸的python库包or开源项目

2. windows上安装教程

3. 样例代码


0. 前提

        不是所有人都有GPU,因此这篇文章探索的是笔记本CPU就可以inference的程序;而且鉴于很多人对C++不是很熟悉(比如我),所以这里均为python入门!

        你可以拿这个练手,即时效果很好。

1. 人脸的python库包or开源项目

        [1] dlib 可以采用GPU,但是默认关闭,博主暂时没有免费的显卡用

        [2] face_recognition  此项目基于dlib实现,但是dlib自己也可实现;API文档

        [3] libfacedetection 可以基于opencv-python-DNN实现,Link

        TODO

2. windows上安装教程

        在linux上均容易安装,但是windows下不易。

        环境: windows、python3.8

        pip install dlib-19.19.0-cp38-cp38-win_amd64.whl

        pip install face_recognition

        pip install opencv-python

        dlib百度云链接 提取码:1sk6

3. 样例代码

        

import cv2
import numpy as np
import torch
import time
'''
    目标检测(AI)-yolov5
'''

# model = torch.hub.load('ultralytics/yolov5', 'yolov5s', pretrained=True)
# # img = r"E:\Python_Code\test\test.jpg"
# # results = model(img)
# # print(results.pandas().xyxy[0]["class"])
# # results.show()
# cap = cv2.VideoCapture(700)
# num = 0
# while True:
#     if num % 2 != 0:
#         continue
#     ret, img = cap.read()
#     if ret:
#         results = model(img)
#         results_pandas = results.pandas().xyxy[0]  # 只有1张图像
#         # 筛选数据,逻辑判断
#         results_person = results_pandas[results_pandas["class"]==0]
#         results_person_ = results_person.to_numpy()
#         # 遍历画框
#         rows = results_person_.shape[0]
#         for i in range(rows):
#             x1 = int(results_person_[i][0])
#             y1 = int(results_person_[i][1])
#             x2 = int(results_person_[i][2])
#             y2 = int(results_person_[i][3])

#             cv2.rectangle(img, (x1,y1), (x2,y2), (0,0,255), 2)
#         cv2.imshow("img", img)
#         if cv2.waitKey(1) & 0xFF == ord('q'):
#             break


'''
    人脸检测(opencv-python)
'''
# face_cascade = cv2.CascadeClassifier("D:\Anaconda3\Lib\site-packages\cv2\data\haarcascade_frontalface_default.xml")
# eye_cascade = cv2.CascadeClassifier("D:\Anaconda3\Lib\site-packages\cv2\data\haarcascade_eye.xml")
# cap = cv2.VideoCapture(700)// 笔记本的可能为0 或 700

# while True:
#     ret, img = cap.read()
#     if ret:
#         gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
#         faces = face_cascade.detectMultiScale(gray,1.1,5)
#         if len(faces)>0:
#             for faceRect in faces:
#                 x, y, w, h = faceRect
#                 cv2.rectangle(img, (x,y), (x+w,y+h), (255,0,0), 2)
#                 roi_gray = gray[y:y+h//2, x:x+w]
#                 roi_color = img[y:y+h//2, x:x+w]
#                 eyes = eye_cascade.detectMultiScale(roi_gray, 1.1, 1, cv2.CASCADE_SCALE_IMAGE, (2,2))
#                 for (ex,ey,ew,eh) in eyes:
#                     cv2.rectangle(roi_color, (ex,ey), (ex+ew,ey+eh), (0,255,0), 2)
#         cv2.imshow("img",img)
#         if cv2.waitKey(1) & 0xFF == ord('q'):
#             break


'''
    dlib人脸检测
'''
# import dlib
# detector = dlib.get_frontal_face_detector()

# cap = cv2.VideoCapture(700)
# while True:
#     ret, img = cap.read()
#     if ret:
#         dets = detector(img, 1) 
#         for i, d in enumerate(dets):
#             cv2.rectangle(img, (d.left()-10,d.top()-10), (d.right()+10,d.bottom()+10), (0,0,255), 4)
#         print(img)
#         cv2.imshow("img",img)
#         if cv2.waitKey(1) & 0xFF == ord('q'):
#             break


# import sys
# import dlib
# from skimage import io
 
# detector = dlib.get_frontal_face_detector()
# window = dlib.image_window() 
# img = cv2.imread(r"D:\20191215155844414.png")
 
# dets = detector(img, 1) 
# print("Number of faces detected: {}".format(len(dets)))
# for i, d in enumerate(dets):
#     print("Detection {}: Left: {} Top: {} Right: {} Bottom: {}".format(i, d.left(), d.top(), d.right(), d.bottom()))
 
# window.clear_overlay()
# window.set_image(img)
# window.add_overlay(dets)
# dlib.hit_enter_to_continue()


'''
    基于dlib的 face_recognition 人脸检测识别
'''
import face_recognition
import cv2
import numpy as np

# This is a demo of running face recognition on live video from your webcam. It's a little more complicated than the
# other example, but it includes some basic performance tweaks to make things run a lot faster:
#   1. Process each video frame at 1/4 resolution (though still display it at full resolution)
#   2. Only detect faces in every other frame of video.

# PLEASE NOTE: This example requires OpenCV (the `cv2` library) to be installed only to read from your webcam.
# OpenCV is *not* required to use the face_recognition library. It's only required if you want to run this
# specific demo. If you have trouble installing it, try any of the other demos that don't require it instead.

# Get a reference to webcam #0 (the default one)
video_capture = cv2.VideoCapture(700)

# Load a sample picture and learn how to recognize it.
obama_image = face_recognition.load_image_file("leilei.jpg")
obama_face_encoding = face_recognition.face_encodings(obama_image)[0]

# Load a second sample picture and learn how to recognize it.
biden_image = face_recognition.load_image_file("leilei1.jpg")
biden_face_encoding = face_recognition.face_encodings(biden_image)[0]

# Create arrays of known face encodings and their names
known_face_encodings = [
    obama_face_encoding,
    biden_face_encoding
]
known_face_names = [
    "LeiLei",
    "LeiLei1"
]

# Initialize some variables
face_locations = []
face_encodings = []
face_names = []
process_this_frame = True

downsample_ratio = 0.5
upsample_ratio = 1/downsample_ratio

while True:
    # Grab a single frame of video
    ret, frame = video_capture.read()

    # Resize frame of video to 1/4 size for faster face recognition processing
    small_frame = cv2.resize(frame, (0, 0), fx=downsample_ratio, fy=downsample_ratio)

    # Convert the image from BGR color (which OpenCV uses) to RGB color (which face_recognition uses)
    rgb_small_frame = small_frame[:, :, ::-1]

    # Only process every other frame of video to save time
    if process_this_frame:
        # Find all the faces and face encodings in the current frame of video
        face_locations = face_recognition.face_locations(rgb_small_frame) # model="cnn" 默认hog更快 
        face_encodings = face_recognition.face_encodings(rgb_small_frame, face_locations)

        face_names = []
        for face_encoding in face_encodings:
            # See if the face is a match for the known face(s)
            matches = face_recognition.compare_faces(known_face_encodings, face_encoding)
            name = "Unknown"

            # # If a match was found in known_face_encodings, just use the first one.
            # if True in matches:
            #     first_match_index = matches.index(True)
            #     name = known_face_names[first_match_index]

            # Or instead, use the known face with the smallest distance to the new face
            face_distances = face_recognition.face_distance(known_face_encodings, face_encoding)
            best_match_index = np.argmin(face_distances)
            if matches[best_match_index]:
                name = known_face_names[best_match_index]

            face_names.append(name)

    process_this_frame = not process_this_frame


    # Display the results
    for (top, right, bottom, left), name in zip(face_locations, face_names):
        # Scale back up face locations since the frame we detected in was scaled to 1/4 size
        top *= upsample_ratio
        right *= upsample_ratio
        bottom *= upsample_ratio
        left *= upsample_ratio

        top = int(top)
        right = int(right)
        bottom = int(bottom)
        left = int(left)

        # Draw a box around the face
        cv2.rectangle(frame, (left, top), (right, bottom), (0, 0, 255), 2)

        # Draw a label with a name below the face
        cv2.rectangle(frame, (left, bottom - 35), (right, bottom), (0, 0, 255), cv2.FILLED)
        font = cv2.FONT_HERSHEY_DUPLEX
        cv2.putText(frame, name, (left + 6, bottom - 6), font, 1.0, (255, 255, 255), 1)

    # Display the resulting image
    cv2.imshow('Video', frame)

    # Hit 'q' on the keyboard to quit!
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

# Release handle to the webcam
video_capture.release()
cv2.destroyAllWindows()

现在我们这个项目的方向确定为电子眼通过对情绪识别进而做出反应,实现眼神的灵动性。改善方面在眼睛里面装一个类似摄像头的东西,接入deepseek这种的ai大数据模型,通过识别观测,实现一些简单交互,实现语言沟通、陪伴老人、健康监测等方面的功能 这个眼睛和开源恶魔之眼累似,我们严把它从零开始慢慢搭建出来! — 1,先做一个眼睛模型,就和我们在视频里看到的累似 2,在眼睛后面要加上几个高清摄像头,进行数据的采集 3,数据采集之后,两条路,第一条上传云端,第二个用简单的嵌入式系统直接跑数据(本地) 4,结合相应的开源情绪识别,对情绪进行识别 5,同时眼睛实现相应的交互 ——— 二 6,加上语音的输入和输出 语音识别(ASR):使用开源工具(如DeepSpeech、Whisper)或云服务(如百度语音识别、阿里云语音识别)。 语音合成(TTS):使用开源(如Tacotron2、FastSpeech2)或云服务(如讯飞语音合成)。 对话管理:使用DeepSeek等大模型生成回复,实现自然对话。 ——— 三 8,实现视觉和语音上的同步处理 以上是我设想的基本流程,接下来就是一步一步落地,或者是多线并行 开发流程 阶段1:搭建硬件原型(4-6周) 阶段2:训练情绪识别模型(8-12周) 阶段3:集成多模态交互系统(6-8周) 阶段4:部署与优化(4周) 这是我想的流程,你帮我落实到每一步,每种材料怎么选,选哪种材料,落实到每一步,每一个必须的技术!先搭建出来基本的模型,掌握核心的技术
最新发布
07-08
<think>我们正在构建一个具备情绪识别和交互功能的电子眼系统,目标括实现眼神灵动、语言沟通、陪伴老人、健康监测等功能。下面我将从零开始详细说明开发步骤,括硬件选型、摄像头集成、情绪识别模型训练、多模态交互系统开发、语音识别与合成、对话管理等。 ### 一、总体开发步骤 1. **需求分析与系统设计(1-2周)** - 明确功能需求:实时情绪识别、语音交互、健康监测(如跌倒检测、心率估计)、眼神动画表达。 - 系统架构设计:采用分层架构,括硬件层、嵌入式AI层、云服务层(可选)。 - 确定交互流程:用户出现→情绪识别→生成对应眼神动画+语音反馈→健康异常报警。 2. **硬件选型与集成(4-6周)** 3. **软件模块开发(14-20周)** - 情绪识别模型训练 - 多模态交互系统开发 - 健康监测算法实现 4. **系统联调与优化(4-6周)** ### 二、详细实现方案 #### 1. 硬件选型与集成 | 组件类型 | 推荐型号/规格 | 说明 | |----------------|------------------------------|----------------------------------------------------------------------| | **主控制器** | NVIDIA Jetson Orin Nano | 40 TOPS算力,支持多路摄像头输入,功耗15W,适合嵌入式部署[^1] | | **摄像头** | Intel RealSense D455 | RGB-D摄像头(深度+彩色),支持90°视野,用于人脸检测与距离感知[^2] | | **麦克风阵列** | ReSpeaker 4-Mic Linear Array | 4麦克风线性阵列,支持波束成形,有效距离3米 | | **显示屏** | 1.3英寸OLED圆形屏 | 240×240分辨率,用于模拟眼球运动 | | **生理传感器** | MAX30102+MPU6050 | MAX30102用于非接触心率/血氧监测,MPU6050用于姿态检测(跌倒判断) | | **外壳结构** | 3D打印定制 | 仿人眼结构,内部留出摄像头和传感器空间 | **硬件集成要点**: - 摄像头安装在“瞳孔”位置,透过半透膜显示 - 麦克风阵列围绕摄像头布置 - 主控板置于后方散热区 - 通过I2C/SPI接口连接传感器 #### 2. 情绪识别模型开发 **步骤**: 1. **数据收集**: - 使用公开数据集:FER-2013(48×48灰度表情图)、AffectNet(100万张带标注图像) - 补充采集:在老年人活动中心收集特定场景数据(需伦理审查) 2. **模型选择与训练**: ```mermaid graph TD A[输入图像] --> B[数据增强] B --> C[ResNet-50主干网络] C --> D[时空特征提取] D --> E[全连接层] E --> F[7类情绪输出] ``` - **关键技术**: - 数据增强:随机裁剪、光照调整、遮挡模拟(口罩、眼镜) - 网络结构:采用ResNet-50+时序卷积网络(TCN),处理视频流时序特征 - 损失函数:带权重的交叉熵损失,解决样本不均衡问题 $$ \mathcal{L} = -\sum_{i=1}^C w_i y_i \log(\hat{y}_i) $$ 其中$w_i$为类别权重,$C=7$为情绪类别数 - 准确率:在验证集上达到85%以上 3. **模型优化**: - 量化:使用TensorRT将FP32模型转为INT8,速度提升3倍 - 剪枝:移除小于0.001的权重,模型大小减少40% #### 3. 多模态交互系统 **语音交互流程**: ```mermaid sequenceDiagram participant 用户 participant 麦克风 participant ASR participant NLP引擎 participant TTS participant 显示屏 用户->>麦克风: 语音输入 麦克风->>ASR: 音频流 ASR->>NLP引擎: 转换文本 NLP引擎->>NLP引擎: 情感分析+意图识别 NLP引擎->>TTS: 生成情感化语音 TTS->>用户: 语音输出 NLP引擎->>显示屏: 生成对应眼神动画 ``` **关键技术实现**: - **语音识别(ASR)**: - 选用轻量级模型:Wav2Vec 2.0 Base,在Jetson上推理时间<300ms - 优化:使用NVIDIA TensorRT加速,延迟降低60% - **自然语言处理(NLP)**: - 意图识别:基于BERT微调的分类模型 - 示例意图:{问候, 求助, 健康询问, 闲聊} - 对话管理:有限状态机(FSM)管理交互流程 ```python class DialogueState: STATES = ['IDLE', 'GREETING', 'HEALTH_CHECK', 'ALERT'] def __init__(self): self.current = 'IDLE' def transition(self, intent): if self.current == 'IDLE' and intent == 'GREET': self.current = 'GREETING' elif intent == 'HELP': self.current = 'ALERT' # 其他状态转移规则 ``` - **语音合成(TTS)**: - 选用Edge-TTS(基于FastSpeech2),支持情感语调调整 - 添加老年人友好特性:语速降低30%,音量提高20% - **眼神动画生成**: - 建立情绪-动画映射表: | 情绪类型 | 瞳孔大小 | 眨眼频率 | 眼球运动 | |----------|----------|----------|----------| | 高兴 | 扩大10% | 正常 | 快速转动 | | 悲伤 | 缩小15% | 减少 | 向下凝视 | | 惊讶 | 扩大20% | 停止 | 固定注视 | - 实现方法:通过OpenGL ES渲染实时眼球动画 #### 4. 健康监测模块 1. **跌倒检测**: - 使用MPU6050获取加速度数据 - 算法:基于SVM的跌倒识别 $$ \text{特征向量} = [\Delta a_x, \Delta a_y, \Delta a_z, \|a\|_2] $$ - 当$\|a\|_2 > 2g$且姿态角变化>45°时触发报警 2. **生理参数监测**: - 心率检测:使用rPPG(远程光电容积描记法) $$ \text{心率} = \frac{60 \times f_s \times N}{\sum_{k=1}^N \delta_k} $$ 其中$f_s$为采样率,$\delta_k$为峰值间隔 - 验证方法:与医疗级指夹式血氧仪对比,误差<5bpm ### 三、开发进度安排 | 阶段 | 时间 | 主要任务 | |--------------|--------|----------------------------------------------| | 硬件原型 | 1-6周 | 3D打印外壳,电路连接,传感器校准 | | 基础软件框架 | 7-10周 | 嵌入式Linux系统搭建,摄像头驱动开发 | | 核心算法 | 11-20周| 情绪模型训练,语音模块集成,健康算法实现 | | 系统联调 | 21-24周| 整体功能测试,延迟优化(目标<500ms响应) | | 用户测试 | 25-26周| 招募老年志愿者进行场景测试 | ### 四、关键挑战与解决方案 1. **实时性挑战**: - 问题:多模型并行导致延迟超标 - 方案:采用流水线处理架构 ```mermaid graph LR A[视频帧] --> B{情绪分析} C[音频流] --> D{语音识别} B & D --> E[决策引擎] ``` 2. **隐私保护**: - 实现技术: - 本地数据处理:敏感信息不出设备 - 匿名化处理:人脸特征提取后立即删除原图 - 符合GDPR:提供数据删除接口 3. **老年人适配**: - 交互优化: - 增加触觉反馈(震动提示) - 简化语音指令(预设10条高频命令) - 大字体界面(供护理人员查看数据) ### 五、示例代码片段 ```python # 情绪识别+语音响应联动示例 import jetson.inference import edge_tts class EmotionInteraction: def __init__(self): self.net = jetson.inference.actionNet('resnet50.onnx') self.tts = edge_tts.Communicate() def process_frame(self, frame): # 情绪识别 emotion_id = self.net.Classify(frame) # 根据情绪生成语音 if emotion_id == 0: # 高兴 self.tts.say("您看起来心情不错,有什么开心的事吗?", emotion='happy') self.eyes.set_animation('blink_fast') elif emotion_id == 1: # 悲伤 self.tts.say("您需要我陪您聊聊吗?", emotion='gentle') self.eyes.set_animation('look_down') # 主循环 while True: frame = camera.capture() interaction.process_frame(frame) ``` ### 六、伦理与安全考虑 1. **用户知情权**:明确告知数据用途,签署同意书 2. **故障应急**:紧急情况切换至人工客服通道 3. **技术可靠性**:关键功能(如跌倒报警)设置冗余验证 [^1]: Jetson Orin性能白皮书,NVIDIA 2023 [^2]: RealSense D455技术规格,Intel 2022 §§相关问题§§ 1. 如何解决摄像头在弱光环境下情绪识别失效的问题? 2. 非接触式心率检测的精度如何提升? 3. 如何设计适合老年人的语音交互对话策略?</think>### 从零搭建情绪识别电子眼系统开发方案 #### 一、硬件选型与集成(4-6周) 1. **核心组件选型** | 组件 | 推荐型号 | 关键参数 | 成本 | |------|----------|----------|------| | 主控芯片 | NVIDIA Jetson Orin Nano | 40 TOPS算力,8GB RAM | $499 | | 视觉传感器 | Intel RealSense D455 | RGB-D摄像头,90° FOV | $299 | | 麦克风阵列 | ReSpeaker 4-Mic Array | 360°拾音,SNR > 60dB | $39 | | 显示模块 | 1.3英寸OLED圆形屏 | 240×240分辨率 | $25 | | 生理传感器 | MAX30102 + MPU6050 | 心率/血氧/运动检测 | $8 | 2. **硬件集成方案** ```mermaid graph LR A[摄像头] --> B[主控芯片] C[麦克风] --> B D[传感器] --> B B --> E[OLED显示屏] B --> F[云服务] ``` 3. **机械结构设计** - 3D打印仿生眼结构(直径40mm) - 摄像头置于"瞳孔"位置 - 环形麦克风阵列围绕摄像头 - 散热方案:铜基散热片+微型风扇 #### 二、情绪识别模型开发(8-10周) 1. **数据处理流程** - 数据集:FER-2013 + AffectNet + 自采集老年人表情数据集 - 预处理: $$ \text{faceROI} = \text{crop}(\text{frame}, \text{landmarks}_{68}) $$ $$ \text{normImg} = \frac{\text{faceROI} - \mu}{\sigma} $$ 2. **模型架构优化** ```python # PyTorch模型示例 class EmotionNet(nn.Module): def __init__(self): super().__init__() self.backbone = EfficientNetV2_S() self.temporal = nn.LSTM(1280, 256, batch_first=True) self.head = nn.Sequential( nn.Linear(256, 128), nn.ReLU(), nn.Linear(128, 7) # 7种情绪 ) def forward(self, x_seq): features = [self.backbone(frame) for frame in x_seq] temporal, _ = self.temporal(torch.stack(features)) return self.head(temporal[:, -1]) ``` 3. **模型训练策略** - 损失函数:加权交叉熵 $$ \mathcal{L} = -\sum_{i=1}^7 w_i y_i \log(\hat{y}_i) $$ - 数据增强:随机遮挡、光照变化、高斯噪声 - 量化部署:TensorRT FP16优化,推理速度<50ms #### 三、多模态交互系统(6-8周) 1. **语音处理流水线** ```mermaid sequenceDiagram participant M as 麦克风 participant A as ASR participant N as NLP participant T as TTS M->>A: 音频流 A->>N: "今天心情怎么样?" N->>N: 情绪分析+意图识别 N->>T: "您看起来很开心!" T->>M: 合成语音输出 ``` 2. **关键技术实现** - **语音识别**:Wav2Vec 2.0量化版,词错率<8% - **对话管理**:有限状态机(FSM)架构 ```python class DialogueManager: STATES = ['IDLE', 'ACTIVE', 'ALERT'] def handle_input(self, text, emotion): if emotion == 'sad' and 'lonely' in text: self.state = 'ALERT' return "需要联系您家人吗?" # ...其他状态转移 ``` - **语音合成**:FastSpeech2 + HiFi-GAN,添加情感韵律 $$ f_{\text{pitch}} = \alpha \cdot \text{emotion\_intensity} $$ 3. **眼神动画引擎** | 情绪状态 | 瞳孔大小 | 眨眼频率 | 运动模式 | |----------|----------|----------|----------| | 高兴 | 扩大15% | 0.5Hz | 快速扫视 | | 悲伤 | 缩小20% | 0.2Hz | 向下凝视 | | 惊讶 | 扩大30% | 暂停 | 固定注视 | #### 四、健康监测模块(4-6周) 1. **跌倒检测算法** - 特征提取: $$ \mathbf{a} = [a_x, a_y, a_z], \quad \theta = \cos^{-1}\left(\frac{a_z}{\|\mathbf{a}\|}\right) $$ - 决策规则: $$ \text{if } \|\mathbf{a}\| > 2g \ \text{AND} \ \theta > 60^\circ \ \text{then ALERT} $$ 2. **非接触生理监测** - rPPG心率检测: $$ \text{HR} = \frac{60 \times f_s}{N} \sum_{k=1}^N \Delta t_k $$ - 精度验证:与医疗设备对比,误差<5bpm #### 五、系统集成与优化(4周) 1. **软件架构** ```mermaid graph TB S[传感器数据] --> P1[视觉处理] S --> P2[音频处理] P1 --> F[情绪识别] P2 --> F F --> DM[决策引擎] DM --> A1[语音反馈] DM --> A2[眼神动画] DM --> A3[健康警报] ``` 2. **性能优化** - 多线程调度:摄像头/音频/传感器独立线程 - 功耗控制:动态频率调整(DVFS) $$ f_{\text{CPU}} = \begin{cases} 1.5\text{GHz} & \text{active} \\ 200\text{MHz} & \text{idle} \end{cases} $$ - 内存优化:TensorRT引擎共享权重 #### 六、测试验证方案 1. **测试指标** | 模块 | 指标 | 目标值 | |------|------|--------| | 情绪识别 | 准确率 | >83% | | 语音交互 | 响应延迟 | <500ms | | 跌倒检测 | 召回率 | >95% | | 系统续航 | 待机时间 | >48h | 2. **用户测试场景** - 日常陪伴对话(100+对话轮次) - 情绪突变响应测试 - 模拟跌倒事件验证 - 弱光环境适应性 #### 七、伦理与隐私保护 1. **数据安全设计** - 端侧处理:敏感数据不出设备 - 加密存储:AES-256加密健康数据 - 动态脱敏:实时人脸匿名化 $$ \text{pixel}_{\text{anon}} = \mathcal{G}_{\sigma=3.0}(\text{faceROI}) $$ 2. **合规性措施** - 用户授权机制(双因素认证) - 数据留存策略(自动7天删除) - 符合HIPAA医疗数据规范 [^1]: Jetson Orin性能白皮书, NVIDIA 2023 [^2]: 多模态情绪识别综述, IEEE TPAMI 2022
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值