树莓派 百度语音 智能家居小助手

大体思路(程序写的有点乱,只是大体框架,还有好多坑留着慢慢填)

树莓派3通过USB声卡录音 ==>> 录音传给百度语音识别 ==>> 返回txt文本 ==>>

IF TXT=操作智能家居的语句 THEN 执行相应动作

ELSE 将txt文本提交tuling123 ==>> 返回txt ==>> 传给百度语音文字转语音==>> 树莓派播放

import uuid
import base64
import json
import urllib
from urllib import request
import urllib.parse
import sys
import wave
from pyaudio import PyAudio,paInt16
from pypinyin import pinyin, lazy_pinyin
import pypinyin
import os
 
channels = 1
framerate = 8000
NUM_SAMPLES = 2000
sampwidth = 2
TIME=2
apiKey = "SSWhZvvboPy5mbSy8ahOSFjP"  
secretKey = "c9b0195c91d435ca908ffc07dedbc4bd"  
asr_server = ‘http://vop.baidu.com/server_api‘
auth_url = "https://openapi.baidu.com/oauth/2.0/token?grant_type=client_credentials&client_id=SSWhZvvboPy5mbSy8ahOSFjP&client_secret=c9b0195c91d435ca908ffc07dedbc4bd"

#将数据保存成wav格式文件
def save_wave_file(filename,data):
	wf = wave.open(filename,‘wb‘)
	wf.setnchannels(channels)
	wf.setsampwidth(sampwidth)
	wf.setframerate(framerate)
	wf.writeframes(b"".join(data))
	wf.close()

def get_token():
    res = urllib.request.urlopen(auth_url)  
    json_data = res.read().decode(‘utf-8‘) 
    a = json.loads(json_data)
    token = a[‘access_token‘]     
    return token
    
def baidu_record():
    os.system(‘arecord -D "plughw:1,0" -f S16_LE -d 3 -r 8000 ~/MyProject/temp.wav‘)
    print(‘done..‘)	

#将wav编码成base64格式,上传给百度语音识别,并取得识别的result,

    token = get_token()  
    mac_address=uuid.UUID(int=uuid.getnode()).hex[-12:]

#把wav文件以base64编码,再将需要上传的数据按照百度要求以json格式提交
    speech_file = ‘temp.wav‘
    with open(speech_file, ‘rb‘) as f:
            speech_data = f.read()
    speech_base64=base64.b64encode(speech_data).decode(‘utf-8‘)
    speech_length=len(speech_data)
    data_dict = {‘format‘:‘wav‘, ‘rate‘:8000, ‘channel‘:1, ‘cuid‘:mac_address, ‘token‘:token, ‘lan‘:‘zh‘, ‘speech‘:speech_base64, ‘len‘:speech_length}
    json_data = json.dumps(data_dict).encode(‘utf-8‘)
    json_length = len(json_data)
    request = urllib.request.Request(url=asr_server)
    request.add_header("Content-Type", "application/json")
    request.add_header("Content-Length", json_length)
    fs = urllib.request.urlopen(url=request, data=json_data)
#将百度返回的数据保存,并提取出result
    result_str = fs.read().decode(‘utf-8‘)
    json_resp = json.loads(result_str)

    print(json_resp)
    if json_resp[‘err_msg‘] == ‘success.‘:
        result=json_resp[‘result‘]
#        print(‘函数内 result‘+ result[0])
        return result[0]
    else:return ‘我不知道你在说什么‘

opt_list_open=[‘dakai‘,‘dakan‘,‘daka‘,‘daikai‘,‘daikan‘,‘daika‘,‘danka‘,‘dankai‘]
opt_list_close=[‘guanbi‘,‘guanshang‘,‘guanshan‘,‘guangbi‘]
loc_list_keting=[‘keting‘,‘kanting‘,‘kaiting‘]
obj_list_deng=[‘dadeng‘,‘daden‘,‘dadong‘]
obj_list_chuanglian  =[‘chuanglian‘,‘chuanlian‘,‘chuanglia‘]
    
while True:
    tmp = baidu_record()
    print(‘1========‘+tmp)
    if (tmp == ‘我不知道你在说什么‘):
        print(‘break comnt...‘)
        continue
    print(‘start....‘)
