SenseVoice&CosyVoice了解

链接整理

githubSenseVoiceCosyVoiceFunAudioLLM-APP

 魔搭SenseVoiceCosyVoiceFunAudioLLM-APP
 

项目:SenseVoice

用途:SenseVoice是具有音频理解能力的音频基础模型,包括语音识别(ASR)、语种识别(LID)、语音情感识别(SER)和声学事件分类(AEC)或声学事件检测(AED)。本项目提供SenseVoice模型的介绍以及在多个任务测试集上的benchmark,以及体验模型所需的环境安装的与推理方式。

核心功能:

  • 多语言识别: 采用超过40万小时数据训练,支持超过50种语言,识别效果上优于Whisper模型。
  • 富文本识别:
  • 具备优秀的情感识别,能够在测试数据上达到和超过目前最佳情感识别模型的效果。
  • 支持声音事件检测能力,支持音乐、掌声、笑声、哭声、咳嗽、喷嚏等多种常见人机交互事件进行检测。
  • 高效推理: SenseVoice-Small模型采用非自回归端到端框架,推理延迟极低,10s音频推理仅耗时70ms,15倍优于Whisper-Large。
  • 微调定制: 具备便捷的微调脚本与策略,方便用户根据业务场景修复长尾样本问题。
  • 服务部署: 具有完整的服务部署链路,支持多并发请求,支持客户端语言有,python、c++、html、java与c#等。

SenseVoice部署

代码克隆下载

git clone --recursive https://github.com/FunAudioLLM/SenseVoice.git
git submodule update --init --recursive
pip install -r requirements.txt

推理模型下载

#SDK模型下载
from modelscope import snapshot_download
model_dir = snapshot_download('iic/SenseVoiceSmall')

#使用示例
from model import SenseVoiceSmall

model_dir = "iic/SenseVoiceSmall"
m, kwargs = SenseVoiceSmall.from_pretrained(model=model_dir)


res = m.inference(
    data_in="https://isv-data.oss-cn-hangzhou.aliyuncs.com/ics/MaaS/ASR/test_audio/asr_example_zh.wav",
    language="auto", # "zn", "en", "yue", "ja", "ko", "nospeech"
    use_itn=False,
    **kwargs,
)

print(res)

使用funasr推理

from funasr import AutoModel

model_dir = "iic/SenseVoiceSmall"
input_file = (
    "https://isv-data.oss-cn-hangzhou.aliyuncs.com/ics/MaaS/ASR/test_audio/asr_example_zh.wav"
)

model = AutoModel(model=model_dir,vad_model="fsmn-vad",
                  vad_kwargs={"max_single_segment_time": 30000},
                  trust_remote_code=True, device="cuda:0")

res = model.generate(
    input=input_file,
    cache={},
    language="auto", # "zn", "en", "yue", "ja", "ko", "nospeech"
    use_itn=False,
    batch_size_s=0,
)

print(res)

项目:CosyVoice

用途:可生成定制语音,可以根据角色描述以及语气来生成语音
 

git clone --recursive https://github.com/FunAudioLLM/CosyVoice.git
git submodule update --init --recursiv
conda create -n cosyvoice python=3.8
#使用 conda

conda activate cosyvoice
# pynini is required by WeTextProcessing, use conda to install it as it can be executed on all platform.
conda install -y -c conda-forge pynini==2.1.5

pip install -r requirements.txt -i https://mirrors.aliyun.com/pypi/simple/ --trusted-host=mirrors.aliyun.com

pip install onnxruntime

pip install transformers

添加子项目路径变量

  • Windows 操作系统

 $env:PYTHONPATH = "third_party\Matcha-TTS;" + $env:PYTHONPATH

  • Unix 或 macOS

export PYTHONPATH=third_party/Matcha-TTS:$PYTHONPATH

可使用和下载模型

下载模型(模型存放地址在pretrained_models目录下)

通过代码下载
 

# SDK模型下载
from modelscope import snapshot_download
snapshot_download('iic/CosyVoice-300M', local_dir='pretrained_models/CosyVoice-300M')
snapshot_download('iic/CosyVoice-300M-SFT', local_dir='pretrained_models/CosyVoice-300M-SFT')
snapshot_download('iic/CosyVoice-300M-Instruct', local_dir='pretrained_models/CosyVoice-300M-Instruct')
snapshot_download('iic/CosyVoice-ttsfrd', local_dir='pretrained_models/CosyVoice-ttsfrd')

使用示例 

from cosyvoice.cli.cosyvoice import CosyVoice
from cosyvoice.utils.file_utils import load_wav
import torchaudio

cosyvoice = CosyVoice('pretrained_models/CosyVoice-300M-SFT')
# sft usage
print(cosyvoice.list_avaliable_spks())
output = cosyvoice.inference_sft('你好,我是通义生成式语音大模型,请问有什么可以帮您的吗?', '中文女')
torchaudio.save('sft.wav', output['tts_speech'], 22050)

cosyvoice = CosyVoice('pretrained_models/CosyVoice-300M')
# zero_shot usage, <|zh|><|en|><|jp|><|yue|><|ko|> for Chinese/English/Japanese/Cantonese/Korean
prompt_speech_16k = load_wav('zero_shot_prompt.wav', 16000)
output = cosyvoice.inference_zero_shot('收到好友从远方寄来的生日礼物,那份意外的惊喜与深深的祝福让我心中充满了甜蜜的快乐,笑容如花儿般绽放。', '希望你以后能够做的比我还好呦。', prompt_speech_16k)
torchaudio.save('zero_shot.wav', output['tts_speech'], 22050)


