1289|0

57

帖子

5

TA的资源

一粒金砂(高级)

楼主
 

【DigiKey“智造万物,快乐不停”创意大赛】基于LLM大和VITS的全息AI助手 项目提交 [复制链接]

  本帖最后由 MioChan 于 2023-12-22 12:12 编辑
基于LLM大语言模型和VITS文本转语音的全息AI助手
 作者: MioChan(之前的论坛ID是eew_nkXjf8)
 

一、作品简介

 

                                                    图1.1 实物(左)和渲染图(右)
        我做的是一个基于LLM大语言模型和VITS文本转语音的AI助手,主程序是基于Unity3D实现的,跑了一个Live2D,做了一些图像处理使得能够配合一个70mm 的1:1的分光棱镜,最终实现了“全息”的效果,其运行在Lattepanda开发板上;VITS(文本转语音模型)是我自己用Python写了个Flask 后端API服务器,集成了OpenAI GPT模型的API调用接口。
先简要介绍一下本项目所用到的硬件,有些是得捷报销的,还有一些是我自己之前买的或者自己做的:
 
GROVE BEGINNER KIT FOR ARDUINO开发板
    其实选物料的时候我很想选Arduino R4 WIFI版,询问了一下负责人说是报名时选的板子必须要选,可惜这个板子没有对应的WIFI模块,直接用8266局限性太大,而且Uno貌似不能驱动64x32这个尺寸的点阵屏,加上这个板子出场就连接了很多传感器,如果要用他做开发需要把邮票孔全用钳子剪断,这个操作是不可逆的,难得拿到个这么精致的Arduino入门开发板,直接给强拆了太可惜,还是想保留原来的样子,所以最后写了一个Arduino程序,让这个板子通过与Unity3D串口通信的方式将传感器数据传入。
                                                 图1.2 GROVE BEGINNER KIT FOR ARDUINO开发板
Adafruit 64X32 点阵屏幕:
这个屏幕是由得捷报销的,刚好自己想实际上手尝试一下点阵屏,不过Adafruit的真的好贵,这个屏幕主要是当一个辅助显示器,显示虚拟助手的一些回复等文字消息,平时也可以自动联网获得准确的时间。
 
Adafruit ESP32-S3开发板:
F2中用到的板子,这里直接用CIRCUIT PYTHON 写了一个API服务器,并驱动上面提到的点阵屏(实在买不起Adafruit自己的点阵屏驱动板),这一块资料比较少,走了很多弯路,甚至官网的接线图都是错的,还好最后顺利实现了。总之它和上面提到的屏幕用来显示虚拟助手说的话,平时也会自动联网授时,显示天气,可以单独使用。
 
Lattepanda开发板
                                                  图1.3 LattePanda开发板
LattePanda可运行完整版Windows 10操作系统。板载一颗英特尔4核处理器,最高1.92GHz运行频率,内置蓝牙和WiFi模组,支持USB 3.0接口、HDMI视频输出、3.5mm音频接口,100Mbps以太网口。Unity主程序就在这上面运行。
 
4寸方屏驱动板:
                                                 图1.4 全息显示器屏幕驱动板
硬创社的一个开源项目,自己去打了个PCB焊了出来,主要用来驱动4寸方形屏幕,本项目主要是用来驱动分光棱镜下面的屏幕。
 
 
二、系统框图(图文结合)
(设计思路、系统软硬件介绍及实现框图,以图文结合的展示)
                                                 图2.1 系统结构图