### 唤醒功能开始 ####
    if (‘噼里啪啦‘ in tmp):
        print(‘2....starting....‘)
        url = "http://tsn.baidu.com/text2audio?tex="+ ‘主人,请吩咐‘+"&lan=zh&per=0&pit=1&spd=7&cuid=8466761&ctp=1&tok="+get_token()
        os.system(‘mplayer "%s"‘%(url))
        cmd = baidu_record()
        a=lazy_pinyin(cmd)
        data = a[0:-1]
        print(data)
        if data== [‘da‘, ‘kai‘, ‘ke‘, ‘ting‘, ‘chuang‘, ‘lian‘]:
            print(‘打开客厅窗帘‘)
            url = "http://tsn.baidu.com/text2audio?tex="+‘客厅窗帘已打开‘+"&lan=zh&per=0&pit=1&spd=7&cuid=8466761&ctp=1&tok="+get_token()
            os.system(‘mplayer "%s"‘%(url))
            continue
        if data== [‘da‘, ‘kai‘, ‘chu‘, ‘fang‘, ‘deng‘]:
                print(‘打开厨房灯‘)
                url = "http://tsn.baidu.com/text2audio?tex="+‘厨房灯已打开‘+"&lan=zh&per=0&pit=1&spd=7&cuid=8466761&ctp=1&tok="+get_token()
                os.system(‘mplayer "%s"‘%(url))
                continue
### 开始图灵对话 ####
        key = ‘60db5011ff204107bf777a6ad1dead11‘ #key&api
        api = ‘http://www.tuling123.com/openapi/api?key=‘ + key + ‘&info=‘
        tuling_request = api   + urllib.parse.quote(cmd)
        response = urllib.request.urlopen(tuling_request).read().decode(‘utf-8‘)
        dic_json = json.loads(response)

#百度text转语音
        url = "http://tsn.baidu.com/text2audio?tex="+dic_json[‘text‘]+"&lan=zh&per=0&pit=1&spd=7&cuid=8466761&ctp=1&tok="+get_token()
        os.system(‘mplayer "%s"‘%(url))

#将中文转成拼音
    
#a=lazy_pinyin(cmd)
#data = a[0:-1]
#print(data)

#拼音模糊匹配

# if opt == ‘dakai‘ or ‘duokan‘ or ‘dakan‘ or ‘daka‘: opt=‘dakai‘
# if opt == ‘guanbi‘ or ‘guabi‘ or ‘guanbin‘ or ‘daka‘: opt=‘guanbi‘

# if loc == ‘keting‘ or ‘ketin‘ or ‘kaitin‘ or ‘kantin‘: loc=‘keting‘
# if loc == ‘woshi‘ or ‘washi‘ or ‘wosi‘ or ‘wasi‘: loc=‘woshi‘

# if obj == ‘deng‘ or ‘dong‘ or ‘den‘ or ‘duo‘:obj=‘deng‘

############################
# opt_list_open=[‘dakai‘,‘dakan‘,‘daka‘,‘daikai‘,‘daikan‘,‘daika‘,‘danka‘,‘dankai‘]
# opt_list_close=[‘guanbi‘,‘guanshang‘,‘guanshan‘,‘guangbi‘]
# loc_list_keting=[‘keting‘,‘kanting‘,‘kaiting‘]
# obj_list_deng=[‘deng‘,‘den‘,‘dong‘]

# if opt in opt_list_open: opt=‘dakai‘
# if opt in opt_list_close: opt=‘guanbi‘
# if loc in loc_list_keting: loc = ‘keting‘
# if obj in obj_list_deng: obj = ‘deng‘

# print(‘=== ====‘,opt+loc+obj)
#####

#判断位置,并用http方式提交给各个节点的nodemcu无线模块数据,最后由nodemcu操作继电器或者红外遥控
# if loc==‘keting‘:
    # url = "http://192.168.1.106:8080/?"+opt+loc+obj
    # urllib.request.urlopen(url)

# if loc==‘woshi‘:
    # url = "http://192.168.1.106:8080/?"+opt+loc+obj
    # urllib.request.urlopen(url)
时间: 2024-08-13 10:48:53

树莓派 百度语音 智能家居小助手的相关文章

「玩转树莓派」搭建智能家居远程监控系统

前言 前几天,在食堂吃饭,本来每天中午的新闻三十分换成了视频监控.我们已经习惯了,前十分钟看着领导都很忙,中间十分钟中国人民都很幸福,后十分钟别的国家都生活在水深火热里,顺便跟同事谈谈国家大事.突然主角换成了我们自己,便毫无抬头的欲望. 恰巧最近也有在接触大屏监控的解决方案,于是乎,就索性拿树莓派实验了一把,做一个智能监控系统. 软硬件清单 读卡器以及 SD 卡(装系统用) 摄像头一枚,支持 USB SSH连接工具(SecureCRT,Xshell) 宽带.路由器(家中常备) 装好系统的树莓派

一百元的智能家居——Asp.Net Mvc Api+讯飞语音+Android+Arduino

大半夜的,先说些废话提提神 如今智能家居已经不再停留在概念阶段,高大上的科技公司都已经推出了自己的部分或全套的智能家居解决方案,不过就目前的现状而言,大多还停留在展厅阶段,还没有广泛的推广起来,有人说最大的问题是标准不统一云云,但在我看来,最大的问题在于两个方面,一个是价格,一个是操作的简便性,技术上的问题并不是阻碍智能家居推广的核心因素. 再来说说最近很火很惹人爱的微软小娜,Cortana.本人作为微软的死忠,作为一名靠.Net混饭的屌丝程序男,自然是有一部撸妹的,并且在小娜推送当天更新了手机

