APP下载

基于Android的多模态情感识别APP的设计与开发

2023-05-15张明嘉黄丁韫杨超宇蒋玉茹

现代计算机 2023年5期
关键词:服务端音频模态

张明嘉,黄丁韫,赵 凯,杨超宇,蒋玉茹

(北京信息科技大学计算机学院,北京 100000)

0 引言

随着信息技术快速、爆发式的增长,人工智能成为当今研究越来越热门的话题。在各个领域,人工智能逐渐成为重要的研究方法。我国十四五计划提出要建设具有国际前瞻性的人工智能应用方法,人工智能迎来新的发展机遇[1],其中情感识别是一个重要的热点问题。

目前已经存在的多款情感识别软件,普遍是进行单模态的情感识别,即能够根据一个模态(语音、文字或图片)的信息来进行情感的识别。其优势就是在单一的模态下,能够精准地识别图片、音频或者文本中的情感。例如:百度的对话情绪识别系统能够自动检测用户日常对话文本中蕴含的情感特征,能够帮助企业更全面地把握产品体验、监控客户服务质量。而Affectiva 公司的Automotive AI解决方案能够通过视频(图片)实时监控驾驶员的情感状态,当其出现焦虑、嗜睡或易怒等状态时,令自动驾驶功能接管汽车操控权。这些案例是单模态的情感识别模型根据图片、音频或者文本的单模态信息识别出人物的情感,但如果能同时捕获多种模态信息,训练多模态情感识别模型,则能更好地预测人物的情感。因此,为了能够满足多模态场景下的情感识别需求,开发基于多模态情感识别模型的情感识别软件势在必行。

1 多模态情感识别模型的设计和训练

首先利用中文情景喜剧《天真派武林外传》构建一个中文多模态情感语料库。根据美国心理学家Ekman[2]在1982 年提出的六大基本情绪:生气、快乐、惊讶、厌恶、伤心和害怕,在构建语料库时将情绪设置七个类别,分别为生气(anger)、快乐(joy)、厌恶(disgust)、惊讶(surprise)、伤心(sadness)、害怕(fear)和中立(neutral)。人工从《天真派武林外传》的每一集中按照一定的规则合理地对视频进行切分,同时多位标注人员采用人工标注方式对切分后的视频片段进行情绪类别标注。

多模态信息的提取工作,首先从视频片段中提取图片信息:使用Python中cv2模块的Video-Capture 类构建程序,逐帧截取图片。利用cv2模块的人脸分类器识别每一张图片中的人脸,并将识别结果保存成图片。然后从视频片段中提取音频信息:使用OpenSmile 自动化工具从视频片段中提取音频。最后在Python 中调用百度语音识别接口将音频转换成文本。

接下来对图片、音频和文本分别进行情感特征提取。采用预训练语言模型BERT进行文本特征提取,并使用全连接的方式对文本特征进行降维,获得300维的文本情感特征向量;使用Opensmile自动化工具进行语音特征提取得到384维的话语级语音情感特征,并使用全连接的方式对音频特征进行降维,获得300维的音频情感特征向量;使用FaceCNN 结合BiLSTM 的方式进行图片特征提取,并使用全连接的方式对图片特征进行降维,获得300维的图片情感特征向量。将DialogueRNN[3]模型作为多模态情感识别模型,训练时将先前得到的文本情感特征向量、音频情感特征向量和图片情感特征向量进行拼接得到当前话语的情感特征向量,作为DialogueRNN模型的输入,对DialogueRNN模型进行训练,最终得到一个效果较为良好的多模态情感识别模型。

2 功能设计

该应用的客户端支持用户实时拍摄视频进行上传;该应用的服务端可以对用户上传的视频分别进行图片特征抽取、音频特征抽取和文本特征抽取,并将得到的图片特征、音频特征和文本特征输入至多模态情感识别模型,识别得到用户上传的视频中人物的情感信息,并将该情感信息返回至客户端。系统时序图如图1所示。

图1 系统时序图

3 平台架构

该应用分为客户端和服务端两部分,客户端负责用户上传视频至服务端和接收服务端返回的视频中人物的情感信息;服务端负责接收用户上传的视频,并使用多模态情感识别模型识别视频中人物的情感,并将该情感信息传回客户端。

3.1 客户端

使用Android 实现客户端的功能。该应用在Layout 布局文件中使用Button 控件、ProgressBar控件和TextView 控件,点击Button 按钮实现拍摄视频并将视频上传至服务器,ProgressBar 用于显示视频上传至服务器的进度,TextView 控件用以显示服务器返回的情感信息。分别创建对应实现拍摄视频并上传至服务器的Button 对象、显示视频上传进度的ProgressBar 对象和显示服务器返回的情感信息的TextView 对象,为Button对象的点击事件注册一个监听器,当用户点击按钮时,使用intent 机制实现视频录制的功能,如果成功调用手机的摄像机拍摄视频,并且在拍摄视频的过程中没有取消拍摄,该视频将会保存至手机的指定路径中。调用getContent-Resolver().query()方法获取视频保存路径。定义isConnectingToInterne(t)方法检查该应用是否有网络连接,定义checkURL()方法检查指定的服务端URL 地址是否有效。在MainActivity 类中定义uploadFile()方法,将拍摄的视频上传至指定的URL 地址对应的服务端中,并获取服务端返回的视频中人物的情感信息。

