当前位置: 首页 > news >正文

数字人部署之VITS+Wav2lip数据流转处理问题

一、模型
VITS模型训练教程VITS-从零开始微调(finetune)训练并部署指南-支持本地云端

Wav2lip是2D数字人,可参考训练嘴型同步模型Wav2Lip

PS:以上模型都是开源可用。

二. VITS数据处理问题

  1. VITS模型的输出为一维的numpy类型数据,官方开源代码中给出的处理方法为使用scipy.io.wavfile提供将numpy数据采样并存为音频文件,代码示例为
    if language is not None:text = language_marks[language] + text + language_marks[language]speaker_id = speaker_ids[spk]stn_tst = get_text(text, hps, False)with no_grad():x_tst = stn_tst.unsqueeze(0).to(device)x_tst_lengths = LongTensor([stn_tst.size(0)]).to(device)sid = LongTensor([speaker_id]).to(device)audio = net_g.infer(x_tst, x_tst_lengths, sid=sid, noise_scale=noise_scale, noise_scale_w=noise_scale_w,length_scale=1.0 / length)[0][0, 0].data.cpu().float().numpy()del stn_tst, x_tst, x_tst_lengths, sidwavf.write(str(output_dir)+"/"+output_name+".wav",hps.data.sampling_rate,audio)

但是如果要将该模型作为数字人的音频克隆输出,上述代码的保存方式对于实时性形成较大阻碍,我们应该考虑如何不写入文件直接传输到如Web前端进行播放音频。经过思考,若前端使用如下代码解析音频,

<div><audio id="audio" controls autoplay style="display: none;"></audio>
</div>const audioEl = document.querySelector('audio')
audioEl.src= "data:audio/mp3;base64,"+ messageData

该前端不可解析numpy类型数据,并且如果直接将numpy类型音频数据直接转为字节类型数据并回传到前端也是不可行的。我们仔细阅读开源模型提供的解决方案中出现的wavf.write函数,发现,我们可以直接从该函数的实现进行稍微修改,即可实现numpy类型音频数据不写入文件直接传输到如Web前端进行播放音频,修改结果如下所示

    # 采样header_e = b'RIFF'header_m = b'\x00\x00\x00\x00'# 音频参数fs = 16000format_tag = 0x0003channels = 1bit_depth = _audio.dtype.itemsize * 8bytes_per_second = fs * ( bit_depth // 8) * channelsblock_align = channels * (bit_depth // 8)fmt_chunk_data = struct.pack('<HHIIHH', format_tag, channels, fs, bytes_per_second, block_align, bit_depth)fmt_chunk_data += b'\x00\x00'header_l = b'WAVEfmt ' + struct.pack('<I', len(fmt_chunk_data)) + fmt_chunk_data + b'fact' + struct.pack('<II', 4, _audio.shape[0])# numpy类型音频数据data = b'data'pre_data = struct.pack('<I', _audio.nbytes)audio_data = header_e + header_m + header_l + data + pre_data + _audio.ravel().view('b').datasize = len(audio_data)_len = struct.pack('<I', size - 8)audio_data = header_e + _len + header_l + data + pre_data + _audio.ravel().view('b').data

上述代码的最后一行生成的audio_data 变量即为可回传到前端进行正常播放的音频字节信息。由此也可以看出为什么直接将numpy类型音频数据直接转为字节类型数据并回传到前端也是不可行的,其原因在于音频数据存在固定保存结构。

三、VITS输出结构驱动Wav2lip

  1. 由于VITS模型的输出为numpy类型的音频数据,Wav2lip按照官方给出的开源处理方式为输入一个音频文件,然后将该音频文件以numpy形式进行读取,然后转成梅尔图谱的形式,与图片进行batch_size匹配后输入到网络中驱动相关帧的嘴型变化。如果直接读取音频文件将会是一个耗时的任务,为此,我们应该直接将VITS的numpy类型数据直接传入到Wav2lip,从而跳过读取文件和形成numpy类型的数据过程,减少工程实现上的时间。
  2. 针对Wav2lip模型的优化方案
    后续给出。

相关文章:

数字人部署之VITS+Wav2lip数据流转处理问题