基于树莓派(Raspberry Pi)平台的智能家居实现(一)----继电器模块,DHT11模块

前言:    ??其实做这个智能家居系统我还是因为学校的毕业设计,距离上篇文章发布已经过去了20多天了,之前想着只是做一个烟雾报警,然后通过Zabbix进行报警,但是通过这20多天的设计,我发现实现报警的功能其实除了邮件,还有短信.微信.甚至电话.但是因为各种原因,比如.....钱0.0,哈哈哈,因此我计划用企业微信进行一个报警,然后貌似通过普通微信进行一个简单的交互(interactive),还是不错的选择,并且做出来的效果也很棒.??最后想说的是:"基于树莓派(Raspberry Pi)平台

跑在树莓派上智能家居雏形

跑在树莓派上智能家居雏形 简介 一个以微信为终端的好玩的小东西 可以实现的功能 可以实现以手机微信端对树莓派终端进行实时监控.摄像头云台操纵.闯入报警.温度检测.灯光控制.自动光线控制等功能 设备图片 运行截图 需要用到的所有硬件 路由器 树莓派主板 树莓派电源(5V 2A) 至少 8g tf卡 (推荐class 10,8g足矣) 支持ouv的摄像头(罗技C170) 花生棒及电源(或用花生壳内网版代替) 乐高积木(小颗粒) 两根网线 温度传感器(DHT11) 光线传感器(光敏电阻模块) 人体红外

使用Olami SDK 语音控制一个支持HomeKit的智能家居的iOS程序

前言 HomeKit是苹果发布的智能家居平台.通过HomeKit组件,用户可以通过iphone.iPad和ipod Touch来控制智能灯泡,风扇.空调等支持HomeKit的智能家居,尤其是可以通过Siri进行语音控制. 但是通过Siri进行语音控制有个很大的问题,就是Siri支持的语料无法进行自由的扩展,没办法添加更多的说法.而Olami SDK则可以通过OSL(OLAMI 语法描述语言 OLAMI Syntax Language,简称:OSL)自由的进行扩展,对智能对话的能力扩展变得非常容易

基于讯飞语音的识别和图灵机器人的具体智能反馈,百度语音的播放,原因是讯飞语音的free版似乎播放做了限制

https://github.com/1158114251/-Intelligent-speech-robot https://www.kancloud.cn/turing/web_api/522992 图灵网站:https://www.kancloud.cn/turing/web_api/522992 apikey:820c4a6ca4694063ab6002be1d1c63d3 编码方式 UTF-8(调用图灵API的各个环节的编码方式均为UTF-8) 接口地址 http://openapi.

转载智能家居 作者:热情的沙漠 出处:http://www.cnblogs.com/buptzym/

理工男打造帝都89平智能家庭 毕业后的2016年年初,搬入新家,总算不用在出租屋里鬼混了,于是就想把之前童年的梦想:智能家居+家庭影院好好实现一下~ 相比帝都高昂的房价,这些东东还凑合玩得起,不过在有限预算下实现尽可能定制和强大的功能会更有意思.我yy了以下几个场景: 每当下班回家,指纹解锁大门,家里温馨的灯光自动打开,天气热的话空调也会自动开启.第二天如果下雨,前一天晚上灯光还会自动提醒我带伞. 即使出差在外地,我也能在宾馆里随时看家里电影,像访问本地硬盘一样读取家里文件,远程控制下载. 对手

2016(第三届)智能家居世界大会

活动时间:2016-08-18 08:00 — 2016-08-19 18:00 详细地址:深圳会展中心金田路与滨河大道交叉口(深圳) 主办单位:国际物联网贸易与应用促进会 承办单位:深圳市物联传媒有限公司 协办单位:广东省物联网公共技术支持中心.闪联.物联网咖啡 费用说明:六月优惠票 480元 大会背景 智能家居世界大会由国际物联网贸易与应用促进会主办,深圳市物联传媒有限公司承办,是国内第一家跨平台.跨产业.跨地域的智能家居国际交流大会.大会紧扣时代脉搏,与经济发展态势相呼应,与产业发展重点相

智能家居初学者小米、美的和京东们将梦归何处?

提起智能家居,你可能会想起电影里自动拉开的窗帘.语音控制的电视和自动亮起的吊灯.在国内,小米.美的.京东等国内企业也已经进军智能家居领域,但智能家居走到现在,似乎已经形成了一个难以打破的僵局:智能家居已经广为人知,但普及率却非常低. 小米.美的.京东:掘金者们的智能家居之梦 近些年来,集智能.便捷.创新于一体的智能家居产品给人们带来了精神与身体上的解放,智能家居也因其特殊的家庭应用场景而备受关注.而国内涉足智能家居领域的企业也是数不胜数,主要有三类,一类是互联网科技公司,如小米.百度等:一类是传