语镜VocaMirror——基于sensevoice、cosyvoice和qwen模型实现与“自身声音”对话

简介: 语镜 VocaMirror 是一个创新的对话系统,灵感来源于汤姆猫游戏和亲人语音克隆项目,旨在让用户与自己的声音进行对话。系统融合了语音识别、自然语言处理及个性化语音合成技术,提供趣味互动、心理治疗辅助及多功能扩展等应用。用户可通过 Gradio 界面轻松使用,实现语音转文本、对话生成及个性化语音回复等功能。

项目简介

语镜 VocaMirror 系统受汤姆猫游戏和亲人语音克隆项目的启发,旨在实现用户与
“自己声音”对话的功能。该系统集成语音识别、自然语言处理和个性化语音合成技术,
应用了sensevoice、cosyvoice和qwen模型。具备以下应用价值:

  • 趣味性互动:提供与自己声音对话的全新体验。
  • 心理治疗辅助:熟悉的声音有助于缓解自闭症等患者的心理防御。
  • 多功能拓展:可用作辩论训练、心灵自省等角色设定。

image.png

(界面展示)

VocaMirror 的主要功能包括:

  • 语音识别 (ASR):将用户语音转录为文本。
  • 自然语言生成 (LLM):基于上下文生成对话回复。
  • 语音合成 (TTS):将生成的文本转为个性化的语音回复。
  • 用户界面:通过 Gradio 实现易用的前端界面。

环境安装与运行准备

conda create -n cosyvoice python=3.8
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

# 您可以解压 ttsfrd 资源并安装 ttsfrd 包以获得更好的文本标准化性能
cd pretrained_models/CosyVoice-ttsfrd/
unzip resource.zip -d .
pip install ttsfrd-0.3.6-cp38-cp38-linux_x86_64.whl

pip install gradio
pip install -r requirements.txt
pip install -U funasr modelscope
pip install dashscope

前往github或魔搭社区下载cosyvoice模型与sensevoice模型,将webui_qwen.py放置在cosyvoice/Cosyvoice
cosyvoice魔搭链接:https://www.modelscope.cn/models/iic/CosyVoice-300M
sensevoice魔搭链接:https://www.modelscope.cn/models/iic/SenseVoiceSmall

代码解析

1.引入必要的依赖

import gradio as gr
import os
import sys
import numpy as np
import torch
import argparse
import random
from dashscope import Generation
from cosyvoice.cli.cosyvoice import CosyVoice
from cosyvoice.utils.file_utils import load_wav, logging
from funasr import AutoModel
import torchaudio
import librosa
import dashscope

2. 配置模型与参数

2.1 DashScope API 配置

dashscope.api_key = '申请的通义api_key'

2.2 初始化模型

cosyvoice = CosyVoice('pretrained_models/CosyVoice-300M-Instruct')
asr_model = AutoModel(
    model="iic/SenseVoiceSmall",
    vad_model="iic/speech_fsmn_vad_zh-cn-16k-common-pytorch",
    vad_kwargs={
   "max_single_segment_time": 30000},
    trust_remote_code=True,
    disable_update=True,
)
prompt_sr, target_sr = 16000, 22050

CosyVoice:用于语音复刻的模型,支持从少量语音数据中生成相似的声音。
ASR 模型:用于将用户语音转录为文本。vad_model 提供语音活动检测以提升识别质量。
采样率设置:输入语音采样率为 16kHz,生成语音目标采样率为 22.05kHz。

3. 语音处理

3.1 音频后处理

def postprocess(speech, top_db=60, hop_length=220, win_length=440):
    speech, _ = librosa.effects.trim(
        speech, top_db=top_db,
        frame_length=win_length,
        hop_length=hop_length
    )
    if speech.abs().max() > 0.8:
        speech = speech / speech.abs().max() * 0.8
    return torch.concat([speech, torch.zeros(1, int(target_sr * 0.2))], dim=1)

去除静音:通过 librosa.effects.trim 去除音频中的多余静音部分。
音量归一化:限制音频最大幅值为 0.8,防止过大或失真。

3.2 ASR 推理