在图2.1的左端是用户端主程序,主要是与用户交互相关的部分,它直接使用了Unity 3D引擎实现,并集成了Live2D动态模型驱动。Live2D是一个动画技术,能够将2D图像转换为动态的3D模型,这些模型在Unity3D引擎中被进一步处理,以实现平滑的动画和渲染效果。Unity 3D提供了一个丰富的视觉界面,可以支持复杂的动画和交互效果。其中后端服务是核心技术部分,包括LLM和VITS模型。LLM即大型语言模型,它在此系统中用于理解用户的自然语言指令和生成响应文本。这些文本再通过VITS技术转换为语音输出,VITS是一个高级的语音合成系统,它可以将文本信息转换为自然的语音。这两个技术的结合,为用户提供了一个既能理解自然语言也能产生自然语音回应的智能助手。系统中还包括了Flask框架构建的API服务器,这是一个轻量级的Web应用框架,用于处理来自网络的请求。通过API调用实现了在嵌入式设备调用深度学习模型。右侧主要是硬件相关的部分, Arduino开发板相连了很多传感器,它们可以收集环境数据或者控制其他设备,通过串口将数据发送给Unity。这增加了智能语音助手在智能家居系统中的实用性。SP32开发板被用来接收外部设备的文本POST请求,并将这些请求中的文本信息显示在点阵屏上。
 
三、各部分功能说明(图文结合)
(各部分实现的功能说明及讲解,以图文结合的展示)
Unity主程序:
                                                                                图3.1 Unity3D开发界面
        这部分是核心程序,基于Unity3D开发,主要用于驱动Live2D模型,实现基本的UI和交互效果,根据LLM的回复的语句情感自动切换对应的表情动作,以及实现后端服务器传回VITS语音的口型同步,获取串口中的传感器信息,以及调用后端服务以及天气API等等。因为一个人要做的东西太多,实在没精力搞了,后面打算全部换成3D模型,作为一名骨灰级VR Chat玩家,动捕设备当然是有的,寒假回去打算自己录制点动作,搞的更灵动一点,加一些真实的家具进去,而不是单单在这原地站着。
 
全息显示器:
                                    (a)底座3D模型                      ​​​​​​​    ​​​​​​​    ​​​​​​​    ​​​​​​​    ​​​​​​​    ​​​​​​​    ​​​​​​​    ​​​​​​​    ​​​​​​​    ​​​​​​​    ​​​​​​​    ​​​​​​​    ​​​​​​​    ​​​​​​​    ​​​​​​​    ​​​​​​​    ​​​​​​​    ​​​​​​​    ​​​​​​​    ​​​​​​​    ​​​​​​​    ​​​​​​​    ​​​​​​​    ​​​​​​​    ​​​​​​​    ​​​​​​​    ​​​​​​​    ​​​​​​​    ​​​​​​​    (b) 3D打印制作

                              (c)全息”显示器实物展示

                                                                                                                               
                                                                                                                                                             图3.2
“全息”显示器主要是用来显示Unity程序中输出的画面,通过一个70mm 1:1分光比的分光棱镜,实现了一种伪全息的效果,实际观感比拍出来的好看的多。自己画了一个底座,用拓竹p1s 打印了出来,用来支撑棱镜以及隐藏屏幕和PCB。待机状态时会显示日期、时间、天气、气温等信息,当用户提出问题后,屏幕会显示对应的答案,并通过VITS实时转语音。具体效果可以看后面的视频。
 
GROVE BEGINNER KIT FOR ARDUINO开发板:
                                  图3.3 GROVE BEGINNER KIT FOR ARDUINO串口输出
这个板子上集成了很多传感器模块,这里主要用到了DHT20 温湿度传感器、BMP280气压传感器,光照传感器和声音传感器,Arduino会将这些传感器的值通过串口发送,发送的格式如图所示。然后在Unity中只需要读取串口的数据,然后做一些简单的数据处理就可以获取到这些值了。除此之外,例如声音传感器如果检测到很大的声音,助手会主动询问“主人,发生什么了吗?”。
 
 
Adafruit ESP32-S3 TFT Feather+ Adafruit 32x64点阵屏
                            图3.4 Adafruit 32x64点阵屏和ESP32-S3
        这一部分是项目的一个附加功能,可以独立使用。主要就是用ESP32驱动了一个32x64的点阵屏,并且具有网络校时功能,平时可以作为一个时钟显示当前时间以及自己喜欢的图片(本想实现动画效果,但发现这个板子对应的Circuit Python不支持GIF播放的库,也没想到什么好方法,所以目前就显示静态图片啦),然后内部运行了一个API服务器,当收到其他设备发来的POST请求时,会将其请求的文本滚动显示在点阵屏上。在项目中主要用于当用户在询问AI助手后,点阵屏也会同步显示AI说的话。
                                                     图3.5 使用手机发送文本到点阵屏
           这里还有一个比较有趣的玩法,我写了一个ios快捷指令,只要在同一个局域网,可以在iPhone上直接输入文本将其投到点阵屏上,类似弹幕。
