APP下载

基于Live2D+Mlkit的社交软件的设计与实现

2022-08-26马文艺姜丽莉范言文

现代信息科技 2022年11期
关键词:服务端人脸客户端

马文艺,姜丽莉,范言文

(南京工业大学浦江学院 计算机与通信工程学院,江苏 南京 210044)

0 引 言

社交软件已经深入人们的生活,而人们使用社交软件更多的是在以文字、语音、朋友圈等形式在网络上进行交流。据此可见,人们对于视频社交并不敏感,仅有极少部分的情况会选择以视频形式进行互动。个人认为不选择使用视频形式有以下两种原因:(1)对于非亲友或熟识的人,大部分人不愿意暴露自己真实样貌;(2)不是所有人都有好看的外表,有自信去向他人展现。

基于此,以模型化代替本身样貌进行社交应能成为较优解,模型化形式可以在保证互动性情况下,有效避免本身样貌的显露,有助于线上互动聊天。对于模型,目前正热门的Live2D是一个不错的选择,目前该技术运用领域也在增多,尤其是对于目前3D技术与硬件技术存在不匹配矛盾的直播行业,该技术未来还是会有很好的应用前景。

1 系统总体架构

系统架构分为五层,从下至上分别为:基础设施层、存储层、业务层、接入层、移动终端。

1.1 业务层

业务层为整个系统的中心,负责为整个系统提供服务,响应移动端用户的操作,将数据返回以及存储到存储层。业务层包括通讯业务、登录业务、账号服务、好友服务、消息服务、聊天室服务,其中即时通信业务包括音频通信、文字通信、虚拟视频通信业务。

1.2 移动终端

移动终端也就是客户端,使用Android技术开发的APP,用户通过APP可实现即时通信功能。本系统核心技术Live2D+Mlkit运行在移动终端,Mlkit调用移动终端的相机获取实时视频流,调用CPU对视频流进行处理与计算,得到实时的人脸坐标数据,通过自定义的数据转换器转换为Live2D配置数据,完成Live2D与人脸动作的实时同步。

1.3 其他层

基础设施层包括操作系统、服务器、存储设备,主要负责服务的提供与数据的存储;存储层包括MySQL、OSS(对象存储),MySQL是关系型数据库主要存储用户、聊天室、聊天记录等信息,OSS主要存储系统中的资源文件,如用户头像等;接入层用于连接Android APP与服务端,使用OkHttp3技术,按照Resultful规则,GET用于获取各种系统数据,POST用于新增系统数据,PUT用于更新系统数据,DELTE用于删除数据;用户的每个操作都是向业务层发送请求,业务层再操作存储层的数据,为了保证系统易于维护,在业务层与存储层都需要加入日志服务,用于记录用户操作日志,当系统遇到Bug、崩溃等问题时可根据日志进行回溯。社交软件需要实现即时通信的功能,本系统使用WebSocket技术在客户端与服务端建立持久的连接,保证信息的即时性。

综上所述,系统总体架构如图1所示。

图1 系统总体架构图

2 系统开发技术与工具

本系统客户端采用Android技术,服务端使用Java后端技术,通过客户端向服务端、服务端向客户端发送数据进行交互。

2.1 Android相关技术

Live2D:日本Cybernoids公司开发的一种2D绘图渲染技术,多用于电子游戏,通过一系列的连续图像和人物建模来生成类似三维模型的二维图像。

Mlkit:Google的机器学习套件,是一个移动端SDK,提供了强大易用的视觉和自然语言API来解决应用程序中常见的问题。

Fastjson:Alibaba的一个可以将Java对象转为JSON数据、将JSON转为Java对象的Java库。

OkHttp3:一个主流的网络请求的开源框架。

2.2 服务端技术

Spring Boot:为快速启动且最小化配置的Spring应用而设计,简化了传统Spring应用的开发。简化了烦琐的配置项目、提供了内置的Http服务器、简化了Maven的依赖配置。有助于开发者快速构建架构,进行开发,帮助开发者专注于需求业务的开发。

