链接整理
github:SenseVoice、CosyVoice、FunAudioLLM-APP
魔搭:SenseVoice、CosyVoice、FunAudioLLM-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#等。
代码克隆下载
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)
- 前面的CosyVoice和SenseVoice都是funaudiollm-app子项目。
- CosyVoice和SenseVoice都可以部署在win上。
- 在funaudiollm-app会出现一些依赖版本问题,在所有文档中均没有一个统一的版本说明,建议部署的时候先拉取主项目代码,然后先在子项目中配置环境运行。
- 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中回答
- 在配置cosyvocie中出现cannot import name 'Annotated' from 'pydantic.typing',可能是python版本引起。
- 遇到下载慢的问题,导致服务器一直出现下载错误。(win的conda环境是不能给linux用的)解决办法:把本地配置好的conda环境上传到服务器,把文件在本地下载好,让后在服务器下载
Python |
就可以直接通过Xshell窗口上传文件torch-2.0.1+cu118-cp38-cp38-linux_x86_64.whl想要conda使用这个,就需要在安装依赖前,把这个文件放到conda目录下的wheels目录,然后在requirements.txt文件中添加--find-links /opt/miniconda3/wheels,这样在下载依赖中就会跳过这部分的下载
- 遇到No module named 'academicodec',academicodec是github上的一个项目,但是并不是该项目的子模块
- 解决办法:重新安装项目
- 因为网速的问题,导致今天一大半时间都花在了下载上。
- 虽然文件跑起来了但是,还是报错,官方群无人回答
- 今天在win上跑了一下全流程,初步了解了ollama,让后部署在了本地的win上。
- 遇到最严重的问题是,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 (一次性的环境,下次需要重新设置)
- 在使用音色克隆的过程中prompt_speech_16k = load_wav('wav/new_prompt_trimmed.wav', 16000),这里输入的音频不能超过30s左右,同时对于克隆的文字,句号之间不能间隔太多文字,否则生成这部分的音频会过快,同时对于重复三个字以上的句子,可能会出现错乱,窜位的情况
- 考虑到我们服务器的资源带不动ollama,那么现在使用了阿里的线上大模型,同时经过测试,在sensevoice的封装好的识别调用函数暂不支持音频文件变量,现在只能给这个封装好的函数文件路径,让它自己去加载音频文件。
- 现在做好的一个流程大致为,输入音频获得识别的文字结果(这里的识别结果没有标定符号),然后拿着音频文件去交给大模型进行翻译处理,得出一个翻译后的文字结果,然后拿着文件结果去生成翻译后的音频文件。
- cosyvoice的生成效率越为每5秒生成1秒的音频,880个中文字符生成了259秒(4分钟)的音频文件,共花费1369秒(22分钟)。
- 一直运行好好的代码,当我运行封装好的接口代码中会报错,显示我GPU内存不足,重新运行之前好的代码,也是一样的问题,显示内存不足。解决办法:重启电脑,可能原因:在使用模型的过程中有GPU内存没有释放
- 模型生成的中文男声语速慢!!!!!
- 完成基础的接口功能了(上传一个视频文件,选择你要翻译语音和音频角色,接口返回一个wav音频文件)