然后关于ESP32驱动点阵屏的资料感觉还是挺少的,有一些给出接线还是错的,特别是我用的是Adafruit ESP32-S3 TFT Feather,几乎没有这方面的资料,下面这个是一组正确的接线图,供大家参考。因为Adafruit ESP32-S3 TFT Feather和图3.6的板子引脚定义不太一样,代码里也需要修改,这个请见源码部分。
                                                   图3.6 连接点阵屏的HUB75到ESP32 S3
 
后端服务部分:
这部分主要用于实现LLM的自然语言问答,以及VITS文本转语音,需要部署在性能比较高的主机上。
                                      图3.7 VITS模型原理
VITS,英文全称为Conditional Variational Autoencoder with Adversarial Learning for End-to-End Text-to-Speech,是一种基于变分自编码器(CVAE)和对抗网络的语音合成技术(TTS)。与目前主流的TTS模型不同,VITS模型采用了一种全新的方法,将生成过程分为两个部分,先生成声学参数(F0、梅尔频谱、能量谱等),再通过声学参数生成语音信号,其原理图如图所示。这种方法避免了传统TTS模型中需要对音频进行采样和合成的过程,使得模型更加高效和准确。VITS模型的核心思想是将文本序列、声学参数序列以及语音信号序列视为随机变量,通过最大化变分下界来训练模型。同时,VITS模型采用了对抗训练的思想,引入了一个判别器来判断生成的声学参数序列是否真实,这种方法可以使得生成的声学参数更加真实、自然。
                                                                      图3.8 LLM模型原理
        而说到LLM自然会想到Transformer。不过在 Transformer 提出之前,自然语言处理领域的主流模型是循环神经网络(RNN,recurrent neural network),使用递归和卷积神经网络进行语言序列转换。2017 年,谷歌大脑团队在人工智能领域的顶会 NeurIPS 发表了一篇名为 “Attention is all you need” 的论文,首次提出了一种新的简单网络架构,即 Transformer,它完全基于注意力机制 (attention),完全摒弃了循环递归和卷积。
递归模型通常沿输入和输出序列的符号位置进行计算,来预测后面的值。但这种固有的顺序性质阻碍了训练样例内的并行化,因为内存约束限制了样例之间的批处理。而注意力机制允许对依赖项进行建模,而无需考虑它们在输入或输出序列中的距离。
Transformer 避开了递归网络的模型体系结构,并且完全依赖于注意力机制来绘制输入和输出之间的全局依存关系。 在八个 P100 GPU 上进行了仅仅 12 个小时的训练之后,Transformer 就可以在翻译质量方面达到新的最先进水平,体现了很好的并行能力。成为当时最先进的大型语言模型(Large Language Model, LLM)。其可高度并行进行训练,这对发挥硬件红利以及快速迭代模型非常重要。图3.8右侧是论文提到的 Transformer 模型,对编码器和解码器使用堆叠式的自注意力和逐点式、全连接层,分别如图左半部分(编码器)和右半部分(解码器)所示OpenAI 基于该工作基础上发展了 GPT(Generative Pre-training)生成式预训练模型。因为LLM部署需要非常高的算力,所以这里为了省事直接使用了OpenAI的GPT API。
                                                         图3.9 后端服务程序
        上述两个模型统一由后端API服务程序管理,它采用了Python Web框架Flask作为开发工具。Flask是一个简单而灵活的Web框架,提供了构建Web应用程序所需的核心功能和组件。当用户在Unity主程序中发出问题后,Unity会调用Flask API获得大语言模型的回应,并判断出这个语句的情绪,然后将文本转成语音后经过Base64编码返回给Unity,从而为Unity中的Live2D角色增加智能。
 
 