一、模型 VITS模型训练教程VITS-从零开始微调&#xff08;finetune&#xff09;训练并部署指南-支持本地云端 Wav2lip是2D数字人&#xff0c;可参考训练嘴型同步模型Wav2Lip PS:以上模型都是开源可用。 二. VITS数据处理问题 VITS模型的输出为一维的numpy类型数据&#xff…...

RK3568笔记五:基于Yolov5的训练及部署

若该文为原创文章&#xff0c;转载请注明原文出处。 一. 部署概述 环境&#xff1a;Ubuntu20.04、python3.8 芯片&#xff1a;RK3568 芯片系统&#xff1a;buildroot 开发板&#xff1a;ATK-DLRK3568 开发主要参考文档&#xff1a;《Rockchip_Quick_Start_RKNN_Toolkit2_C…...

VR虚拟现实:VR技术如何进行原型制作

VR虚拟现实原型制作 利用VR虚拟现实软件进行原型制作可以用于增强原型测试期间的沉浸感&#xff0c;减少产品设计迭代次数&#xff0c;并将与产品原型制作相关的成本降低40-65%。 VR虚拟现实原型制作市场规模 用于原型制作的虚拟现实 (VR) 市场在 2017 年估计为 2.104 亿美元…...

51单片机入门

一、单片机以及开发板介绍 写在前面&#xff1a;本文为作者自学笔记&#xff0c;课程为哔哩哔哩江协科技51单片机入门教程&#xff0c;感兴趣可以看看&#xff0c;适合普中A2开发板或者HC6800-ESV2.0江协科技课程所用开发板。 工具安装请另行搜索&#xff0c;这里不做介绍&…...

notes_质谱蛋白组学数据分析基础知识

目录 1. 蛋白组学方法学1.1 液相-质谱法1) 基本原理2) bottom-up策略的基本流程 1.2 PEA/Olink 2. 质谱数据分析2.1 原始数据格式2.2 分析过程1&#xff09;鉴定搜索引擎&#xff08;质谱组学&#xff09;重难点/潜在的研究方向 2&#xff09;定量3&#xff09;预处理 2.3 下游…...

【Python基础】一个简单的TCP通信程序

&#x1f308;欢迎来到Python专栏 &#x1f64b;&#x1f3fe;‍♀️作者介绍&#xff1a;前PLA队员 目前是一名普通本科大三的软件工程专业学生 &#x1f30f;IP坐标&#xff1a;湖北武汉 &#x1f349; 目前技术栈&#xff1a;C/C、Linux系统编程、计算机网络、数据结构、Mys…...

算法之双指针

双指针算法的作用 双指针算法是一种使用2个变量对线性结构(逻辑线性/物理线性)&#xff0c;进行操作的算法&#xff0c;双指针可以对线性结构进行时间复杂度优化&#xff0c;可以对空间进行记忆或达到某种目的。 双指针算法的分类 1.快慢指针 2.滑动窗口 3.左右指针 4.前后指…...

Redis被攻击纪实

一、前言 声明&#xff1a;本文仅供技术交流使用&#xff0c;严禁采用本文的方法进行任何非法活动。 上周新来的同事分享Redis的原理和机制&#xff0c;想起2017年的时候测试环境Redis被攻击&#xff0c;最后只能重新安装服务器&#xff0c;今天试验一把利用Redis漏洞进行攻击…...

AI工具-PPT-SlidesAI

SlidesAI 使用手册 https://tella.video/get-started-with-slidesai-tutorial-18yq 简介 SlidesAI 是一款快速创建演示文稿的AI工具&#xff0c;适用于无设计经验的用户。 开始使用 1. **安装与设置** - 访问 [SlidesAI官网](https://www.slidesai.io/zh)。 - 完成简单的设置…...

原型链污染攻击

想要很清楚了理解原型链污染我们首先必须要弄清楚原型链这个概念 可以看这篇文章&#xff1a;对象的继承和原型链 目录 prototype和__proto__分别是什么&#xff1f; 原型链继承 原型链污染是什么 哪些情况下原型链会被污染&#xff1f; 例题1&#xff1a;Code-Breaking 2…...

