自己动手搭建“接入 AI Agent 的数字人”

前言

本文的实战案例来自于开源项目:https://github.com/wan-h/awesome-digital-human-live2d。该项目可以运用Dify编排框架和Live2D驱动模型搭建智能数字人,实现智能对话并动态交互,大家可以自行部署尝试,项目效果如下。

开源!数字人:awesome-digital-human-live2d

一、数字人简介

数字人,是指运用数字技术创造出来的人,虽然在现阶段不能做到像科幻作品中的人型机器人一样具备高度智能,但它已经在生活的各类场景中触手可及,而且随着AI技术的发展正在爆发

目前业界还没有一个关于数字人的准确定义,但一般可以根据技术栈的不同分为两类,一类是由真人驱动的数字人,另一类是由算法驱动的数字人。

1.1 真人驱动的数字人

这类数字人重在通过动捕设备或视觉算法还原真人动作表情,主要应用于影视行业以及现下很火热的直播带货,其表现质量与手动建模的精细程度及动捕设备的精密程度直接相关,不过随着视觉算法的不断进步,现在在没有昂贵动捕设备的情况下也可以通过摄像头捕捉到人体骨骼和人脸的关键点信息,从而做到不错的效果。

1.2 算法驱动的数字人

这类数字人强调自驱动,人为干预更少,技术实现上更加复杂,一个最简单的算法驱动的数字人大致流程如下:

其中三个核心算法分别是:

  1. ASR (Automatic Speech Recognition,语音识别):我们希望和数字人的交互跟人一样以对话为主,所以算法驱动的第一步就是语音识别,它能将用户的音频数据转化为文字,便于数字人理解和生成回应。

  2. AI Agent(人工智能体):充当数字人的大脑,可以直接接入大语言模型,强调 Agent 的概念是为了让数字人拥有记忆模块等更加真实。

  3. TTS (Text to Speech,文字转语音):数字人依靠LLM生成的输出是文字,为了保持语音交互一致性,需要将文字转换为语音,由数字人。