def transcribe_audio(audio_file):
    waveform, sample_rate = torchaudio.load(audio_file)
    if sample_rate != 16000:
        waveform = torchaudio.transforms.Resample(sample_rate, 16000)(waveform)
    transcription = asr_model.generate(input=waveform[0].numpy())[0]["text"]
    transcription = re.sub(r"<\|.*?\|>", "", transcription).strip()
    return transcription

加载音频:使用 torchaudio 加载音频文件。
采样率调整:若音频采样率非 16kHz,则进行重采样。
ASR 推理:调用 funasr 模型进行语音转文本。
文本清洗:移除可能的冗余标记。

4. 调用 DashScope 生成回复

def generate_reply(chat_query, chat_history):
    messages = [{
   'role': 'system', 'content': '你是一个友好的AI助手,请根据上下文作出回复。'}]
    for user_msg, ai_msg in chat_history:
        messages.append({
   'role': 'user', 'content': user_msg})
        messages.append({
   'role': 'assistant', 'content': ai_msg})
    messages.append({
   'role': 'user', 'content': chat_query})

    try:
        response = Generation.call(
            api_key=dashscope.api_key,
            model="qwen-plus",
            messages=messages,
            result_format="message"
        )
        if response.status_code == 200:
            reply_text = response.output.choices[0].message.content.strip()
        else:
            reply_text = f"出错了:HTTP返回码 {response.status_code}, 错误码 {response.code}, 错误信息 {response.message}"
    except Exception as e:
        reply_text = f"调用 API 发生异常:{str(e)}"

    chat_history.append((chat_query, reply_text))
    return reply_text, chat_history

构建消息上下文:整合用户输入和聊天历史。
调用 DashScope:通过 Generation.call 生成回复。
异常处理:处理接口调用失败或异常情况。

5. 语音合成

def generate_voice(input_audio, tts_text, prompt_text):
    prompt_speech_16k = postprocess(load_wav(input_audio, prompt_sr))
    for result in cosyvoice.inference_zero_shot(tts_text, prompt_text, prompt_speech_16k, stream=False):
        yield (target_sr, result['tts_speech'].numpy().flatten())

语音输入:通过加载输入音频的特征作为合成提示。
零样本生成:基于 CosyVoice 实现零样本语音合成。

6. Gradio 界面设计

语音复刻模式

def main():
    with gr.Blocks() as demo:
        gr.Markdown("## VocaMirror - 不妨听听,自己的声音")
        with gr.Tabs() as tabs:
            with gr.Tab("语音复刻模式"):
                gr.Markdown("### 聊天框 - 语音输入 & 回复生成")
                with gr.Row():
                    with gr.Column(scale=3):
                        chatbox = gr.Chatbot(label="对话历史")
                        input_audio = gr.Audio(label="输入音频", type="filepath")
                        submit_button = gr.Button("发送")

                    with gr.Column(scale=2):
                        output_audio = gr.Audio(label="AI 回复语音")

                state = gr.State([])

                def process_audio(audio_file, history):
                    text_input = transcribe_audio(audio_file)
                    reply_text, updated_history = generate_reply(text_input, history)
                    speech_generator = generate_voice(audio_file, reply_text, text_input)
                    output_audio_file = next(speech_generator, None)
                    return updated_history, updated_history, output_audio_file

                submit_button.click(
                    process_audio,
                    inputs=[input_audio, state],
                    outputs=[chatbox, state, output_audio]
                )

    demo.launch(share=False)

具体webui代码可以前往github下载