在该方法中,首先指定服务端的URL地址,以该URL 地址获取HttpURLConnection 类的实例对象,调用该实例对象的setDoInpu(t)方法将该doInput 字段的值设置true,调用该实例对象的setDoOutput()方法将doOutput 字段的值设置为true,调用该实例对象的setRequestMethod()方法设置向服务器发送POST 请求,通过该实例对象的getOutputStream()方法向服务端发送视频数据,并通过该实例对象的getInputStream()方法接收服务器返回的情感信息。在MainActivity 类中创建一个线程类,并重写run()方法,调用is-ConnectingToInterne(t)方法检查该应用当前是否已经连网,调用checkURL()方法检查指定的服务端URL 地址是否有效。如果该应用当前已经连网并且指定的服务端URL 地址有效,调用uploadFile()方法将拍摄的视频上传至服务器并得到服务器返回的视频中人物的情感信息,并调用Handler类的sendMessage()方法将情感信息发送给主线程。在MainActivity 类中声明Handler类的实例对象,并重写Handler 实例对象的handleMessage()方法,在该方法中调用TextView 对象的setText()方法将该情感信息展示给用户。完成上述操作,即可实现该应用客户端的功能。

3.2 服务器端

使用Python实现服务端的功能。使用Python中的Flask 框架[4]搭建Web 应用,并且将该Web应用部署到服务器上:注册一个视图函数,该函数用来处理客户端的请求;使用app.route()装饰器为视图函数绑定URL,当用户上传视频至这个URL 时,就会触发这个函数,获取返回值。具体做法:首先接收用户上传的视频,然后使用cv2 模块中的VideoWriter 类保存用户上传的视频至指定的视频文件夹中,并分别抽取视频中对应的图片、音频和文本内容。抽取视频中对应图片的方法:对保存在指定路径下的视频使用cv2 模块的VideoCapture 类逐帧截取图片,并使用cv2 模块中的imwrite()方法将获得的图片保存至指定的图片文件夹中。将人脸识别模型的xml 文件“haarcascade_frontalface_default.xml”作为cv2 模块中的级联分类器CascadeClassifier类的参数,使用该方法对图片文件夹中图片上的人脸进行识别并保存识别得到的人脸图片。抽取视频中对应音频的方法:指定音频的保存路径path,使用cv2 模块的VideoFileClip 类从视频文件中加载视频,并使用AudioFileClip 类的write_audiofile()方法将从视频中提取的音频保存至指定的音频文件中。同时使用opensmile 模块中Smile 类的process_folder()方法从指定音频文件中提取音频特征并将提取得到的音频特征保存至指定路径下的csv 文件和pkl 文件中;根据音频文件的路径读取音频文件,并使用百度提供的开源API 实现语音转文字的功能,并将得到的文本内容保存至指定的文本文件中。经过上述步骤,可以从用户上传的视频中分别得到视频中人物的人脸图片、音频和文本内容。加载经过训练的多模态情感识别模型,将处理好的人脸图片、音频和文本内容输入至多模态情感识别模型中,得到预测的视频中对应人物的情感信息,并以数据流的方式将该情感信息发送回客户端。

4 系统设计

4.1 Android端

4.1.1 用户登录/注册

用户只有在登录之后才能使用该多模态情感识别的APP,如果用户没有账号,需要进行注册,并且使用注册的账号和密码进行登录。

4.1.2 拍摄视频

用户可以使用手机系统自带的相机拍摄视频,并将拍摄的视频进行上传。

4.2 服务器端

4.2.1 抽取单模态信息

图片抽取模块:用来从用户上传的视频中逐帧抽取图片,并从图片中提取人物人脸图片。

音频抽取模块:用来从用户上传的视频中抽取音频。

文本抽取模块:用来从抽取得到的音频中抽取文本内容。

4.2.2 情感识别

多模态情感识别模块:此模块用来识别用户上传的视频中人物的情感。

5 工作流程

整体工作流程如图2所示,用户使用多模态情感识别APP 上传视频至服务器,服务器从用户上传的视频中提取人脸图片、音频和文本内容,将提取得到的人脸图片、音频和文本内容传入至多模态情感识别模型中,由多模态情感识别模型对视频中的人物情感进行识别,最后以数据流的方式将识别得到的情感信息返回给用户。

图2 系统工作流程

6 结语

本文设计并开发了一个能够使用多模态情感识别模型识别视频中对应人物情感信息的移动应用程序。本项目团队自行构建了基于中文情景喜剧《天真派武林外传》的中文多模态情感语料库,并利用DialogueRNN 模型训练出了中文多模态情感识别模型,通过从《天真派武林外传》中提取得到的图片、音频和文本内容对多模态情感识别模型进行训练,并使用训练好的多模态情感识别模型对视频中人物的情感进行识别。相较于单模态的情感识别,基于多模态情感识别模型的情感识别能更准确地识别用户的情感状态。本文所设计的应用可以用于智能对话的很多场景中,比如在线学习系统中,随时检测学习者的情感状态,并根据学习者的情感状态调整学习进度;或者在客服对话系统中,实时检测用户的情感,以辅助客服人员可以根据用户的情感更好地为用户提供服务。

猜你喜欢

服务端音频模态
必须了解的音频基础知识 家庭影院入门攻略:音频认证与推荐标准篇
基于Daubechies(dbN)的飞行器音频特征提取
云存储中基于相似性的客户-服务端双端数据去重方法
新时期《移动Web服务端开发》课程教学改革的研究
在Windows Server 2008上创建应用
音频分析仪中低失真音频信号的发生方法
Pro Tools音频剪辑及修正
国内多模态教学研究回顾与展望
基于HHT和Prony算法的电力系统低频振荡模态识别
由单个模态构造对称简支梁的抗弯刚度