上述算法开源的代码有很多,这里列出一些仓库供大家参考:

  • ASR语音识别

    • openai的whisper: https://github.com/openai/whisper

    • wenet: https://github.com/wenet-e2e/wenet

    • speech_recognition(这是一个语音识别的接口集合,里面有不同实现的语音识别的接口): https://github.com/Uberi/speech_recognition

  • AI Agent

    • 大模型部分就比较多了,包括ChatGPT、Claude、ChatGLM、文星一言、千帆大模型、通义千问等等。

    • Agent部分可以使用LangChain的模块去做自定义,里面基本包含了Agent实现的几个组件(https://www.langchain.com/)

  • TTS

    • 微软的edge-tts:https://github.com/rany2/edge-tts,只能使用里面预设的人物声音,目前接口免费。

    • VITS:https://github.com/jaywalnut310/vits,还有很多的分支版本,可以去搜索一下,vits系列可以自己训练出想要的人声。

    • so-vits-svc: https://github.com/svc-develop-team/so-vits-svc,专注到唱歌上面,前段时间很火的AI孙燕姿。

除了算法,人物建模模型可以通过手动建模(音频驱动)或者AIGC的方式生成人物的动态效果(例如wav2lip模型)实现,这样就完成了一个最简单的数字人。

当然这种简单的构建方式还存在很多的问题,例如:

  • 如何生成指定人物的声音?

  • TTS生成的音频如何精确驱动数字人口型以及做出相应的动作?

  • 数字人如何使用知识库,做出某个领域的专业性回答?

...

二、如何构建高质量的 AI 数字人

首先我们需要参考“真正的人”,赋予数字人躯壳和灵魂:

  • 数字人的躯壳就像我们的身体一样,有一个好看的皮囊,能够跟人进行可视化的,带有神态动作的动态互动;

  • 数字人的灵魂就像我们的大脑,具备一定的智能水平,能够理解交互对象的信息,并给予有效的,符合预期的回应。

2.1 构建数字人躯壳

数字人的躯壳就是建模过程,有多种构建方式:

  1. 2D引擎

    风格偏向二次元,亲和力强,定制化成本低,在日本、东南亚等国家比较受欢迎,也深受年轻人喜欢,毕竟能将喜欢的动漫人物变成数字人的躯壳,是一件很棒的事情。2D引擎的代表就是Live2D Cubism(https://www.live2d.com/)。
  2. 3D引擎

    风格偏向超写实的人物建模,拟真程度高,定制化成本高,目前有很多公司都在做这个方向的创业,已经可以实现用户通过手机摄像头快速创建一个自己的虚拟人身体(如下图,NextHuman(https://nexthuman.cn/))。3D引擎的代表是UE(Unreal Engine)、Unity,虚幻引擎MetaHuman等(个人学习在电脑配置和学习难度上有一定门槛。
  3. AIGC

    ​​​​​​虽然AIGC的方式相比前两者省去了建模流程,直接生成数字人的展示图片,但弊端也明显,算法生成的数字人很难保持ID一致性,帧与帧的连贯性上会让人有虚假的感觉。如果项目对人物模型真实度要求没有那么高,可以使用这种方案(算法发展非常快,可能不久就会有连贯度很高的生成方式),典型的项目有wav2lip(https://github.com/Rudrabha/Wav2Lip)、video-retalking(https://github.com/OpenTalker/video-retalking)等。
  4. AIGC还有一个方向是直接生成2d/3d引擎的模型,而不是直接生成数字人的最终展示部分,但该方向还在探索中。

        得益于现有各类技术方案的成熟度,以往建模往往都是由专业的建模师完成工作,不久之后相信大家就可以通过一些生成算法快速生成自己的人物模型了。

        建好的模型可以使用web前端页面(Live2D就提供了web端的SDK)或者Native的可执行程序进行部署,最后呈现在用户面前的是一个GUI。

        笔者的开源数字人项目(项目地址:https://github.com/wan-h/awesome-digital-human-live2d)选择了 live2d 作为数字人躯壳,因为这类 SDK 的驱动方式相比现在的 AI 生成式的方式更加可控和自然,相比虚幻引擎这些驱动方式又更加轻量和简单;另外超写实的数字人风格在目前的技术能力下,处理不好一致性问题,容易带来虚假的感觉或者产生恐怖谷效应,而卡通二次元的形象给人的接受度更高。关于 live2d 的 SDK 驱动方式可以参考官方示例:https://github.com/Live2D。

2.2 构建数字人灵魂

        有了数字人躯壳,我们就需要构建数字人的灵魂,让数字人具备各种智能,比如记得你的个人信息,充当你的个人助手;在某个领域具备更专业的知识;能处理复杂的任务等等。这些能力实现有以下几个需要注意的工程关键点:

  1. AI Agent:我们要想数字人像人一样思考就需要写一个像人一样的Agent,工程实现所需的记忆模块,工作流模块、各种工具调用模块的构建都是挑战;

  2. 驱动躯壳的实现:灵魂部分怎样去驱动躯壳部分,我们可以将灵魂部分的所有接口定义出来,然后躯壳部分通过API调用,调用方式可以是HTTP、webSocket等等,视躯壳部分的实现而定。但包含情绪的语音表达以及如何保证躯壳的口型、表情、动作和语音的同步及匹配,目前主流方案只能做到预设一些表情动作,再做一些逻辑判断来播放预设,语音驱动口型相对来说成熟一些,但都是闭源的,效果可以参考Nvidia的Audio2Face(https://www.nvidia.cn/omniverse/apps/audio2face/)或则Live Link Face(Iphone APP) + Face AR Sample(UE);

  3. 实时性:由于整个数字人的算法部分组成庞大,几乎不能实现单机部署,特别是大模型部分,所以算法一般会部署到额外的集群或者调用提供出来的API,这里面就会涉及到网络耗时和模型推理耗时,如果响应太慢就会体验很差,所以低延时也是亟需解决的一个问题。

  4. 多元跨模态:仅仅是语音交互的数字人是远远不够的,人有五感(听觉、视觉、嗅觉、触觉、味觉),听觉只是其中一种,其他的感官可以根据实际需求来做,比如视觉我们可以通过添加摄像头数据来获取数据,再通过系列CV算法做图像解析等;

  5. 拟人化场景:我们正常和人交流的时候不是线性对话,会有插话、转移话题等情况,这些情景如何通过工程丝滑处理。

        上述种种,如果都要自建代码实现各模块,开发工作量巨大,迭代难度也很高,对于个人开发者来讲不现实。因此我们推荐借助开源社区的力量,现在开源社区已经有了像dify、fastgpt等等成熟的高质量 AI 编排框架,它们有大量的开源工作者维护,集成各种主流的模型供应商、工具以及算法实现等等。我们可以通过这些框架快速编排出自己的 AI Agent ,赋予数字人灵魂。

        在笔者的开源项目中,使用了dify的框架,利用其编排和可视化交互任意修改流程,构造不同的AI Agent,并且实现相对复杂的功能,比如知识库的搭建、工具的使用等都无需任何的编码和重新部署工作。同时Dify的API暴露了audio-to-texttext-to-audio两个接口,基于这个两个接口就可以将数字人的语音识别和语音生成都交由Dify控制,从而低门槛做出来自己高度定制化的数字人(如下图),具体的部署过程参考B站视频:https://www.bilibili.com/video/BV1kZWvesE25。

        如果有更加高度定制的模型,也可以在Dify中接入XInference等模型管理平台,然后部署自己的模型。此外,数字人GUI工程中仍然保留了LLM、ASR、TTS、Agent等多个模块,能够保持更好的扩展,比如实现更加真实性感的语音转换、或者如果有更加Geek的Agent实现也可以选择直接后端编码扩展实现。

上述 Dify 接口使用注意事项:

  1. 使必须在应用编排功能中打开文字转语音语音转文字功能,否则接口会返回未使能的错误。

  2. 只有接入了支持TTSSPEECH2TEXT的模型供应商,才会在功能板块中展示出来,Dify的模型供应商图标下标签有展示该供应商支持哪些功能,这里可以自行选择自己方便使用的。对于TTS,不同的模型供应商支持的语音人物不同,可以根据个人喜好添加。

三、写在最后

数字人在未来肯定会有很多的应用场景,比如家庭中有数字人管家,全面接管智能家居或其他设备;学校中有数字人老师,孜孜不倦的为学生答疑解惑;商场里有数字人导购,为顾客提供指路、托管个人物品等悉心服务...

数字人在未来肯定还有很多的技术突破,比如可以将五感数据作为输入(例如声音、图像、气味、震动等等),将所有可以控制躯壳的参数也作为输入(例如躯壳骨骼节点,面部混合形状参数等);次世代的算法可以自我迭代升级,也可以拿到感官输入以及躯壳控制方法后,自行演化躯壳控制方式...

笔者希望通过 Dify 搭建数字人的开源项目,给大家展现低门槛高度定制数字人的基本思路,但数字人的核心还是在于我们的Agent,也就是数字人的灵魂,怎样在Dify上面去编排专属自己的数字人灵魂是值得大家自己亲自体验的。

真诚的希望看到,随着数字人的多模态能力接入、智能化水平升级、模型互动控制更精确,用户在需要使用AI的能力时,AI 既可以给你提供高质量的信息,也能关注到你的情绪,给你一个大大的微笑,也许到了那时,数字世界也开始有了温度。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/954510.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Flink链接Kafka

一、基于 Flink 的 Kafka 消息生产者 Kafka 生产者的创建与配置: 代码通过 FlinkKafkaProducer 创建 Kafka 生产者,用于向 Kafka 主题发送消息。Flink 执行环境的配置: 配置了 Flink 的检查点机制,确保消息的可靠性,支…

电脑有两张网卡,如何实现同时访问外网和内网?

要是想让一台电脑用两张网卡,既能访问外网又能访问内网,那可以通过设置网络路由还有网卡的 IP 地址来达成。 检查一下网卡的连接 得保证电脑的两张网卡分别连到外网和内网的网络设备上,像路由器或者交换机啥的。 给网卡配上不一样的 IP 地…

dockerfile2.0

dockerfile实现lnmp nginx centos7 mysql centos7 php centos7 自定义镜像来实现整个架构 cd /opt mkdir nginx mysql php cd nginx 拖入nginx和wordpress vim Dockerfile vim nginx.conf ↓ worker_processes 1; events {worker_connections 1024; } http {include …

mysql-5.7.18保姆级详细安装教程

本文主要讲解如何安装mysql-5.7.18数据库: 将绿色版安装包mysql-5.7.18-winx64解压后目录中内容如下图,该例是安装在D盘根目录。 在mysql安装目录中新建my.ini文件,文件内容及各配置项内容如下图,需要先将配置项【skip-grant-tab…

【深度学习实战】kaggle 自动驾驶的假场景分类

本次分享我在kaggle中参与竞赛的历程,这个版本是我的第一版,使用的是vgg。欢迎大家进行建议和交流。 概述 判断自动驾驶场景是真是假,训练神经网络或使用任何算法来分类驾驶场景的图像是真实的还是虚假的。 图像采用 RGB 格式并以 JPEG 格式…

在Linux上如何让ollama在GPU上运行模型

之前一直在 Mac 上使用 ollama 所以没注意,最近在 Ubuntu 上运行发现一直在 CPU 上跑。我一开始以为是超显存了,因为 Mac 上如果超内存的话,那么就只用 CPU,但是我发现 Llama3.2 3B 只占用 3GB,这远没有超。看了一下命…

学习 Git 的工作原理,而不仅仅是命令

Git 是常用的去中心化源代码存储库。它是由 Linux 创建者 Linus Torvalds 创建的,用于管理 Linux 内核源代码。像 GitHub 这样的整个服务都是基于它的。因此,如果您想在 Linux 世界中进行编程或将 IBM 的 DevOps Services 与 Git 结合使用,那…

【MySQL实战】mysql_exporter+Prometheus+Grafana

要在Prometheus和Grafana中监控MySQL数据库,如下图: 可以使用mysql_exporter。 以下是一些步骤来设置和配置这个监控环境: 1. 安装和配置Prometheus: - 下载和安装Prometheus。 - 在prometheus.yml中配置MySQL通过添加以下内…

适配器模式案例

如果在这样的结构中 我们在Controller中注入,但我们后续需要修改Oss时,比如从minioService改成AliyunService时,需要改动的代码很多。于是我们抽象出一个FileService,让controller只跟fileservice耦合,这样我没只需要在…

AI大模型语音交互方案,ESP32-S3联网通信,设备智能化响应联动

在科技日新月异的当下,人工智能与物联网技术正以前所未有的速度重塑着我们的生活,玩具和潮玩领域也迎来了翻天覆地的变化。 AI语音交互在玩具和潮玩产品中的应用越来越广泛,ESP32-S3凭借其高性能、低功耗、丰富的外设接口和强大的AI能力&…

Android DataBinding 结合 ViewModel的使用

Android DataBinding 结合 ViewModel的使用 一、build.gradle引入对应的依赖 在build.gradle(app模块)里引入依赖,然后Sync Now一下: android {​viewBinding {enabled true}dataBinding {enabled true}} 完整的build.gradle代…

掌握Golang strings包:高效字符串处理指南

掌握Golang strings包:高效字符串处理指南 引言为什么要学习和掌握strings包本教程的目标 基本用法strings包概述导入strings包常用函数列表及简要介绍 字符串创建与基本操作创建字符串字符串连接:Join重复字符串:Repeat修改字符串&#xff1…

论文阅读:Searching for Fast Demosaicking Algorithms

今天介绍一篇有关去马赛克的工作,去马赛克是 ISP 流程里面非常重要的一个模块,可以说是将多姿多彩的大千世界进行色彩还原的重要一步。这篇工作探索的是如何从各种各样的去马赛克算法中,选择最佳的一种。 Abstract 本文提出了一种方法&…

自建RustDesk服务器

RustDesk服务端 下面的截图是我本地的一个服务器做为演示用,你自行的搭建服务需要该服务器有固定的ip地址 1、通过宝塔面板快速安装 2、点击【安装】后会有一个配置信息,默认即可 3、点击【确认】后会自动安装等待安装完成 4、安装完成后点击【打开…

JavaSE学习心得(反射篇)

反射 前言 获取class对象的三种方式 利用反射获取构造方法 利用反射获取成员变量 利用反射获取成员方法 练习 保存信息 跟配置文件结合动态创建 前言 接上期文章:JavaSE学习心得(多线程与网络编程篇) 教程链接:黑马…

工业视觉2-相机选型

工业视觉2-相机选型 一、按芯片类型二、按传感器结构特征三、按扫描方式四、按分辨率大小五、按输出信号六、按输出色彩接口类型 这张图片对工业相机的分类方式进行了总结,具体如下: 一、按芯片类型 CCD相机:采用电荷耦合器件(CC…

信凯科技业绩波动明显:毛利率远弱行业,资产负债率偏高

《港湾商业观察》施子夫 1月8日,深交所官网显示,浙江信凯科技集团股份有限公司(以下简称“信凯科技”)主板IPO提交注册。 自2022年递交上市申请,信凯科技的IPO之路已走过两年光景,尽管提交注册&#xff0…

1.15学习

web ctfhub-网站源码 打开环境,查看源代码无任何作用,但是其提醒就在表面暗示我们用dirsearch进行目录扫描,登录kali的root端,利用终端输入dirsearch -u 网址的命令扫描该网址目录,扫描成功后获得信息,在…

Windows部署NVM并下载多版本Node.js的方法(含删除原有Node的方法)

本文介绍在Windows电脑中,下载、部署NVM(node.js version management)环境,并基于其安装不同版本的Node.js的方法。 在之前的文章Windows系统下载、部署Node.js与npm环境的方法(https://blog.csdn.net/zhebushibiaoshi…

Android Studio历史版本包加载不出来,怎么办?

为什么需要下载历史版本呢? 虽然官网推荐使用最新版本,但是最新版本如果自己碰到问题,根本找不到答案,所以博主这里推荐使用历史版本!!! Android Studio历史版本包加载不出来? 下…