四、作品源码

        Unity引擎和整个后端服务的代码,部署要求都比较高,加上很多地方还不太满意,等后续完善之后,软件代码会开源到Github上,这里开源了硬件部分的代码。
arduino_com.ino (2.04 KB, 下载次数: 0) 为GROVE BEGINNER KIT FOR ARDUINO获取传感器数据并通过串口通信的方式发送传感器数据的代码; esp32s3Matrix.py (3.22 KB, 下载次数: 1) 为使用Adafruit ESP32-S3 TFT Feather驱动点阵屏,并提供了API服务以及中文字库,可以直接向其发送文字,并直接显示在屏幕上的代码。
 
五、作品功能演示视频
全息显示器的基本功能演示:
六、项目总结
本项目实现了一个结合了大型语言模型(LLM)和语音合成技术(VITS),以及Unity3D和Live2D技术,旨在提供一种更自然、直观的智能助手。这款语音助手能够以准确且表现力丰富的方式回应用户的语音指令,同时,通过Live2D模型的视觉展示增强了交互的真实感和吸引力。
项目的核心硬件包括Lattepanda开发板、Adafruit点阵屏幕和GROVE BEGINNER KIT FOR ARDUINO、Adafruit ESP32-S3 TFT Feather等硬件。利用LLM和VITS技术进行自然语言处理和语音合成,结合Unity3D和Live2D技术,通过一个分光棱镜实现了虚拟角色的3D全息视觉展示,我还设计并3D打印了一个全息显示器底座,进一步提升了整体的视觉效果和体验。此外,利用Adafruit ESP32-S3 TFT Feather来驱动点阵屏,并构建了一个能接收POST请求的API服务器,实现了文本信息在点阵屏上的滚动播放。
通过参与这个集合了AI、游戏制作、嵌入式、网络通信等多个领域的智能语音助手项目,我个人获得了极为宝贵的经验和技能提升。首先,在技术层面上,我对Unity3D引擎和Live2D技术的应用有了深入的了解和实践,这不仅提高了我在游戏开发方面的能力,还让我更加熟悉复杂软件的集成和操作。在硬件方面,通过使用Arduino开发板、ESP32开发板、Lattepanda开发板等,我学习了如何搭建和配置硬件设备,以及如何将它们与软件应用相结合。这增强了我的硬件编程技能和对物联网(IoT)概念的理解。此外,设计并3D打印全息显示器底座的过程,不仅锻炼了我的设计思维,还提升了我在3D打印和实物制造方面的技术能力,我学会了如何将理论知识和技术技能应用于实际的创造过程中,这在未来的职业生涯中将极为有用。在软件编程方面,我通过使用LLM和VITS技术进行自然语言处理和语音合成,进一步加深了我对人工智能和机器学习领域的理解。这不仅增强了我的编程技能,还拓宽了我在AI应用方面的视野。
因为本人本硕所学专业都是非硬件相关,研究方向主要是深度学习,所以很多知识都是出于自己的兴趣自学的。项目的不足之处主要是整个项目我觉得有点过于模块化,系统集成度并不是很高,而且很多代码写死了,别人复现可能比较困难,此外因为个人能力和精力限制(学期末太忙辣),还有一些想要实现的功能也没完成。未来这个项目我也希望能继续完善下去,因为我自己是VR玩家,也有一套动捕设备,我最终还是希望能将Live2D换成纯3D的模型,并自己亲自录制一些自己想要的动作,感觉这样配合全息显示会有更逼真的效果。
总的来说,完成这个项目还是加深了我对多个技术领域的理解和应用,还极大地提升了我的问题解决能力、创新思维和跨学科协作能力。这些经验对我的个人和专业成长都产生了深远的影响,使我更加自信地面对未来的挑战和机遇。最后,再次感谢EEWORLD和得捷提供的这次机会!
 
点赞 关注
 
 

回复
举报
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/8 下一条
电源解决方案和技术 | DigiKey 应用探索站
当月好物、电源技术资源、特色活动、DigiKey在线实用工具,干货多多~

查看 »

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

 
机器人开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表