Closed jwister closed 1 year ago
找到原因了。 换了respeaker 之后 录音出来的电流声好大。。。。 怎么破?
我发现我用arecord 录音然后用aplay 播放 杂音很大, 用rec录音 play播放 没任何杂音。 我现在也不知道咋回事。但是就是感觉用wukong唤醒之后 说的话 识别速度变慢了好多。我先前以为是杂音。现在也不确定了,悟空唤醒说的话有录音文件保存么?我想听听有没有杂音。
Same. Feeling that the ASR process is very slow. I am using RaspBerry Pi
我发现我用arecord 录音然后用aplay 播放 杂音很大, 用rec录音 play播放 没任何杂音。 我现在也不知道咋回事。但是就是感觉用wukong唤醒之后 说的话 识别速度变慢了好多。我先前以为是杂音。现在也不确定了,悟空唤醒说的话有录音文件保存么?我想听听有没有杂音。
arecord默认会以8bit 8000hz采样率录音,所以听起来杂音很大,你可以加参数让它和rec使用一样的位深和采样率,这样听起来应该是一样的。如果你用的snowboy唤醒,悟空对唤醒后录音保存的相关代码在snowboy/snowboydecoder.py的saveMessage方法中,你可以在其中加一段代码把录音另存试听。 另外你是从哪个版本升级到最新版的,我大概一周前开始用悟空,那个时候我的ASR过程就非常缓慢,我用的是科大讯飞的ASR,我一直以为是讯飞API自己的问题。
我发现我用arecord 录音然后用aplay 播放 杂音很大, 用rec录音 play播放 没任何杂音。 我现在也不知道咋回事。但是就是感觉用wukong唤醒之后 说的话 识别速度变慢了好多。我先前以为是杂音。现在也不确定了,悟空唤醒说的话有录音文件保存么?我想听听有没有杂音。
arecord默认会以8bit 8000hz采样率录音,所以听起来杂音很大,你可以加参数让它和rec使用一样的位深和采样率,这样听起来应该是一样的。如果你用的snowboy唤醒,悟空对唤醒后录音保存的相关代码在snowboy/snowboydecoder.py的saveMessage方法中,你可以在其中加一段代码把录音另存试听。 另外你是从哪个版本升级到最新版的,我大概一周前开始用悟空,那个时候我的ASR过程就非常缓慢,我用的是科大讯飞的ASR,我一直以为是讯飞API自己的问题。
我的也是。ASR过程非常缓慢。并且播放声音后有一段时间没有响应(不能接受我的snowboy唤醒)。 而且有时候会莫名其妙接受我的其他话作为ASR的输入
找到原因了。 换了respeaker 之后 录音出来的电流声好大。。。。 怎么破?
@jwister 你好,请问你找到了识别速度很慢的原因了吗? 怎么解决呢
录音完到识别用3秒,命中技能用3秒,2个字的回答结果合成语音用了5秒,读取语音并开始播放用0.5秒。
3.5.2 相比 3.5.1 仅仅只是加了 VITSClient 。看不出来哪里会导致变慢。
diff --git a/README.md b/README.md
index fd079e6..036552e 100644
--- a/README.md
+++ b/README.md
@@ -52,7 +52,7 @@
</p>
* 模块化。功能插件、语音识别、语音合成、对话机器人都做到了高度模块化,第三方插件单独维护,方便继承和开发自己的插件。
-* 中文支持。集成百度、科大讯飞、阿里、腾讯、OpenAI Whisper、Apple、微软Edge等多家中文语音识别和语音合成技术,且可以继续扩展。
+* 中文支持。集成百度、科大讯飞、阿里、腾讯、OpenAI Whisper、Apple、微软Edge、VITS声音克隆TTS 等多家中文语音识别和语音合成技术,且可以继续扩展。
* 对话机器人支持。支持基于 [AnyQ](https://wukong.hahack.com/#/anyq) 的本地对话机器人,并支持接入图灵机器人、ChatGPT 等在线对话机器人。
* 全局监听,离线唤醒。支持 [Porcupine](https://github.com/Picovoice/porcupine) 和 [snowboy](https://github.com/Kitt-AI/snowboy) 两套离线语音指令唤醒引擎,并支持 Muse [脑机唤醒](https://wukong.hahack.com/#/bci) 以及行空板摇一摇唤醒等其他唤醒方式。
* 灵活可配置。支持定制机器人名字,支持选择语音识别和合成的插件。
@@ -93,7 +93,7 @@ wukong-robot 被唤醒后,用户的语音指令先经过 ASR 引擎进行 ASR
### Python 版本 ###
-wukong-robot 只支持 Python 3.7+,不支持 Python 2.x 。
+wukong-robot 只支持 Python >= 3.7 且 < 3.10 ,不支持 Python 2.x 。
### 设备要求 ###
diff --git a/VERSION b/VERSION
index d5c0c99..87ce492 100644
--- a/VERSION
+++ b/VERSION
@@ -1 +1 @@
-3.5.1
+3.5.2
diff --git a/docker/DockerfileArm b/docker/DockerfileArm
index 0bbdb75..72f42a7 100644
--- a/docker/DockerfileArm
+++ b/docker/DockerfileArm
@@ -20,6 +20,7 @@ RUN apt-get update && apt-get install -y \
libpcre3 \
libpcre3-dev \
libatlas-base-dev \
+ libffi-dev \
build-essential \
&& rm -rf /var/lib/apt/lists/*
diff --git a/robot/TTS.py b/robot/TTS.py
index 32fe58b..4bfb88b 100644
--- a/robot/TTS.py
+++ b/robot/TTS.py
@@ -16,7 +16,7 @@ from pathlib import Path
from pypinyin import lazy_pinyin
from pydub import AudioSegment
from abc import ABCMeta, abstractmethod
-from .sdk import TencentSpeech, AliSpeech, XunfeiSpeech, atc
+from .sdk import TencentSpeech, AliSpeech, XunfeiSpeech, atc, VITSClient
import requests
from xml.etree import ElementTree
@@ -348,7 +348,7 @@ class EdgeTTS(AbstractTTS):
SLUG = "edge-tts"
- def __init__(self, voice="Tingting", **args):
+ def __init__(self, voice="zh-CN-XiaoxiaoNeural", **args):
super(self.__class__, self).__init__()
self.voice = voice
@@ -408,6 +408,37 @@ class MacTTS(AbstractTTS):
else:
logger.critical(f"{self.SLUG} 合成失败!", stack_info=True)
+class VITS(AbstractTTS):
+ """
+ VITS 语音合成
+ 需要自行搭建vits-simple-api服务器:https://github.com/Artrajz/vits-simple-api
+ server_url : 服务器url,如http://127.0.0.1:23456
+ api_key : 若服务器配置了API Key,在此填入
+ speaker_id : 说话人ID,由所使用的模型决定
+ length : 调节语音长度,相当于调节语速,该数值越大语速越慢。
+ noise : 噪声
+ noisew : 噪声偏差
+ max : 分段阈值,按标点符号分段,加起来大于max时为一段文本。max<=0表示不分段。
+ timeout: 响应超时时间,根据vits-simple-api服务器性能不同配置合理的超时时间。
+ """
+
+ SLUG = "VITS"
+
+ def __init__(self, server_url, api_key, speaker_id, length, noise, noisew, max, timeout, **args):
+ super(self.__class__, self).__init__()
+ self.server_url, self.api_key, self.speaker_id, self.length, self.noise, self.noisew, self.max, self.timeout = (
+ server_url, api_key, speaker_id, length, noise, noisew, max, timeout)
+
+ @classmethod
+ def get_config(cls):
+ return config.get("VITS", {})
+
+ def get_speech(self, phrase):
+ result = VITSClient.tts(phrase, self.server_url, self.api_key, self.speaker_id, self.length, self.noise,
+ self.noisew, self.max, self.timeout)
+ tmpfile = utils.write_temp_file(result, ".wav")
+ logger.info(f"{self.SLUG} 语音合成成功,合成路径:{tmpfile}")
+ return tmpfile
def get_engine_by_slug(slug=None):
"""
diff --git a/robot/sdk/VITSClient.py b/robot/sdk/VITSClient.py
new file mode 100644
index 0000000..164978f
--- /dev/null
+++ b/robot/sdk/VITSClient.py
@@ -0,0 +1,24 @@
+# coding: utf-8
+# !/usr/bin/env python3
+
+"""VITS TTS API"""
+
+import requests
+
+
+def tts(text, server_url, api_key, speaker_id, length, noise, noisew, max, timeout):
+ data = {
+ "text": text,
+ "id": speaker_id,
+ "format": "wav",
+ "lang": "auto",
+ "length": length,
+ "noise": noise,
+ "noisew": noisew,
+ "max": max
+ }
+ headers = {"X-API-KEY": api_key}
+ url = f"{server_url}/voice"
+ res = requests.post(url=url, data=data, headers=headers, timeout=timeout)
+ res.raise_for_status()
+ return res.content
diff --git a/robot/utils.py b/robot/utils.py
index 71c5563..d49f299 100644
--- a/robot/utils.py
+++ b/robot/utils.py
@@ -300,10 +300,10 @@ def validyaml(filename):
:returns: True: 正确; False: 不正确
"""
try:
- f = open(filename)
- str = f.read()
- yaml.safe_load(str)
- return True
+ with open(filename) as f:
+ str = f.read()
+ yaml.safe_load(str)
+ return True
except Exception:
return False
diff --git a/static/default.yml b/static/default.yml
index 463fd40..5570858 100755
--- a/static/default.yml
+++ b/static/default.yml
@@ -97,6 +97,7 @@ lru_cache:
# azure-tts - 微软语音合成
# mac-tts - macOS 系统自带TTS(mac 系统推荐)
# edge-tts - 基于 Edge 的 TTS(推荐)
+# VITS - 基于 VITS 的AI语音合成
tts_engine: edge-tts
# 语音识别服务配置
@@ -179,6 +180,26 @@ edge-tts:
# 中文推荐 `zh` 开头的音色
voice: zh-CN-XiaoxiaoNeural
+# 基于 VITS 的AI语音合成
+VITS:
+ # 需要自行搭建vits-simple-api服务器:https://github.com/Artrajz/vits-simple-api
+ # server_url: 服务器url(格式为http://{IP地址}:{端口},不带最后的斜杠),如http://127.0.0.1:23456
+ # api_key: 若服务器配置了API Key,在此填入
+ # speaker_id: 说话人ID,由所使用的模型决定
+ # length: 调节语音长度,相当于调节语速,该数值越大语速越慢。
+ # noise: 噪声
+ # noisew: 噪声偏差
+ # max: 分段阈值,按标点符号分段,加起来大于max时为一段文本。max<=0表示不分段。
+ # timeout: 响应超时时间(秒),根据vits-simple-api服务器性能不同配置合理的超时时间。
+ server_url: "http://127.0.0.1:23456"
+ api_key: "api_key"
+ speaker_id: 0
+ length: 1.0
+ noise: 0.667
+ noisew: 0.8
+ max: 50
+ timeout: 60
+
# NLU 引擎
# 可选值:
# unit - 百度 UNIT
觉得慢的可以通过 profiling
参数来找到瓶颈。
python wukong.py profiling
久未回复,先关闭本 issue 。
确认已寻找过答案
我已确认在 Github issue 页、常见问题页、文档 中都查找过,没有找到类似问题和资料。我也没有 google / bing/ 百度 / duckduckgo 到相关解答。
安装方式
手动安装
操作系统
Raspbian
离线唤醒相关
如果是离线唤醒相关的问题,是否已确保
arecord temp.wav
、aplay temp.wav
(Linux) 或rec temp.wav
、play temp.wav
(Mac)已正常工作?(注意要求不能带任何其他参数)如果不能,请先配置好麦克风和音响再尝试。—— 我已确保录音、播放都正常工作才尝试 wukong-robot 。
问题描述
升级版本之后,感觉唤醒之后的语音转文字速度慢了好多,是换了话筒的原因么?