树莓派实现语音识别与语音合成——百度云语音识别API

本文采用百度云语音识别API接口,实现低于60s音频的语音识别,也可以用于合成文本长度小于1024字节的音频,此外采用snowboy离线语音唤醒引擎可实现离线语音唤醒,实现语音交互。基于本内容可实现语音控制小车,语音控制音箱、语音交互。。。
可以查看我的github获取更多信息:https://github.com/dalinzhangzdl/AI_Car_Raspberry-pi
一、 百度云语音识别 python-SDK的安装
工欲善其事必先利其器,下面先来武装一下自己,申请属于自己的百度AI开发者账号,安装SDK(Software Development Kit,软件开发工具包)。
1、进入百度云平台,进入百度语音控制台后,创建自己的应用,获取属于你的ID号和密钥:
APP_ID = ‘114xxxx5’
API_KEY = ‘NYIvd23qqGAZxxxxxxxxxxxxxxx’
SECRET_KEY = ‘DcQWQ9Hxxxxxxxxxxxxxxxxxxxxxx’
2、SDK的下载与安装
应用创建完成后下载相应的开发SDK,这里采用python开发,下载python-SDK即可
在这里插入图片描述
SDK的安装:
将下载的SDK包拷贝到树莓派pi目录下,终端界面解压安装,安装过程如下:
解压包:unzip aip-python-sdk-2.0.0.zip
安装SDK包: sudo pip install baidu-aip
树莓派实现语音识别与语音合成——百度云语音识别API_第1张图片
树莓派实现语音识别与语音合成——百度云语音识别API_第2张图片
遵循以上步骤操作,就搭建好属于自己的语音识别和语音合成平台,再添加一个麦克风和一个喇叭或者音箱就可以进行语音识别方面的开发了,语音控制小车,控制智能家电等。

二、Python-SDK 实现语音识别和语音合成
1、python-SDK实现语音识别
遵循SDK文档进行快速开发,务必阅读文档。如果对自己的录音进行测试,需先采用格式工厂对录音文件进行转换,确保录音的音频参数符合云语音识别的要求。单通道、采样频率为16K PCM格式,也可先直接采用官方的音频进行测试。
程序如下:

#_*_ coding:UTF-8 _*_
# @author: zdl 
# 百度云语音识别Demo,实现对本地语音文件的识别。
# 需安装好python-SDK,录音文件不不超过60s,文件类型为wav格式。
# 音频参数需设置为 单通道 采样频率为16K PCM格式 可以先采用官方音频进行测试

# 导入AipSpeech  AipSpeech是语音识别的Python SDK客户端
from aip import AipSpeech
import os

''' 你的APPID AK SK  参数在申请的百度云语音服务的控制台查看'''
APP_ID = '114xxxx5'
API_KEY = 'NYIvd23qqGAZxxxxxxxxxxxxxxx'
SECRET_KEY = 'DcQWQ9Hxxxxxxxxxxxxxxxxxxxxxx'

# 新建一个AipSpeech
client = AipSpeech(APP_ID, API_KEY, SECRET_KEY)


# 读取文件
def get_file_content(filePath):   #filePath  待读取文件名
    with open(filePath, 'rb') as fp:
        return fp.read()

		
def stt(filename):         # 语音识别
    # 识别本地文件
    result = client.asr(get_file_content(filename),
                        'wav',
                        16000,
                        {'dev_pid': 1536,}      # dev_pid参数表示识别的语言类型 1536表示普通话
                        )
    print result

	# 解析返回值,打印语音识别的结果
    if result['err_msg']=='success.':
        word = result['result'][0].encode('utf-8')       # utf-8编码
        if word!='':
            if word[len(word)-3:len(word)]==',':
                print word[0:len(word)-3]
                with open('demo.txt','w') as f:
                    f.write(word[0:len(word)-3])
                f.close()
            else:
                print (word.decode('utf-8').encode('gbk'))
                with open('demo.txt','w') as f:
                    f.write(word)
                f.close()
        else:
            print "音频文件不存在或格式错误"
    else:
        print "错误"

# main函数 识别本地录音文件yahboom.wav
if __name__ == '__main__':
    
    stt('test.wav')
    

2、python-SDK实现语音合成
语音合成较语音识别简单,合成文本长度必须小于1024字节,如果本文长度较长,可以采用多次请求的方式。下面是合成本地文件demo程序:

#_*_ coding:UTF-8 _*_
# @author: zdl 
# 百度云语音合成Demo,实现对本地文本的语音合成。
# 需安装好python-SDK,待合成文本不超过1024个字节
# 合成成功返回audio.mp3 否则返回错误代码

# 导入AipSpeech  AipSpeech是语音识别的Python SDK客户端
from aip import AipSpeech
import os

''' 你的APPID AK SK  参数在申请的百度云语音服务的控制台查看'''
APP_ID = '114xxxx5'
API_KEY = 'NYIvd23qqGAZxxxxxxxxxxxxxxx'
SECRET_KEY = 'DcQWQ9Hxxxxxxxxxxxxxxxxxxxxxx'

# 新建一个AipSpeech
client = AipSpeech(APP_ID, API_KEY, SECRET_KEY)

# 将本地文件进行语音合成
def tts(filename):
    f = open(filename,'r')
    command = f.read()
    if len(command) != 0:
        word = command
    f.close()
    result  = client.synthesis(word,'zh',1, {
        'vol': 5,'per':0,
    })
	
# 合成正确返回audio.mp3,错误则返回dict 
    if not isinstance(result, dict):
        with open('audio.mp3', 'wb') as f:
            f.write(result)
        f.close()
        print 'tts successful'

# main

if __name__ == '__main__':

tts('demo.txt')

你可能感兴趣的:(树莓派开发)