目录

一、文字转语音

1、使用网站进行文字转语音

2、使用本地模型文字转语音

二、语音转文字


对于基于树莓派的安保巡逻机器人来说,语音合成和语音识别功能不仅增强了交互体验,也使得机器人的安防效果更加智能化和人性化。本篇博客将详细讲解如何在树莓派上使用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开放平台:

在线语音合成_高度拟人的语音合成服务-百度AI开放平台

短语音识别标准版_短语音识别-百度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 - 语音技术

通过在树莓派上实现文字转语音和语音转文字功能,我们成功提升了安保机器人的智能化水平。这种语音交互不仅让机器人在巡逻过程中更具人性化,也扩展了未来功能的可能性。希望本篇博客对各位开发者有所帮助,激发更多创新思路,共同探索智能安防的更多应用场景。

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