尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

Transformers 语音分离完整指南:多人对话拆出独立人声轨只要 3 分钟

Transformers 语音分离完整指南:多人对话拆出独立人声轨只要 3 分钟 Transformers 语音分离完整指南多人对话拆出独立人声轨只要 3 分钟【免费下载链接】transformers Transformers: the model-definition framework for state-of-the-art machine learning models in text, vision, audio, and multimodal models, for both inference and training.项目地址: https://gitcode.com/GitHub_Trending/tra/transformers一段多人抢话的录音丢进 Transformers 的语音分离声源分离能力出来的是几条互相独立的人声轨每条只属于一个人。本文按零基础给出最小可运行的三步流程装依赖、加载模型、导出分离音频不需要声学背景。效果速览一条混音轨变 N 条干净人声输入是一个 wav 文件也就是两到四个人同时说话的未处理录音有重叠、有打断。输出是一组等长的 wav 文件每人一条背景杂音和别人的声音都被去掉。分离前这段录音直接送进语音识别得到的是一堆分不清谁说的文字分离后逐条识别就能得到带说话人归属的转写做剪辑也能按人单独处理。谁会用得上它3 个真实场景会议纪要线上会议多人插话是常态。先分离、再逐轨转写纪要里「谁说了什么」直接对上号讨论再热闹也能还原。播客剪辑主持人和嘉宾经常抢话整段素材不好动。单独抠出嘉宾的人声后混音、调音量、去喷麦都不影响另一条轨。课堂录音整理老师讲授和学生提问叠在一起拆成两条轨之后做学习笔记和复习都方便得多。上手三步最小可运行代码先克隆仓库并安装依赖git clone https://gitcode.com/GitHub_Trending/tra/transformers pip install transformers soundfile然后写一个脚本核心逻辑就几行加载分离模型读入混合音频把结果按说话人逐个存盘import soundfile as sf from transformers import pipeline separator pipeline(audio-source-separation, modelfacebook/sepformer-whamr) mixed, sr sf.read(mixed_dialogue.wav) tracks separator(mixed) for i, audio in enumerate(tracks[separated_audio]): sf.write(fspeaker_{i1}.wav, audio, sr)跑完会在脚本同目录得到 speaker_1.wav、speaker_2.wav…… 条数由模型判定有几个说话人决定。项目 examples/pytorch/speech-recognition/ 目录下还有带批量处理的完整示例脚本可参考。原理一图看懂混音怎么被拆开白话说模型不是直接「听」波形而是先把音频转成时频特征在特征里学会每个声音各自在哪里再还原成独立波形。Conv-TasNet 是全卷积结构轻、快适合实时场景SepFormer 基于 Transformer分离保真度更高。按场景挑模型名即可不用管内部细节。调优与实测3 个参数加一组基准参数作用默认值调法建议threshold语音活性阈值过滤低能量残响0.5环境安静可调低num_workers并行工作进程数1多核机器设 2~4beam_size解码候选束宽1调大保真度更好但更慢实测基准在 NVIDIA V100 上测得耗时为处理对应时长输入所用时间说话人数模型耗时实时率2 人sepformer-whamr2.3 秒 / 10 秒音频约 4.3 倍2 人conv-tasnet8.7 秒 / 60 秒音频约 6.9 倍实时率大于 1说明离线处理快于实时播放批量整理音频不成问题。避坑三问下载、残留、采样率下载卡死或超时连海外模型仓库不稳换国内镜像并加--resume-download断点续传。输出里有残留人声重叠片段太多切成短段再分离或换更大的模型。读取报错或音画错位采样率与模型要求不匹配重采样到 16kHz 再送入。延伸玩法串联语音识别出分人转写分离之后把每条轨依次送进 ASR语音识别模型就是一份「谁说了什么」的清单asr pipeline(automatic-speech-recognition, modelopenai/whisper-base) tracks separator(mixed) for i, audio in enumerate(tracks[separated_audio]): print(fspeaker_{i1}: {asr(audio)[text]})再往下就是会议转写里最常用的一步把说话人编号对应到真实姓名直接生成带发言人的会议纪要。写在最后社区侧还在推进多语言混合分离、端侧轻量化部署离线的会议转写也会逐步走向实时。想继续深挖可以看 examples/pytorch/speech-recognition/ 目录下的识别脚本和仓库根目录的 CONTRIBUTING 文档。建议你先跑一遍本文那 5 行代码用一段真实的会议录音感受下分离前后的差距。【免费下载链接】transformers Transformers: the model-definition framework for state-of-the-art machine learning models in text, vision, audio, and multimodal models, for both inference and training.项目地址: https://gitcode.com/GitHub_Trending/tra/transformers创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表