Android Glide transform圆形图CircleCrop动态代码描边绘制外框线并rotateImage旋转,Kotlin

Android Glide transform圆形图CircleCrop动态代码描边绘制外框线并rotateImage旋转&#xff0c;Kotlin <?xml version"1.0" encoding"utf-8"?> <FrameLayout xmlns:android"http://schemas.android.com/apk/res/android"xmlns:app&q…...

【ruoyi】微服务关闭登录验证码

登录本地的nacos服务&#xff0c;修改&#xff1a;配置管理-配置列表-ruoyi-gateway-dev.yml 将验证码的enabled设置成false&#xff0c;即可...

AI:78-基于深度学习的食物识别与营养分析

🚀 本文选自专栏:人工智能领域200例教程专栏 从基础到实践,深入学习。无论你是初学者还是经验丰富的老手,对于本专栏案例和项目实践都有参考学习意义。 ✨✨✨ 每一个案例都附带有在本地跑过的代码,详细讲解供大家学习,希望可以帮到大家。欢迎订阅支持,正在不断更新中,…...

日本it培训班,如何选择靠谱的赴日IT培训班?

随着科技的发展&#xff0c;信息技术行业在全球范围内迅速发展&#xff0c;并呈现出蓬勃的发展态势&#xff0c;在日本&#xff0c;IT行业也成为一种极为热门的职业选择。日本专门学校在这个领域内培养了许多IT从业者&#xff0c;成为了众多IT公司的培养基地。如果你对IT产业感…...

51单片机PCF8591数字电压表LCD1602液晶显示设计( proteus仿真+程序+设计报告+讲解视频)

