【小白教程】基于树莓派的智能语音助手-python

树莓派3b+、python3系统自带、百度语音识别与合成、调用图灵机器人(热词唤醒失败,可用snowboy)

1.Windows系统下【下载+安装 树莓派官方系统】

主要流程:树莓派官网下载系统→刷入 TF 卡→设置开启显示器和 SSH→通电→进入系统
1.Windows下 进入官方网站下载系统镜像:https://www.raspberrypi.org/downloads/
选择右边的版本
Alt
选择左边的版本
Alt2. Windows系统下的安装
1)首先将准备好的 TF 卡连接读卡器,插入电脑
2)下载一个格式化 SD 卡的工具,格式化 SD 卡
下载网址:https://www.sdcard.org/downloads/formatter_4/eula_windows/ (点击 Aceept 开始下载)
3)下载 Win32 DiskImager,这是一个把镜像写入 SD 卡的工具
下载网址:http://sourceforge.net/projects/win32diskimager/

选择 raspberry.img 系统镜像包,然后选择 TF 卡,点击 Write 即将树莓派系统写入SD卡
Alt
4)对 TF 卡数据进行预设置

a. 开启 SSH 远程:(自 2016 年 9 月开始,raspberry 默认关闭 ssh 连接)
在 TF 卡分区里面创建一个名为 “ssh” 空文件即可(不要有 txt 后缀!)
b. 开启强制 HDMI 输出:(很多现在的显示器在树莓派上并不能识别)
在 TF 卡分区,打开 config.txt 文件(开机后位置: /boot/config.txt),修改如下:
config_hdmi_boost=4 #开启热插拔
hdmi_mode=58 #分辨率为适应屏幕分辨率的选择
hdmi_group=2 # 1:CEA 电视显示器 2:DMT 电脑显示器
disable_overscan=1#可以去掉开机屏幕周围的黑色边框
dtparam=audio=on
c.设置无线 WI-FI 连接
在 TF 卡的 boot 分区,创建 wpa_supplicant.conf 文件,加入如下内容:
country=CN ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev update_config=1
network={ ssid=“wifiname” psk=“wifipassword” priority=1 }
d. 插上显示器、键盘、鼠标,上电
在基本的设置完成后,我们将 TF 卡插入树莓派,接上HDMI线连上显示器,鼠标,键盘,上电,即可进入操作界面,如下:
Alt

到目前为止,系统就装好了,整个系统下载,安装的过程,我们小组遇到很多奇怪的问题。例如:WiFi连接不稳定,自动断开;进不去系统等等,我们的百度的解决办法,写config文件等,都尝试过,但仍然治标不治本!!!因此,我们采取的简单粗暴的方式——重装系统(很多次)!!!

2.安装配置pyaudio+snowboy

这个很简单,参考树莓派3B+指南(十一)安装配置snowboy. 注意:百度语音采样率为16000。

进行测试播放 wave 文件的实例

#引入库 
import wave 
import pyaudio 
 
#定义数据流块 
chunk = 1024 
 
