live2d + edge-tts 优雅的实现数字人讲话 ~
震惊!live2d数字人竟开口说话 ~
之前有想做数字人相关项目,查了一些方案。看了一些三方大厂的商用方案,口型有点尴尬,而且很多是采用视频流的方案,对流量的消耗很大。后来了解了live2d 技术,常在博客网页上见到的看板娘就是live2d技术实现的 ~
说下demo的技术实现,核心采用 live2d 的模型[含有开口说话的动作] + 文本转语音接口
1、文本转语音接口
这个接口采用前面分享过的edge-tts项目
基于微软TTS,优雅的实现文本转语音-CSDN博客
代码仓库地址
GitHub edge-tts
https://github.com/lyz1810/edge-tts
2、前端实现数字人开口说话
2.1 引入 Live2D 必要的 JavaScript 库
<script src="./js/live2dcubismcore.min.js"></script><script src="./js/live2d.min.js"></script><script src="./js/pixi.min.js"></script><!-- if only Cubism 4 support--><script src="./js/cubism4.min.js"></script><script src="./js/jquery-3.1.1.min.js"></script><script src="https://unpkg.com/axios/dist/axios.min.js"></script>
2.2 创建页面画布和按钮
<canvas id=canvas></canvas>
<div id="control"><div class="label">1、测试说话</div><button id="play">测试音频</button><br/><br/><div class="label">2、调用接口生成音频</div><textarea id="text" style="width:400px;height:300px;">你好,欢迎光临</textarea><br/><br/><button id="start">开始说话</button>
</div><style>#control {position: absolute;top: 50px;left: 50px;color: #ffffff;font-size: 18px;}.label {font-size: 32px;font-weight: 800;}
</style>
2.3 创建了一个 PIXI 渲染器实例,用于渲染 Live2D 模型
// 数字人模型const cubism4Model = "./assets/kei_vowels_pro/kei_vowels_pro.model3.json";const live2d = PIXI.live2d;(async function main() {const app = new PIXI.Application({view: document.getElementById("canvas"),autoStart: true,resizeTo: window,backgroundColor: 0x333333});const models = await Promise.all([live2d.Live2DModel.from(cubism4Model)]);models.forEach((model) => {app.stage.addChild(model);const scaleX = (innerWidth) / model.width;const scaleY = (innerHeight) / model.height;// fit the windowmodel.scale.set(Math.min(scaleX, scaleY));model.y = innerHeight * 0.1;draggable(model);});const model4 = models[0];console.log(innerWidth)// model4.x = innerWidth / 2;// 居中显示model4.x = (innerWidth - model4.width) / 2;model4.on("hit", (hitAreas) => {if (hitAreas.includes("Body")) {model4.motion("Tap");}if (hitAreas.includes("Head")) {model4.expression();}});})();
2.4 创建播放音频函数,播放音频 并调用模型开口说话动作
function talk(model, audio) {var audio_link = audio; //[Optional arg, can be null or empty] [relative or full url path] [mp3 or wav file] "./Keira.wav"var volume = 1; // [Optional arg, can be null or empty] [0.0 - 1.0]var expression = 8; // [Optional arg, can be null or empty] [index|name of expression]var resetExpression = true; // [Optional arg, can be null or empty] [true|false] [default: true] [if true, expression will be reset to default after animation is over]var crossOrigin = "anonymous"; // [Optional arg, to use not same-origin audios] [DEFAULT: null]model.speak(audio_link, {volume: volume,expression: expression,resetExpression: resetExpression,crossOrigin: crossOrigin})model.speak(audio_link)model.speak(audio_link, {volume: volume})model.speak(audio_link, {expression: expression, resetExpression: resetExpression})}
2.5 测试音频播放,并开口说话。点击 测试音频 按钮,测试正常播放调用。一切正常
$("#play").click(function () {talk(model4, "./demo.mp3");});
2.6 核心来了,让模型根据文字内容开口说话
$("#start").click(function () {console.log($("#text").val());let text = $("#text").val().trim();if (text == "") {alert("请输入内容");return false;}$("#start").prop("disabled", true);axios.get("http://127.0.0.1:2020/dealAudio?file_name=test.mp3&voice=xiaoxiao&text=" + text).then(response => {console.log(response.data);const audioUrl = response.data + "?v=" + new Date().getTime();talk(model4, audioUrl);$("#start").prop("disabled", false);}).catch(error => {console.error('请求接口失败:', error);$("#start").prop("disabled", false);});});
这里调用的接口地址,采用的是文章开头提到的 文本转语音助手
输入文字,点击开始说话

模型正常说话 ~
live2d的卡通数字人,感觉比3D建模的“真人数字人”效果要好很多,都是张口说话,live2d显的不会那么尴尬 。
live2d的制作成本相对低很多,想商用的话感兴趣可以去查下模型制作教程 ~
代码也已开源,仓库地址
live2dSpeek
https://github.com/lyz1810/live2dSpeek
相关文章:
live2d + edge-tts 优雅的实现数字人讲话 ~
震惊!live2d数字人竟开口说话 ~ 之前有想做数字人相关项目,查了一些方案。看了一些三方大厂的商用方案,口型有点尴尬,而且很多是采用视频流的方案,对流量的消耗很大。后来了解了live2d 技术,常在博客网页上…...
二进制安装php
下载php二进制包: 官网地址:https://www.php.net/releases/ PHP: Releaseshttps://www.php.net/releases/在里边可以选择自己要下载的包进行下载; 下载完成后进行解压: tar xvzf php-7.3.12.tar.gz 解压后 进入目录进行预编…...
旧版Pycharm支持的python版本记录
版权声明:本文为博主原创文章,如需转载请贴上原博文链接:旧版Pycharm支持的python版本记录-CSDN博客 前言:近期由于打算研究GitHub上一个开源量化交易平台开发框架,但是该框架是基于python3.10的版本开发,所…...
java实现七牛云内容审核功能,文本、图片和视频的内容审核(鉴黄、鉴暴恐、敏感人物)
目录 1、七牛云内容审核介绍 2、查看内容审核官方文档 2.1、文本内容审核 2.1.1、文本内容审核的请求示例 2.1.2、文本内容审核的返回示例 2.2、图片内容审核 2.2.1、请求参数 2.2.2、返回参数 2.3、视频内容审核 3、代码实现 3.1、前期代码准备 3.2、文本内容审核…...
C++面试基础系列-struct
系列文章目录 文章目录 系列文章目录C面试基础系列-struct1.C中struct2.C中struct2.1.同名函数2.2.typedef定义结构体别名2.3.继承 3.总结3.1.C和C中的Struct区别 4.struct字节对齐5.struct与const 关于作者 C面试基础系列-struct 1.C中struct struct里面只能放数据类型&#…...
代码随想录算法训练营 | 动态规划 part05
完全背包 有N件物品和一个最多能背重量为W的背包。第i件物品的重量是weight[i],得到的价值是value[i] 。每件物品都有无限个(也就是可以放入背包多次),求解将哪些物品装入背包里物品价值总和最大。 例子: 背包可容纳重…...
英特尔XPU大模型应用创新
...
仿Muduo库实现高并发服务器——socket网络通信模块
本项目就是基于TCP网络通信搭建的。 TCP: 客户端:socket(),connect(). 服务端:socket(),bind(),listen(),accept(). 下面代码就是对原生API网络套接字的封装。需要熟悉原生API网络套接字接口。 下面这段代码,没什么好讲的,就不…...
模型 神经网络(通俗解读)
系列文章 分享 模型,了解更多👉 模型_思维模型目录。仿脑智能,深度学习,精准识别。 1 神经网络的应用 1.1 鸢尾花分类经典问题 神经网络的一个经典且详细的经典应用是鸢尾花分类问题 。主要是通过构建一个神经网络模型来自动区分…...
事务的使用
1.如何使用事务: 1.1.事务的完成过程: 1.步骤1:开启事务2.步骤2:一系列的DML操作3.步骤3:事务结束状态:提交事务(COMMIT),中止事务(事务回滚ROLLBACK) 1.2.事务分类: …...
【免费】企业级大模型应用推荐:星环科技无涯·问知
无涯问知是星环科技发布的大模型应用系统,那么我们先简单了解下星环科技吧! 星环科技(股票代码:688031)致力于打造企业级大数据和人工智能基础软件,围绕数据的集成、存储、治理、建模、分析、挖掘和流通等数…...
从〇 搭建PO模式的Web UI自动化测试框架
Page Object模式简介 核心思想 将页面元素和操作行为封装在独立的类中,形成页面对象(Page Object)。每个页面对象代表应用程序中的一个特定页面或组件。 优点: 代码复用性高 页面对象可以在多个测试用例中复用。 易于维护 …...
在Ubuntu中重装Vscode(没有Edit Configurations(JSON)以及有错误但不标红波浪线怎么办?)
在学习时需要将vscode删除重装,市面上很多方法都不能删干净,删除之后拓展都还在。因此下面的方法可以彻底删除。注意,我安装时使用的是snap方法。 如果你的VScode没有Edit Configurations(JSON),以及有错误但不标红波浪线的话&…...
Oracle 用户-表空间-表之间关系常用SQL
问题: 当某一个表数据量特别大,突然插入数据一直失败,可能是表空间不足,需要查看表的使用率 用户-表空间-表之间关系:用户可以有多个表空间,表空间可以有多个表,表只能拥有一个表空间和用户 1.…...
家政服务管理系统小程序的设计
管理员账户功能包括:系统首页,个人中心,用户管理,管理阿姨管理,家政公司管理,服务项目管理,家政预约管理,评价管理,留言板管理,系统管理 微信端账号功能包括…...
【算法】并查集的介绍与使用
1.并查集的概论 定义: 并查集是一种树型的数据结构,用于处理一些不相交集合的合并及查询问题(即所谓的并、查)。比如说,我们可以用并查集来判断一个森林中有几棵树、某个节点是否属于某棵树等。 主要构成: …...
Shell——运算符
在 Shell 编程中,运算符用于执行各种类型的操作,如算术运算、字符串比较、文件测试等。以下是 Shell 中常用的运算符分类和示例: 1. 算术运算符 Shell 中使用 expr 或 $(( ... )) 来进行算术运算。 : 加法-: 减法*: 乘法/: 除法%: 取余**:…...
SweetAlert2
1. SweetAlert2 SweetAlert2是一个基于JavaScript的库, 用于在网页上替换标准的警告框(alert), 确认框(confirm)和提示框(prompt), 并提供更加美观和用户友好的界面.需要在项目中引入SweetAlert2, 可以通过CDN链接或者将库文件下载到你的项目中来实现这一点. 通过CDN引入:<…...
c语言中比较特殊的输入函数
目录 一.getchar()函数 1.基本功能 2.使用方法 (1).读取单个字符 (2).读取多个字符(直到遇到换行符) (3).处理输入中的空白字符 3.返回值 4.应用场景 5.注意事项 二.fgets()函数 1.函数原型 2.工作原理 3.使用示例 (1).从标准输入读取一行…...
Java版自动化测试之Selenium
1. 准备 编程语言:Java JDK版本:17 Maven版本:3.6.1 2. 开始 声明:本次只测试Java的Selenium自动化功能 本次示例过程:打开谷歌游览器,进入目标网址,找到网页的输入框元素,输入指…...
C语言入门知识全解析:基本结构、数据类型及示例特点
1. C语言简介 C语言是一种通用的、过程式的编程语言,由贝尔实验室的Dennis Ritchie在1972年开发。来源:不全面,仅供参考 http://nanhaitongcheng.com/kx/8106.html它被广泛应用于系统软件开发、嵌入式系统、游戏开发等领域。 2. C语言的基本结…...
Simulink仿真速度太慢?试试用C Mex S函数给模型“提提速”
Simulink性能优化实战:用C Mex S函数突破仿真速度瓶颈 当Simulink模型运行缓慢时,工程师们常常陷入漫长的等待。本文将揭示如何通过C Mex S函数这一利器,将仿真速度提升10倍以上,特别适合处理复杂算法、图像处理和大规模系统仿真等…...
保姆级教程:从GEO下载Hi-C数据到HiC-Pro完整分析(避坑指南+实战脚本)
从零开始掌握Hi-C数据分析:HiC-Pro全流程实战与避坑指南 Hi-C技术已经成为三维基因组研究的重要工具,但对于刚接触生物信息学的研究人员来说,从原始数据到最终分析结果的过程往往充满挑战。本文将带你完整走通Hi-C数据分析全流程,…...
Qwen3-14B私有化效果:支持国密算法加密的API通信安全方案
Qwen3-14B私有化效果:支持国密算法加密的API通信安全方案 1. 私有部署镜像概述 Qwen3-14B私有部署镜像是基于通义千问大语言模型优化定制的专业解决方案,特别针对RTX 4090D 24GB显存配置进行了深度适配。这个镜像不仅提供了完整的运行环境和模型依赖&a…...
别再死记硬背了!用这5个真实运维脚本,搞定90%的Shell面试题
5个实战Shell脚本:从面试题到真实运维场景的蜕变 在技术面试中,Shell脚本能力往往是区分普通候选人和优秀候选人的关键指标。但死记硬背面试题答案的时代已经过去,现代企业更看重候选人解决实际问题的能力。本文将带你通过5个真实运维场景中的…...
TextGrad部署与性能优化:生产环境最佳实践
TextGrad部署与性能优化:生产环境最佳实践 【免费下载链接】textgrad Automatic Differentiation via Text -- using large language models to backpropagate textual gradients. 项目地址: https://gitcode.com/gh_mirrors/te/textgrad TextGrad是一款基于…...
pngquant终极错误排查手册:10个常见问题与快速解决方案
pngquant终极错误排查手册:10个常见问题与快速解决方案 【免费下载链接】pngquant Lossy PNG compressor — pngquant command based on libimagequant library 项目地址: https://gitcode.com/gh_mirrors/pn/pngquant pngquant作为一款高效的PNG有损压缩工具…...
保姆级教程:用UniApp+佳博打印机实现小票与条形码打印(含完整TSC/ESC指令封装)
UniApp佳博打印机实战:从蓝牙连接到小票打印的全流程解析 在移动零售和仓储管理场景中,蓝牙小票打印是提升工作效率的关键环节。本文将手把手带您实现UniApp与佳博打印机的深度整合,涵盖蓝牙连接管理、TSC/ESC指令封装、40mm50mm小票排版等核…...
移植U-Boot驱动到XSDK裸机程序:以RTL8211FS在Zynq上的网络调试为例
移植U-Boot驱动到XSDK裸机程序:以RTL8211FS在Zynq上的网络调试为例 在嵌入式开发中,驱动移植是一项常见但极具挑战性的任务。当我们需要将已经在U-Boot或Linux环境下稳定工作的硬件驱动移植到裸机环境时,往往会遇到各种意料之外的问题。本文…...
保姆级教程:手把手教你本地部署Qwen2.5-7B-Instruct旗舰模型
保姆级教程:手把手教你本地部署Qwen2.5-7B-Instruct旗舰模型 1. 前言:为什么选择Qwen2.5-7B-Instruct Qwen2.5-7B-Instruct是阿里通义千问团队在2024年9月发布的最新旗舰级开源大语言模型。相比轻量级的1.5B/3B版本,7B参数规模带来了质的飞…...
