2024 离线ASR和TTS推荐与示例

news2024/11/14 20:22:53

2024 离线ASR和TTS推荐

文章目录

  • 2024 离线ASR和TTS推荐
  • 一、前言
  • 二、安装与使用
    • 1、EdgeTTS的安装和使用
      • (1)Edge TTS介绍与效果试听
      • (2)Edge TTS安装
      • (3)Edge TTS查看支持的音色
      • (4)Edge TTS python代码调用
    • 2、Vosk 的安装和使用
      • (1)Vosk 介绍
      • (2)Vosk安装
      • (3)Vosk python调用
  • 三、结束语

一、前言

随着具身智能的发展和智能设备的发展,对于本地化运行ASR和TTS的需求越来越大。
在试用了目前许多的ASR和TTS的框架的时候下面是个人体验,感觉目前离线又比较小最好的两个框架:
(1)TTS框架:Edge-tts (100M<)
(2)ASR框架:Vosk(50M<)
这么小的完全可以部署在一些低性能的硬件上!

二、安装与使用

1、EdgeTTS的安装和使用

(1)Edge TTS介绍与效果试听

GitHub 仓库地址:https://github.com/rany2/edge-tts
相比目前主流的大模型语音合成服务如:GPTsovits、ChatTTS、Bert-VITS2、Cosyvoice等还需要配置torch-gpu环境,EdgeTTS整体运行环境比较大同时耗费的资源比较多,EdgeTTS操作起来对小白和低性能硬件更友好。

因为其底层是使用微软 Edge 的在线语音合成服务,所以不需要下载任何模型,甚至也不要 api_key安装库就能用,简直不要太良心~

关键是,除了支持普通话外,还支持很多地方口音(比如: 粤语、台湾口音、陕西话、辽宁东北话等)。
具体可以进我写的这个edge-tts合成的音频试听网站听一下
合成音频试听网址:https://demo.sztuai.com/
在这里插入图片描述

(2)Edge TTS安装

最基本的环境安装,只需要一个 pip 包即可!:

pip install edge-tts

(3)Edge TTS查看支持的音色

查看支持的所有音色:

linux  : edge-tts  --list-voices
windows: edge-tts  --list-voices

如果想查看支持的中文、粤语 or 台湾语

linux  : edge-tts  --list-voices| grep CN #HK # TW
windows: edge-tts  --list-voices| findstr CN #HK # TW

(4)Edge TTS python代码调用

基础的代码调用

import edge_tts

text = """曾经有一份真诚的爱情放在我面前,我没有珍惜,等我失去的时候我才后悔莫及,人世间最痛苦的事莫过于此。
如果上天能够给我一个再来一次的机会,我会对那个女孩子说三个字:我爱你。如果非要在这份爱上加上一个期限,我希望是……一万年"""

communicate = edge_tts.Communicate(text=text,
        voice="zh-HK-HiuGaaiNeural",
        rate='+0%',    # -30%表示语速变慢30%,+30%表示语速增加30%。
        volume= '+0%', # 通过–volume参数来设置播放的音量,-60%表示音量减少60%,+60%表示音量增加60%。
        pitch= '+0Hz') # 通过pitch参数来调整合成语音的频率,-50Hz表示降低频率50Hz,+50Hz则相反

communicate.save_sync("test.wav")