WebSocket:一种在单个TCP连接上进行全双工通信的协议。

2.3 数据库存储技术

MySQL:关系型数据库,主要用于存储用户、聊天室等数据。

Redis:Key-Value型数据库,用于用户Token数据的缓存。

3 需求分析

3.1 客户端功能

客户端通过OkHttp3和WebSocket与服务端通信,为用户提供包括账号登录、账号创建、完善个人信息、文字通信、语音通信、虚拟视频通信、搜索好友、添加好友、修改好友备注、删除好友、创建聊天室、删除聊天室等功能。其中文字通信需要支持颜文字的发送,语音通信拥有关闭麦克风、关闭扬声器功能;虚拟视频通信拥有相机翻转、切换成语音功能。用户功能用例图如图2所示。

图2 用户功能用例图

3.2 服务端功能

服务端功能应该包括权限验证、Token颁发、WebSocket服务、数据提供服务、数据存储服务等功能。权限验证需要验证用户Token是否合法、是否过期等功能;Token即为用户访问服务端的令牌,每位每次登录都会生成独一无二的Token;WebSocket服务需要支持用户文字、语音、视频通信,同时还包括接受用户语音请求、视频请求以及请求结果的消息,实时反馈给用户。输入提供服务提供了调用业务层功能的API,此服务提供即时通信以外的其他服务;数据存储服务用于随时存储用户产生、更新的各种数据,如聊天室、好友关系、聊天记录等数据。

3.3 管理端功能

管理端为管理系统中的各种数据提供了可视化的管理界面,还提供数据分析、数据统计等功能。管理员功能用例图如图3所示。

图3 管理员功能用例图

3.4 系统总体功能框架

综合3.1~3.3所述,本系统的总体功能框架图如图4所示。

图4 系统总体功能框架图

4 系统核心功能实现

4.1 Android整合Live2D与Mlkit

整合Live2D。主流的Android应用开发使用Android Studio作为编译器,Gradle作为包管理器。Live2D官方版本已达到4.0版本,但官方并未提供Jar包,只提供了Native的SDK,所以本系统引入了2.0版本的Live2D的Jar包。参考官方Demo编写自定义的Live2D Manager,通过该管理器可以自定义更换Live2D模型和传入自定义动作的配置。

整合Mlkit。Mlkit是谷歌专门为移动端提供的机器学习套件,提供了非常强大的人脸和NPL技术的API,使用Gradle可轻松整合。通过Android提供的相机服务,实时获取相机的视频流,经过Mlkit处理,实时返回人脸坐标数据。

4.2 人脸与Live2D模型动作实时同步

4.2.1 处理人脸坐标数据

每个人脸坐标数据都是不同的,首先本系统需要录入用户的坐标数据作为参考,通过坐标数据的变换来判断眨眼、张嘴等动作。例如眼部的坐标如图5所示

图5 眼部坐标图示例

以眼部坐标为例,可以看到眼部一共有16个左边点,这些左边对应着X轴、Y轴,可以看到坐标4、5、11、12处于眼部中间,理论上只需要将坐标4的减去坐标12的得到的值无限接近0,即可知道眼睛的状态。

眼睛单纯的睁闭映射到Live2D模型上会显得僵硬和突然,可通过以下公式计算眼睛的开合度,会使模型的动作更加逼真。代表某位用户眼睛睁开时轴相减的高度,Y代表当前用户上眼的Y轴坐标,Y代表下眼的Y轴坐标,H代表模型最终的开合度,最终公式为:

H=(Y-Y)/

Live2D眼睛的开合度只支持1、0,而嘴巴支持的开合度为±30,如果是计算嘴巴的开合度,公式可改为:

H=(Y-Y)/×30

4.2.2 将人脸坐标数据转为Live2D动作配置数据

Live2D有一套标准的配置参数表,通过配置参数即可更改模型的脸部动作,如图6所示。