目录
相关文章
|
15天前
|
数据采集 存储 Serverless
5 分钟复刻你的声音,一键实现 GPT-Sovits 模型部署
想象一下,只需简单几步操作,就能生成逼真的语音效果,无论是为客户服务还是为游戏角色配音,都能轻松实现。GPT-Sovits 模型,其高效的语音生成能力为实现自然、流畅的语音交互提供了强有力的技术支持。本文将详细介绍如何利用函数计算平台部署 GPT-Sovits 模型,以构建一个高效、可扩展的 AI 语音交互系统。通过这一部署方案,开发者和企业能够快速集成语音合成功能,实现从文本到语音的无缝转换,进而推动智能语音应用的创新和发展。
166 11
|
27天前
|
人工智能 文字识别 安全
Qwen开源视觉推理模型QVQ,更睿智地看世界!
在人类的思维中,语言和视觉紧密交织,塑造着我们感知和理解世界的方式。我们的推理能力深深植根于语言思维和视觉记忆之中。那么,当我们将这些能力赋予人工智能时,会发生什么呢?如今的大语言模型已经展现出卓越的推理能力,但我们不禁思考:它们能否通过掌握视觉理解的力量,攀登认知能力的新高峰?
Qwen开源视觉推理模型QVQ,更睿智地看世界!
|
3月前
|
自然语言处理 搜索推荐 Docker
CosyVoice实现声音复刻
这篇文章介绍了如何使用CosyVoice平台实现个性化的声音复刻,包括录制样本音频、上传处理以及生成定制化语音的全流程。
744 6
CosyVoice实现声音复刻
|
2月前
|
人工智能 测试技术 人机交互
mini-GPT4o来了? 能看、能听、会说,还情感丰富的多模态全能助手EMOVA
【10月更文挑战第24天】EMOVA(EMotionally Omni-present Voice Assistant)是一项多模态全能助手的研究,旨在实现更自然、更智能的人机交互。该模型不仅能够处理图像、文本和语音,还具备丰富的情感表达能力。通过语义-声学解耦的语音标记器、全模态对齐和轻量级风格模块,EMOVA在视觉-语言和语音基准测试中表现出色,适用于智能助手、虚拟现实、教育和娱乐等领域。
39 3
|
3月前
|
搜索推荐 机器人 数据处理
基于大语言模型的 FireRedTTS 语音合成系统
【10月更文挑战第3天】近年来,随着人工智能技术的发展,基于大语言模型的语音合成系统备受关注。FireRedTTS 系统由郭浩瀚等人提出,旨在满足多样化的语音合成需求。该系统分为数据处理、基础系统和下游应用三部分,通过高质量数据集和语义感知架构生成高保真语音信号。其应用场景包括配音和聊天机器人,能够实现零样本语音克隆和可控类人语音合成,提供自然且个性化的交互体验。然而,系统仍面临计算资源和完全自然语音合成等方面的挑战。[了解更多](https://arxiv.org/abs/2409.03283)
426 3
|
6月前
|
人工智能 API 语音技术
在MoneyPrinterPlus中使用本地chatTTS语音模型
chatTTS是一个开源的优秀语音合成工具,现在你可以在MoneyPrinterPlus中轻松的使用本地chatTTS模型来为视频生成语音了。
在MoneyPrinterPlus中使用本地chatTTS语音模型
|
5月前
|
人工智能 语音技术
通义语音AI技术问题之Qwen-Audio对多任务预训练中的干扰问题如何解决
通义语音AI技术问题之Qwen-Audio对多任务预训练中的干扰问题如何解决
61 2
|
6月前
|
自然语言处理 开发者
通义语音大模型评测:CosyVoice与SenseVoice
随着人工智能技术的不断发展,语音生成和理解模型在各个领域得到了广泛应用。本文将评测两个由FunAudioLLM团队开发的多语言语音模型——[CosyVoice](https://github.com/FunAudioLLM/CosyVoice)和[SenseVoice](https://github.com/FunAudioLLM/SenseVoice),并结合阿里云开发者社区的相关资源,探讨其在实际应用中的表现。
1906 3
|
7月前
|
机器学习/深度学习 人工智能 自然语言处理
对于 OpenAI 最新发布 支持实时语音对话的模型GPT-4o,你想说什么?
【6月更文挑战第4天】对于 OpenAI 最新发布 支持实时语音对话的模型GPT-4o,你想说什么?个人关于 OpenAI 最新发布的支持实时语音对话模型的 GPT-4o 想说的内容
|
8月前
|
人工智能 编解码 自然语言处理
离线生成双语字幕,一键生成中英双语字幕,基于AI大模型,ModelScope
制作双语字幕的方案网上有很多,林林总总,不一而足。制作双语字幕的原理也极其简单,无非就是人声背景音分离、语音转文字、文字翻译,最后就是字幕文件的合并,但美中不足之处这些环节中需要接口api的参与,比如翻译字幕,那么有没有一种彻底离线的解决方案?让普通人也能一键制作双语字幕,成就一个人的字幕组?
离线生成双语字幕,一键生成中英双语字幕,基于AI大模型,ModelScope