51单片机PCF8591数字电压表LCD1602液晶设计 ( proteus仿真程序设计报告讲解视频&#xff09; 仿真图proteus7.8及以上 程序编译器&#xff1a;keil 4/keil 5 编程语言&#xff1a;C语言 设计编号&#xff1a;S0060 51单片机PCF8591数字电压表LCD1602液晶设计 1.主要功能&a…...

缅因州政府通知130万人MOVEit数据泄露事件

大家好&#xff0c;今天我要向大家通报一个令人震惊的消息&#xff1a;缅因州政府的系统遭到了入侵&#xff0c;黑客利用MOVEit文件传输工具的漏洞&#xff0c;获取了约130万人的个人信息&#xff0c;这几乎相当于该州的整个人口数量。 MOVEit攻击是Clop勒索软件团伙进行的一次…...

4.2 onnx简化模型结构

前言 对已有的onnx结构&#xff0c;进行简化操作&#xff0c;onnx提供两种常规操作 方式一 假设为 model.onnx, 比较简单粗暴 # 简化 onnxsim model.onnx model_sim.onnx方式二 稍微复杂点&#xff0c;代码有点多 import onnx import argparse from onnxsim import simpl…...

通用的链栈实现(C++)

template<class T> class MyStack//链栈 { private:struct StackNode{T data;StackNode* next;StackNode(const T& val T(), StackNode* p nullptr) :data(val), next(p) {}//};StackNode* top;int cursize;void clone(const MyStack& s){Clear();cursize s.c…...

物联网AI MicroPython学习之语法 bluetooth蓝牙

学物联网&#xff0c;来万物简单IoT物联网&#xff01;&#xff01; bluetooth 介绍 该模块为板上的蓝牙控制器提供了相关接口。目前支持低功耗蓝牙 (BLE)的Central&#xff08;中央&#xff09;, Peripheral&#xff08;外设&#xff09;, Broadcaster&#xff08;广播者&…...

React中的key有什么作用?

一、是什么 首先,先给出react组件中进行列表渲染的一个示例: const data = [ { id: 0, name: abc }, { id: 1, name: def }, { id: 2, name: ghi }, { id: 3, name: jkl } ]; const ListItem = (props) => { return <li>{props.name}</li>; }; con…...

电力电子新手必看:SPWM单极性倍频调制在Simulink中的实现与优化

电力电子新手必看&#xff1a;SPWM单极性倍频调制在Simulink中的实现与优化 在电力电子领域&#xff0c;正弦脉宽调制&#xff08;SPWM&#xff09;技术因其简单高效而广受欢迎。对于初学者而言&#xff0c;单极性倍频调制作为SPWM的一种进阶实现方式&#xff0c;能够显著提升输…...

微前端状态管理的真相:Module Federation + 跨应用通信实战

本周大前端要闻Compose Multiplatform v1.11.10-alpha01&#xff1a;进一步完善跨平台 UI 状态同步能力&#xff0c;ViewModel 共享机制改进KotlinConf’26 演讲阵容公布&#xff1a;多场 Session 聚焦 Kotlin 多平台架构与状态管理&#xff0c;值得关注Retrofit 3.0.0 正式发布…...

OpenClaw v2026.4.2 深度解读:插件边界继续外移,Task Flow 真正走向可持久化运维

&#x1f525;个人主页&#xff1a;杨利杰YJlio❄️个人专栏&#xff1a;《Sysinternals实战教程》《Windows PowerShell 实战》《WINDOWS教程》《IOS教程》《微信助手》《锤子助手》 《Python》 《Kali Linux》《那些年未解决的Windows疑难杂症》&#x1f31f; 让复杂的事情更…...

C++资源控制哲学:从push_back与emplace_back看左值右值

一、从问题开始std::vector<Person> people; Person bob("bob", 22);people.push_back(bob); // 左值 people.push_back(Person("alice", 25)); // 右值 people.emplace_back("charlie", 30); // 直接构造为什么需要这么多插入…...

Halcon局部可变形匹配实战:用‘垫片’案例手把手教你搞定弹性物体定位与缺陷检测

Halcon局部可变形匹配实战&#xff1a;弹性物体定位与缺陷检测全流程解析 在工业视觉检测领域&#xff0c;弹性零件的精准定位一直是工程师面临的棘手难题。想象一下&#xff0c;当您面对一批因冲压工艺差异导致厚度不均的橡胶垫片&#xff0c;或是装配过程中发生拉伸变形的金属…...

保姆级教程:用CAPL脚本在CANalyzer里离线计算电池Ah积分(附完整代码)

从零实现CANalyzer电池容量离线分析&#xff1a;CAPL脚本开发实战指南 在新能源汽车和储能系统的开发测试中&#xff0c;电池容量(Ah)的精确计算是评估电池性能的核心指标之一。对于刚接触CAN总线分析的工程师来说&#xff0c;如何在CANalyzer环境中搭建完整的离线分析流程&…...

Magisk Alpha深度隐匿实战:从Momo检测到BL列表的终极配置

1. 为什么需要深度隐匿Root环境&#xff1f; 最近两年&#xff0c;银行类APP和游戏厂商的检测手段越来越严格。我去年用某银行APP时&#xff0c;明明Root已经隐藏得很好&#xff0c;结果转账时突然弹出"设备环境异常"的提示&#xff0c;直接中断交易。后来才知道是新…...

AutoUnipus:智能刷课助手终极指南,2025年实现U校园全自动答题

AutoUnipus&#xff1a;智能刷课助手终极指南&#xff0c;2025年实现U校园全自动答题 【免费下载链接】AutoUnipus U校园脚本,支持全自动答题,百分百正确 2024最新版 项目地址: https://gitcode.com/gh_mirrors/au/AutoUnipus 在当今数字化教育时代&#xff0c;大学生们…...

统信UOS桌面系统高效运维:从入门到精通的命令行指南

1. 为什么你需要掌握统信UOS命令行&#xff1f; 第一次接触统信UOS桌面系统时&#xff0c;很多人都会被它精美的图形界面吸引。但真正用过一段时间后&#xff0c;你会发现图形界面虽然友好&#xff0c;但在处理批量操作、远程管理、自动化任务时效率远不如命令行。我刚开始用U…...

RWTS-PDFwriter:macOS PDF创建效率提升解决方案

RWTS-PDFwriter&#xff1a;macOS PDF创建效率提升解决方案 【免费下载链接】RWTS-PDFwriter An OSX print to pdf-file printer driver 项目地址: https://gitcode.com/gh_mirrors/rw/RWTS-PDFwriter RWTS-PDFwriter是一款专为macOS设计的虚拟打印机驱动程序&#xff0…...