异步调用tts并合成查询到语音音色,用于试听(如果只是用中文那么可以在这个网站试听:https://demo.sztuai.com/)

import asyncio
import edge_tts
"创建一个异步任务"
async def amain(text,voice,output_file):
    """ Main function"""
    communicate = edge_tts.Communicate(text,voice)
    await communicate.save(output_file)

"添加多个异步任务"
async def main():
    " edge-tts  --list-voices| findstr CN 查询支持的音色并,打印音色试听"

    models="""
Name: zh-CN-XiaoxiaoNeural
Name: zh-CN-XiaoyiNeural
Name: zh-CN-YunjianNeural
Name: zh-CN-YunxiNeural
Name: zh-CN-YunxiaNeural
Name: zh-CN-YunyangNeural
Name: zh-CN-liaoning-XiaobeiNeural
Name: zh-CN-shaanxi-XiaoniNeural
"""
    models=models.split('Name:')
    models=[item.strip() for item in models if len(item.strip())>0]

    print(models)
    tasks=[]
    defaultText="随着具身智能的发展和智能设备的发展,对于本地化运行ASR和TTS的需求越来越大。520"
    for model in models:
        tasks.append(amain(defaultText,model,model+'.mp3'))
    await asyncio.gather(*tasks)

if __name__ == '__main__':
    asyncio.run(main())

2、Vosk 的安装和使用

(1)Vosk 介绍

github地址:https://github.com/alphacep/vosk-api

  • 支持二十+种语言 - 中文,英语,印度英语,德语,法语,西班牙语,葡萄牙语,俄语,土耳其语,越南语,意大利语,荷兰人,加泰罗尼亚语,阿拉伯, 希腊语, 波斯语, 菲律宾语,乌克兰语, 哈萨克语, 瑞典语, 日语, 世界语, 印地语, 捷克语, 波兰语, 乌兹别克语, 韩国语
  • 移动设备上脱机工作-Raspberry Pi,Android,iOS
  • 使用简单的 pip3 install vosk 安装
  • 每种语言的轻量模型只有是50Mb, 但还有更大的large模型可用
  • 提供流媒体API,以提供最佳用户体验(与流行的语音识别python包不同)
  • 还有用于不同编程语言的包装器-java / csharp / javascript等
  • 可以快速重新配置词汇以实现最佳准确性
  • 支持说话人识别

(2)Vosk安装

vosk包安装

pip install vosk

模型安装
下面如果是linux系统就运行下面的指令,如果是windows系统,就复制网址到浏览器中即可下载。
第一个是43m的模型,第二个1.3g的模型,平常使用50m的模型即可。(国内外都可以下载已测试过)

wget -c https://alphacephei.com/vosk/models/vosk-model-small-cn-0.22.zip
wget -c https://alphacephei.com/vosk/models/vosk-model-cn-0.15.zip

(3)Vosk python调用

将模型解压后,新建一个文件夹models将模型放到models里面,同时models与asrdemo.py放在同一级,如果要修改位置请修改第19行
asrdemo.py

#!/usr/bin/env python3
import json
import wave
import sys

from vosk import Model, KaldiRecognizer, SetLogLevel
def asr(audioPath):
    # You can set log level to -1 to disable debug messages
    SetLogLevel(0)

    wf = wave.open(audioPath, "rb")
    if wf.getnchannels() != 1 or wf.getsampwidth() != 2 or wf.getcomptype() != "NONE":
        print("Audio file must be WAV format mono PCM.")
        sys.exit(1)

    #model = Model(model_name=r"C:\Users\waitK\Downloads\vosk-model-small-cn-0.22\vosk-model-small-cn-0.22")

    # You can also init model by name or with a folder path
    model = Model("models/vosk-model-small-cn-0.22")


    rec = KaldiRecognizer(model, wf.getframerate())
    rec.SetWords(True)
    #rec.SetPartialWords(True) # 这个是流式识别的参数,如果要流式逐字识别就取消这里的注释、while循环里面else块里面的注释

    while True:
        data = wf.readframes(4000)
        if len(data) == 0:
            break
        if rec.AcceptWaveform(data):
            print(rec.Result())
            #print(json.loads(rec.Result())['text']) #如果只要打印文本则只需要运行这个

        else:
            #print(rec.PartialResult())
           # print(json.loads(rec.PartialResult())['partial'])

            pass

    print(rec.FinalResult())

if __name__ == '__main__':
    wavpath=input('音频地址:')# 绝对或相对都可

    asr(wavpath)```

注:更多功能和示例请参考源码中的example部分,那里很全。
注:部分时候识别音频会出现下面的报错:
在这里插入图片描述
这是因为使用您自己的音频文件时,请确保其格式正确 - PCM 16kHz 16bit 单声道。否则,需要用ffmpeg转一下
下面是优化有的步骤

安装ffmpeg

pip install imageio-ffmpeg

优化后,对于每一个音频我们都进行格式化为PCM 16kHz 16bit 单声道再识别,这样子就可以保证没有问题了。具体的代码如下:

#!/usr/bin/env python3
import json
import wave
import sys

from vosk import Model, KaldiRecognizer, SetLogLevel
import subprocess
import imageio_ffmpeg as ffmpeg
def formatAudio(input_file,output_file='output.wav'):

    # 构建 ffmpeg 命令
    command = [
        ffmpeg.get_ffmpeg_exe(),
        "-y",
        "-loglevel","0",
        "-i", input_file,
        "-acodec", "pcm_s16le",
        "-ac", "1",
        "-ar", "16000",
        output_file
    ]

    # 运行命令
    subprocess.run(command, check=True)

def init():
    # 初始化模型
    global model
    model = Model("models/vosk-model-small-cn-0.22")
def asr(audioPath):
    global model
    # 格式化音频为 PCM 16kHz 16bit 单声道。
    output_file = 'output.wav'
    audioPath=audioPath.replace('\"','')
    formatAudio(audioPath,output_file)

    # You can set log level to -1 to disable debug messages
    SetLogLevel(0)

    wf = wave.open(output_file, "rb")
    if wf.getnchannels() != 1 or wf.getsampwidth() != 2 or wf.getcomptype() != "NONE":
        print("Audio file must be WAV format mono PCM.")
        sys.exit(1)

    #model = Model(model_name=r"C:\Users\waitK\Downloads\vosk-model-small-cn-0.22\vosk-model-small-cn-0.22")




    rec = KaldiRecognizer(model, wf.getframerate())
    rec.SetWords(True)
    #rec.SetPartialWords(True) # 这个是流式识别的参数,如果要流式逐字识别就取消这里的注释、while循环里面else块里面的注释

    while True:
        data = wf.readframes(4000)
        if len(data) == 0:
            break
        if rec.AcceptWaveform(data):
            print(rec.Result())
            #print(json.loads(rec.Result())['text']) #如果只要打印文本则只需要运行这个

        else:
            #print(rec.PartialResult())
           # print(json.loads(rec.PartialResult())['partial'])

            pass

    print(rec.FinalResult())

if __name__ == '__main__':
    init() # 初始化模型
    while True:
        wavpath=input('待转录音频地址:')# 绝对或相对都可

        asr(wavpath)

三、结束语

到这里硬件就具备基本的asr和tts功能了,下面可以选择调用openai或者豆包来做为llm。
ASR --> LLM --> TTS
llm选择就相当多了,这里就不多赘述了,如果要本地可以试着ollama 的qwen1.5b。(现存3g左右就可以)
流式自然响应可以看看我以前写的这一篇博客:
使用pyaudio 录音,停止说话时自动结束

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2156814.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

16【Protues51单片机仿真】智能洗衣机倒计时系统

目录 一、主要功能 二、硬件资源 三、程序编程 四、实现现象 一、主要功能 用直流电机转动模拟洗衣机。要求 有弱洗、普通洗、强洗三种模式&#xff0c;可通过按键选择。可以设置洗衣时长&#xff0c;通关按键选择15、30、45、60、90分钟。时间到蜂鸣器报警提示。LCD 显示…

MySQL:事务的ACID特性隔离级别脏读/不可重复读/幻读/Next-Key锁——场景复现

目录 1、什么是事务 2、 事务的ACID特性 2.1 事务的隔离性 3、为什么要使用事务&#xff1f; 4、查看支持事务的存储引擎 5、使用事务 5.1 控制事务 5.1.1 开启事务 5.1.2 关闭事务 5.2 开始一个事务&#xff0c;执行修改后回滚 5.3 开始一个事务&#xff0c;执行修…

set-ExecutionPolicy RemoteSigned 提示不是内部或外部命令,也不是可运行的程序或批处理文件

这个错误一般发生在使用命令提示符或者PowerShell窗口中找不到set-ExecutionPolicy RemoteSigned。如果你想在命令提示符或者PowerShell窗口运行set-ExecutionPolicy RemoteSigned&#xff0c;你需要搜索打开Window PowerShell ISE&#xff0c;并以管理员身份打开&#xff0c;输…

图结构感知的Transformer:一种新的图表示学习方法

人工智能咨询培训老师叶梓 转载标明出处 尽管图神经网络&#xff08;GNNs&#xff09;在处理图数据方面取得了显著成就&#xff0c;但它们在表达能力和捕获长距离依赖方面存在局限性。为了突破这些局限&#xff0c;研究者们开始探索将Transformer架构应用于图表示学习。在此基…

使用Electron打包一个Vue3项目全步骤

1.创建一个Vue3项目 2.使用 WebStorm打开项目&#xff0c;并安装依赖项 npm install 等待完成后&#xff0c; 安装electron npm install --save-dev electron 等待完成后&#xff0c; 安装electron 打包依赖项(打包成可执行文件) npm install electron-packager --save-dev 3…

从零开始一个git操作实例,图文并茂

徒弟不懂git怎么用&#xff0c; 于是写了篇文章&#xff0c; 把本地git操作从头写了一遍&#xff0c; 自己去看吧&#xff01; 0、基本概念 •Git是一个免费、开源的、分布式版本控制系统 •它使用一个特殊的叫做仓库的数据库来记录文件的变化 •仓库中的每个文件都有一个…

ccfcsp-202406(1、2、3、4、5)

矩阵重塑&#xff08;其一&#xff09; #include <bits/stdc.h> using namespace std; int main() {int n,m,p,q;cin >> n >> m >> p >> q;vector<int> vec(n * m);vector<vector<int>> res(p, vector(q,0));int k 0;for(in…

力扣反转链表系列【25. K 个一组翻转链表】——由易到难,一次刷通!!!

力扣《反转链表》系列文章目录 刷题次序&#xff0c;由易到难&#xff0c;一次刷通&#xff01;&#xff01;&#xff01; 题目题解206. 反转链表反转链表的全部 题解192. 反转链表 II反转链表的指定段 题解224. 两两交换链表中的节点两个一组反转链表 题解325. K 个一组翻转…

HarmonyOS---权限和http/Axios网络请求

网络请求(http,axios) 目录 一、应用权限管理1.1权限的等级1.2授权方式1.3声明权限的配置1.4如何向用户进行申请 二、内置http请求使用三、Axios请求使用&#xff08;建议&#xff09;3.1 使用方式一3.2 使用方式二&#xff08;建议&#xff09; 一、应用权限管理 应用权限保护…

git仓库服务器端损坏如何用本地code重新部署

文章目录 1. **在新服务器上创建一个新的 Git 仓库**2. **将本地仓库推送到新服务器**2.1. 添加新服务器为远程仓库2.2. 推送代码和历史记录2.3. 推送 tags&#xff08;如果有 tags&#xff09; 3. **在新服务器上拉取代码并部署**4. **确保修改记录和历史完整**5. **可选&…

Flink Task 日志文件隔离

Flink Task 日志文件隔离 任务在启动时会先通过 MdcUtils 启动一个 slf4j 的 MDC 环境&#xff0c;然后将 jobId 添加到 slf4j 的 MDC 容器中&#xff0c;随后任务输出的日志都将附带 joid。 MDC 介绍如下&#xff1a; MDC ( Mapped Diagnostic Contexts )&#xff0c;它是一个…

Linux 线程互斥

文章目录 3. Linux 线程互斥3.1 相关概念3.2 互斥量mutex3.3 互斥量的接口3.4 改进3.2中的代码3.5 互斥量&#xff08;锁&#xff09;的原理3.6 封装一下原生锁的接口&#xff0c;RAII风格的锁3.7 可重入 和 线程安全 3. Linux 线程互斥 3.1 相关概念 临界资源&#xff1a;多…

web自动化学习笔记

目录 一、web自动化测试环境搭建二、web自动化测试第一个脚本三、selenium 8种定位方式3.1、通过id定位3.2、通过name定位3.3、通过tag_name&#xff08;标签名&#xff09;定位3.4、通过class值进行定位3.5、通过链接文本定位3.6、通过部分链接文本定位3.7、通过xpath定位3.8、…

MySQL:SQL语句执行过程

本篇文章会分析下一个 SQL 语句在 MySQL 中的执行流程&#xff0c;包括 SQL 的查询在 MySQL 内部会怎么流转&#xff0c;SQL 语句的更新是怎么完成的。 在分析之前我会先带着你看看 MySQL 的基础架构&#xff0c;知道了 MySQL 由那些组件组成以及这些组件的作用是什么&#xf…

Spring_AMQP

文章目录 一、SpringAMQP二、SpringAMQP应用2.1、消息发送2.2、消息接收 一、SpringAMQP SpringAMQP是基于RabbitMQ封装的一套模板&#xff0c;并且还利用SpringBoot对其实现了自动装配&#xff0c;使用起来非常方便。 SpringAmqp的官方地址。 SpringAMQP提供了三个功能&am…

python27 安装pywinauto-0.6.8

文章目录 环境所需依赖依赖查找所需依赖链接1. comtypes2. six3. pyWin324. (optional) Pillow (to make screenshoots)5. pywinauto 安装结果 环境 windows 11 Python 2.7 setuptools 18.0.1 pip 18.1 所需依赖 依赖查找 按照官方文档&#xff08;https://pywinauto.readt…

MMROTATE 1.X特征图可视化(绘制Heat Map)

本文参考MMYOLO官方的特征图可视化教程&#xff0c;对MMROTATE相关算法进行特征图可视化 1. 新建featmap_vis_demo.py文件 在mmrotate项目文件夹下新建 featmap_vis_demo.py &#xff1a; # Copyright (c) OpenMMLab. All rights reserved. import argparse import os from t…

java intellij idea开发步骤,使用指南,工程创建与背景色字体配置,快捷键

intellij idea2021 配置背景色&#xff0c;字体大小&#xff0c;主题 快捷键

STM32系统时钟

时钟为单片机提供了稳定的机器周期&#xff0c;从而使我们的系统能够正常的运行 时钟就像我们人的心脏&#xff0c;一旦有问题就整个都会崩溃 stm32有很多外设&#xff0c;但不是所有的外设都使用同一种时钟频率工作&#xff0c;比如我们的内部看门狗和RTC 只要30几k的频率就…

计算机毕业设计推荐-基于python的白酒销售数据可视化分析

精彩专栏推荐订阅&#xff1a;在下方主页&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; &#x1f496;&#x1f525;作者主页&#xff1a;计算机毕设木哥&#x1f525; &#x1f496; 文章目录 一、白酒销售数据…