基于树莓派的安保巡逻机器人--(三、树莓派的语音合成与语音播报
目录

对于基于树莓派的安保巡逻机器人来说,语音合成和语音识别功能不仅增强了交互体验,也使得机器人的安防效果更加智能化和人性化。本篇博客将详细讲解如何在树莓派上使用Piper进行语音合成,以及如何借助百度AI开放平台实现语音转文字,从而赋予机器人更强的语言理解与响应能力。
一、文字转语音
1、使用网站进行文字转语音
推荐免费文字转语音网站:Free Text-To-Speech for 28+ languages & MP3 Download | ttsMP3.com
(1)、选择要转化的文字类型
(2)、输入文字
(3)、点击下载键便可得到一个MP3文件了
(4)、播放语音
先安装相关代码库
pip install pygame
完整参考代码如下:
import pygame
pygame.init()
pygame.mixer.init(devicename='usb')
def voice(who):
if who==1:
sound = pygame.mixer.Sound('./Stranger.mp3')
elif who==2:
sound = pygame.mixer.Sound('/home/pi/temp/myjob/fire.mp3')
elif who==3:
sound = pygame.mixer.Sound('/home/pi/temp/myjob/air.mp3')
elif who==4:
sound = pygame.mixer.Sound('/home/pi/temp/myjob/way0.mp3')
sound.play()
while pygame.mixer.get_busy():
pygame.time.delay(100)
print("///////////////////////////////////voice voice voice///////////////////////////////")
voice(1)
voice(2)
voice(3)
voice(4)
2、使用本地模型文字转语音
这个我试了很多办法,但是效果不理想,效果最好的是https://github.com/rhasspy/piper/tree/master
这个项目所用的方案
具体操作如下:
(1)、下载对应完整项目
(2)、下载对应的模型文件

右击文字类型对应的model与config进行效果文件的下载
(3)、语音播放
终端打开刚刚下载的piper文件夹运行 Piper:
使用命令行工具,通过管道将文本传递给 piper 可执行文件,并指定模型路径和输出文件
echo 'Welcome to the world of speech synthesis!' | \
./piper --model /path/to/your-voice.onnx --output_file output.wav
将 /path/to/your-voice.onnx 替换为你的 .onnx 文件的实际路径,output.wav 是生成的音频文件的名称。
如果你想要在 Python 环境中使用 Piper,你可以使用 piper-tts 包。
pip install piper-tts -i https://pypi.tuna.tsinghua.edu.cn/simple
以下是一个完整的 Python 参考代码,它使用 piper-tts 来将中文文本转换为语音并保存为 WAV 文件:
import subprocess
def chinese_text_to_speech(text, output_file):
"""
将中文文本转化为语音并保存为音频文件。
参数:
text (str): 要转换的中文文本
output_file (str): 输出音频文件的路径 (.wav 文件)
"""
# 中文模型文件和配置文件路径
model_path = "/home/pi/temp/myjob/speech/piper_arm64/power/zh_CN-huayan-medium.onnx"
config_path = "/home/pi/temp/myjob/speech/piper_arm64/power/zh_zh_CN_huayan_medium_zh_CN-huayan-medium.onnx.json"
data_dir = "/home/pi/temp/myjob/speech/piper_arm64/power/"
# 构建命令
command = [
"piper",
"--model", model_path,
"--config", config_path, # 手动指定配置文件路径
"--output_file", output_file,
"--data-dir", data_dir # 指定模型文件夹
]
# 使用subprocess调用piper进行语音合成
process = subprocess.Popen(command, stdin=subprocess.PIPE)
process.communicate(input=text.encode("utf-8"))
# 示例调用
chinese_text = "欢迎来到语音合成的世界!"
output_file = "/home/pi/temp/myjob/output.wav" # 设置输出文件路径
chinese_text_to_speech(chinese_text, output_file)
'''
#播放语音文件代码:
import pygame
pygame.init()
pygame.mixer.init(devicename='usb')
def voice(who):
sound = pygame.mixer.Sound('/home/pi/temp/myjob/output.wav')
sound.play()
while pygame.mixer.get_busy():
pygame.time.delay(100)
print("///////////////////////////////////voice voice voice///////////////////////////////")
voice(0)
'''
二、语音转文字
语音转文字我们使用百度AI开放平台:
进入平台

可以免费领取总量15万次转化

创建百度AI平台应用

记录下ID、API与KEY
完整代码如下:
import pyttsx3
import speech_recognition as sr
from aip import AipSpeech
# Baidu Speech API, replace with your personal key
APP_ID = '12345678'
API_KEY = 'apipaipiapiapiapiap'
SECRET_KEY = 'keykeyekyekyue'
client = AipSpeech(APP_ID, API_KEY, SECRET_KEY)
# Use SpeechRecognition to record
try:
def rec(rate=16000):
r = sr.Recognizer()
with sr.Microphone(sample_rate=rate) as source:
print("请说话")
audio = r.listen(source)
with open("recording.wav", "wb") as f:
f.write(audio.get_wav_data())
except:
print("语音录入发生错误")
# 使用百度语音作为STT引擎
def listen():
with open('recording.wav', 'rb') as f:
audio_data = f.read()
result = client.asr(audio_data, 'wav', 16000, {
'dev_pid': 1536,
})
try:
result_text = result["result"][0]
print("结果: " + result_text)
except:
print("没有识别到语音")
while True:
rec()
request = listen()
更多百度语音转文字参考:短文本在线合成API - 语音技术
通过在树莓派上实现文字转语音和语音转文字功能,我们成功提升了安保机器人的智能化水平。这种语音交互不仅让机器人在巡逻过程中更具人性化,也扩展了未来功能的可能性。希望本篇博客对各位开发者有所帮助,激发更多创新思路,共同探索智能安防的更多应用场景。
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐

所有评论(0)