图6 模型动作更改示例

通过编写一个数据转换器将人脸数据转换为模型配置,最终实现人脸与模型动作的实时同步,最终效果如图7所示。

图7 人脸与模型动作同步示例

需要注意的是,在虚拟视频通信中,双方和相机需要保持在一定的距离范围内,距离误差越大,实际检测结果误差也就越大。

4.3 文本通信的实现

文本通信属于本系统中实现起来较为容易的功能,流程为:(1)用户发送文本消息;(2)服务端接收并解析,获取到接收人并分发;(3)接收端接收到消息后,通过Android广播的方式更新视图并显示。

4.4 音频通信的实现

相比于文本通信,音频通信需要接收方接收请求才可进行音频通信,具体流程为:(1)用户发起音频通信请求;(2)服务端接收到请求并解析,获取到接收人并分发;(3)接收端接收到请求后,唤起音频接收Activity,用户可选择接受或拒绝;(4)接受端接收或拒绝的响应会发送到服务端,服务端进行解析,并将结果分发;(5)发起端接收到结果,如果对方接受则开始音频流传输,如果拒绝则将终止当前Activity。

4.5 虚拟视频通信的实现

虚拟视频在音频通信的基础上增加了获取用户实时视频流并转换为Live2D模型配置,在接收方接受后,不仅会传输音频流,还将Live2D实时配置数据传输给接收方,接收方接收后通过Live2D Manager实时更改模型的动作,也就是将发起方人脸动作同步给接收方模型,从而实现了所谓的虚拟视频通信。在此期间并没有传输用户的视频流,只是传输了模型的配置数据。

4.6 虚拟视频通信转为音频通信的实现

用户在虚拟视频通信过程中,本系统支持转为音频通信,流程为:(1)用户1点击转为音频通信按钮时会直接终止本地相机,Live2D配置数据传输也会停止,与此同时会发送消息给服务端;(2)服务端接收到消息后,解析并分发给用户2;(3)用户2接收到此消息后,随即也会终止本地相机的工作和Live2D配置数据的传输,音频数据流传输正常进行。

5 结 论

本系统虽然最终实现了即时通信的功能,但仍然存在着一些问题:(1)系统使用的是Live2D 2.0版本的SDK,而Live2D版本已经到达4.0,新的版本支持的功能更多,经过多版本的迭代,性能也会更好,本系统的APP运行占用了大量的系统内存,对于旧版的手机还是会存在性能问题;(2)Mlkit技术也存在一些问题,因是实时视频流处理,且是运行在移动终端,同样会占用过多的系统内存,影响用户的体验,同时对眼睛开合检测的准确率略低;(3)本系统的即时通信功能基于WebSocket进行传输,对于普通的文字消息用户发送到服务端,服务端接收后分发给目标用户,期间的延迟并不明显;对于音频流使用WebSocket传输就会显得吃力,延迟更高。可以使用RTC技术实现客户端点对点通信来解决这个问题。

这些问题分别对应着软件、硬件、技术方面,在各方面技术高速发展的今天,或许不久以后就可以得到完美的解决,当然也有可能今天就可以得到解决,只是自己掌握的知识不够。

5G的时代,传统的IM通信已经成为人们生活、工作中不可分割的一部分,虽然提高了人们的工作效率,随之而来的是越来越大的工作压力。虚拟人物视频社交或许可以成为人们释放压力、进行娱乐的一种新方式。

猜你喜欢

服务端人脸客户端
“人民网+客户端”推出数据新闻
——稳就业、惠民生,“数”读十年成绩单
玻璃窗上的人脸
智力考场:有趣的图片测试
多人联机对战游戏的设计与实现
基于三层结构下机房管理系统的实现分析
基于三层结构下机房管理系统的实现分析
虚拟专用网络访问保护机制研究
新闻客户端差异化发展策略
“领家系”可爱脸VS“高冷系”美人脸
长得象人脸的十种动物