f = wave.open(r"a.wav","rb") #只读方式打开 wav 文件 
p = pyaudio.PyAudio()  #打开数据流 
stream = p.open(format = p.get_format_from_width(f.getsampwidth()), 
channels = f.getnchannels(), 
rate = f.getframerate(), 
output = True  #读取数据 
data = f.readframes(chunk) 
#播放 
while data !="": 
stream.write(data) 
data = f.readframes(chunk) 
 
#停止数据流 
stream.stop_stream() 
stream.close() 
#关闭 PyAudio 

 
 
p.terminate() 
录音实例: 
#引入库 
import wave 
import pyaudio 
 
#参数定义 
CHUNK = 1024 
FORMAT = pyaudio.paInt16 
CHANNELS = 2 
RATE = 44100 
RECORD_SECONDS = 5 
WAVE_OUTPUT_FILENAME = "a.wav" 
 
 
p = pyaudio.PyAudio() 
stream = p.open(format=FORMAT, 
channels=CHANNELS, 
rate=RATE, 
input=True, 
frames_per_buffer=CHUNK) 
 
print("* recording") 
 
frames = [] 
for i in range(0, int(RATE / CHUNK * RECORD_SECONDS)): 
data = stream.read(CHUNK) 
frames.append(data) 
 
print("* done recording") 
 
stream.stop_stream() 
stream.close() 
p.terminate() 
wf = wave.open(WAVE_OUTPUT_FILENAME, 'wb') 
wf.setnchannels(CHANNELS) 
wf.setsampwidth(p.get_sample_size(FORMAT)) 

 
 
wf.setframerate(RATE) 
wf.writeframes(b''.join(frames)) 
wf.close() 

3.百度语音识别 API 及代码实现

首先需要注册百度语音识别开发者账号,如下:
Alt其次,代码实现如下:

# 导入 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') 

4.接入图灵机器人

首先,创建一个图灵机器人,如下:
Alt注意,密钥要保持如下隐藏状态:
在这里插入图片描述

测试判断图灵机器人是否调用成功
# -*- coding: utf-8 -*- 
import urllib 
import json 
def getHtml(url): 
page = urllib.urlopen(url) 
html = page.read() 
 
return html 
if __name__ == '__main__': 
key = '你的 api key' 
api = 'http://www.tuling123.com/openapi/api?key=' + key + '& 
 
info=' 
while True: 
info = raw_input('我: ') 
request = api + info 
response = getHtml(request) 
dic_json = json.loads(response) 
print '机器人: '.decode('utf-8') + dic_json['text']| 
图灵机器人调用的代码:
def AskTuling(tuling_api, tuling_key, content1): 
    text_input = content1 
    req = { 
        "perception": 
    { 
        "inputText": 
        { 
            "text": text_input 
        }, 
        "selfInfo": 
        { 
            "location": 
            { 
                "city": "徐州", 
                "province": "江苏", 
                "street": "大学路" 
            } 
        } 
    }, 
    "userInfo":  
     { 
        "apiKey": "d4c739c4b5b7422ab15dcc286b8b6734", 
        "userId": "123" 
    } 
    } 
    # 将字典格式的 req 转为 utf8 编码的字符串 
    req = json.dumps(req,cls=MyEncoder,indent=4).encode('utf8') 
    print('\n' + '正在调用图灵机器人 API...') 
    http_post = urllib.request.Request(tuling_api, data=req, headers={'content-type': 'application/json'}) 
    response = urllib.request.urlopen(http_post) 
    print('得到回答,输出为字典格式:') 
    response_str = response.read().decode('utf8') 
    response_dic = json.loads(response_str) 
    intent_code = response_dic['intent']['code'] 
    # 返回网页类的输出方式 
    if(intent_code == 10023): 
        results_url = response_dic['results'][0]['values']['url'] 
        results_text = response_dic['results'][1]['values']['text'] 
        answer = {"code": intent_code, "text": results_text, "url":results_url} 
        print(answer) 
        return(results_text) 
    # 一般的输出方式 
    else: 
        results_text = response_dic['results'][0]['values']['text'] 
        answer = {"code": intent_code, "text": results_text} 
        print(answer) 
        return(results_text) 
if __name__ == '__main__': 
    while True: 
        record_to_file('demo.wav') 
        voice_text = baiduASR() 
        print ('voice_text:', voice_text) 
        answer_text = AskTuling(TULING_API, TULING_KEY, voice_text) 
        if baiduTTS(answer_text): 
            os.system("cvlc --play-and-exit %s" % BAIDU_TTS_MP3) 
  • 21
    点赞
  • 200
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
### 回答1: 树莓派AI套件是一种集成了AI功能的电子开发套件,可以帮助开发者快速构建智能音响、语音识别、视觉识别等应用。其中,语音识别是其重要的功能之一。该套件采用了Google的语音识别API,能够实现高效准确的语音识别。 对于开发者而言,树莓派AI套件语音识别功能非常实用。开发者可以结合其它模块,如喇叭、麦克风、触摸屏等,构建出智能音箱等智能识别系统。此外,树莓派AI套件的语音识别功能也可被应用于智能家居、机器人、智能助手等领域。 与此同时,树莓派AI套件语音识别功能也存在一些限制。首先,使用该功能需要联网,而且语音识别质量也会受到网络质量的影响。其次,该套件的语音识别只能支持固定的语音指令,对于一些复杂的语音或者带有口音的语音,其准确度也会受到影响。因此,开发者在使用树莓派AI套件语音识别功能时,需要综合考虑这些因素,合理设计语音识别系统。 总之,树莓派AI套件语音识别功能对于开发者而言是一种非常实用的功能,可以帮助开发者轻松地构建智能识别系统,提高开发效率和用户体验。 ### 回答2: 树莓派ai套件是一个强大的工具,它能够为用户提供语音识别功能,是人工智能领域的一大提升。利用树莓派ai套件,用户可以轻松地对语音内容进行转化,实现人机对话。对于储存较少的设备,这是一个非常有用的功能。 树莓派ai套件的语音识别能够实时地识别用户发出的语音内容,识别准确度非常高。此外,这个套件还支持自然语言处理,能够智能地理解用户的语言表达。利用树莓派ai套件,用户可以迅速地将语音内容转化为文本信息,并且将其储存在云端,实现信息的传输和分析。 总的来说,使用树莓派ai套件进行语音识别具有许多优点,其中最明显的就是其高效性和精度。此外,这个套件支持的语音识别和自然语言处理功能为人机交互提供了更为智能、更人性化的解决方案。这个套件在研究和开发人工智能应用时,将会是不可或缺的利器。 ### 回答3: 树莓派AI套件是一款应用广泛的开源硬件平台,也是一款人工智能教育应用的好教具。它是由英国的树莓派基金会设计和生产的一种微型电脑。经过不断的更新,现在的树莓派具备了人工智能方面的功能,其中之一就是语音识别功能。 树莓派AI套件中使用的语音识别是基于百度AI平台的语音识别接口进行开发的。用户只需要将麦克风连接到树莓派上,然后通过编程软件对相关代码进行配置,即可实现语音识别。 该功能的主要应用场景是智能家居和机器人控制等领域。比如,有了语音识别功能的树莓派,可以通过语音指令来控制智能家居中的各种家电,比如智能灯、智能电视、智能空调等。在机器人控制方面,语音识别功能可以用来实现语音控制机器人的行动。 总的来说,树莓派AI套件中的语音识别功能非常实用,可以让用户更加方便、快捷地控制智能设备和机器人,是一项很有潜力的应用。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值