# cross_lingual usage
prompt_speech_16k = load_wav('cross_lingual_prompt.wav', 16000)
output = cosyvoice.inference_cross_lingual('<|en|>And then later on, fully acquiring that company. So keeping management in line, interest in line with the asset that\'s coming into the family is a reason why sometimes we don\'t buy the whole thing.', prompt_speech_16k)
torchaudio.save('cross_lingual.wav', output['tts_speech'], 22050)

cosyvoice = CosyVoice('pretrained_models/CosyVoice-300M-Instruct')
# instruct usage, support <laughter></laughter><strong></strong>[laughter][breath]
output = cosyvoice.inference_instruct('在面对挑战时,他展现了非凡的<strong>勇气</strong>与<strong>智慧</strong>。', '中文男', 'Theo \'Crimson\', is a fiery, passionate rebel leader. Fights with fervor for justice, but struggles with impulsiveness.')
torchaudio.save('instruct.wav', output['tts_speech'], 22050)

日志

  1. 前面的CosyVoice和SenseVoice都是funaudiollm-app子项目。
  2. CosyVoice和SenseVoice都可以部署在win上。
  3. 在funaudiollm-app会出现一些依赖版本问题,在所有文档中均没有一个统一的版本说明,建议部署的时候先拉取主项目代码,然后先在子项目中配置环境运行。
  4. funaudiollm-app目前不能部署在win上:当我配置好前两者的环境并成功运行后,在启动主项目,出现报错ModuleNotFoundError: No module named 'ttsfrd',在CosyVoice找到相关的导入语句为pip install ttsfrd-0.3.6-cp38-cp38-linux_x86_64.whl,但是该模块是一个适用于 Linux 的 ttsfrd 轮子文件 (ttsfrd-0.3.6-cp38-cp38-linux_x86_64.whl),并没有win的版本。

在官方issues中回答


  1. 在配置cosyvocie中出现cannot import name 'Annotated' from 'pydantic.typing',可能是python版本引起。
  2. 遇到下载慢的问题,导致服务器一直出现下载错误。(win的conda环境是不能给linux用的)解决办法:把本地配置好的conda环境上传到服务器,把文件在本地下载好,让后在服务器下载

Python
yum -y install lrzsz

就可以直接通过Xshell窗口上传文件torch-2.0.1+cu118-cp38-cp38-linux_x86_64.whl想要conda使用这个,就需要在安装依赖前,把这个文件放到conda目录下的wheels目录,然后在requirements.txt文件中添加--find-links /opt/miniconda3/wheels,这样在下载依赖中就会跳过这部分的下载

  1. 遇到No module named 'academicodec',academicodec是github上的一个项目,但是并不是该项目的子模块
  2. 解决办法:重新安装项目
  3. 因为网速的问题,导致今天一大半时间都花在了下载上。
  4. 虽然文件跑起来了但是,还是报错,官方群无人回答


  1. 今天在win上跑了一下全流程,初步了解了ollama,让后部署在了本地的win上。
  2. 遇到最严重的问题是,cosyvoice.flow.flow_matching - ModuleNotFoundError: No module named 'matcha.models'; 'matcha' is not a package  ,那么这里的问题就出在环境变量上,文档中设置变量的命令为:export PYTHONPATH=third_party/Matcha-TTS:$PYTHONPATH很明显,这个指向了cosyvoice的子项目Matcha-TTS,所以为什么会遇到这个模块缺少的原因也很明显了。最后解决这个问题使用的命令为 $env:PYTHONPATH = "D:\test\cosyvoice\CosyVoice\third_party\Matcha-TTS;"+$env:PYTHONPATH (一次性的环境,下次需要重新设置)
  3. 在使用音色克隆的过程中prompt_speech_16k = load_wav('wav/new_prompt_trimmed.wav', 16000),这里输入的音频不能超过30s左右,同时对于克隆的文字,句号之间不能间隔太多文字,否则生成这部分的音频会过快,同时对于重复三个字以上的句子,可能会出现错乱,窜位的情况

  1. 考虑到我们服务器的资源带不动ollama,那么现在使用了阿里的线上大模型,同时经过测试,在sensevoice的封装好的识别调用函数暂不支持音频文件变量,现在只能给这个封装好的函数文件路径,让它自己去加载音频文件。
  2. 现在做好的一个流程大致为,输入音频获得识别的文字结果(这里的识别结果没有标定符号),然后拿着音频文件去交给大模型进行翻译处理,得出一个翻译后的文字结果,然后拿着文件结果去生成翻译后的音频文件。
  3. cosyvoice的生成效率越为每5秒生成1秒的音频,880个中文字符生成了259秒(4分钟)的音频文件,共花费1369秒(22分钟)。
  4. 一直运行好好的代码,当我运行封装好的接口代码中会报错,显示我GPU内存不足,重新运行之前好的代码,也是一样的问题,显示内存不足。解决办法:重启电脑,可能原因:在使用模型的过程中有GPU内存没有释放
  5. 模型生成的中文男声语速慢!!!!!
  6. 完成基础的接口功能了(上传一个视频文件,选择你要翻译语音和音频角色,接口返回一个wav音频文件)
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

weighless1129

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值