摘要:背景介绍智能语音助手作为物联网领域的一个重要生态成员,是一种全新的交互方式,它能够解放双手,随时提供服务,无须借助任何按键。学完该案例让你对智能语音助手有一个全新的认识。快来打造你的智能语音助手吧
智能语音助手作为物联网领域的一个重要生态成员,是一种全新的交互方式,它能够解放双手,随时提供服务,无须借助任何按键。想必很多开发者都有玩过天猫精灵、小爱同学或者小度吧,看到这些炫酷的人工智能产品,是不是很想搞清楚它到底怎么工作的冲动,是不是也想自己打造一台专属智能语音助手。仅仅通过说出“HaaS HaaS”、“天猫精灵”、或“小爱同学”,就可以唤醒语音助手并告诉它想要的信息。在商业领域的人工智能产品要么是C或者C++开发,工作量巨大。现在有了HaaS EDU K1,通过数100行Python代码就可以轻松打造一款智能音箱。这种全新的开发方式,还不来体验下!
开始学习之前我们先看一下案例效果:
爆肝一周,用Python在物联网设备上写了个智能语音助手!
涉及知识点
本案例基于HaaS云端一体智能语音交互框架打造的。整个框架如下:
从框架可以看到,该案例是一个完整的云端语音交互全链路,包括了本地语音唤醒、回声消除、降噪、ASR、NLP、TTS等。学完该案例让你对智能语音助手有一个全新的认识。
整个方案支持:
HaaS语音扩展板是专门为HaaS EDU K1教育神器打造的,无缝对接,即查即用,不过目前没有对外售卖,后续将在一些训练营或活动中定向赠送。以下是使用HaaS语音扩展板的硬件图,最终正式的版本比这个更小。
如果没有HaaS语音扩展板也没有关系,请按照如下步骤接入麦克风和喇叭:
麦克风接入MIC1_N接口,喇叭介入SPKLP接口。
HaaS EDU K1硬件排线图请参考
https://help.aliyun.com/document_detail/205267.html
购买链接仅供参考!!我们不负责商家发货的品质保障等问题!!
名称 | 数量 | 参考链接 |
HaaS EDU K1开发版 | 1 | |
microUSB数据线 | 1 | 普通microusb线即可 |
模拟MIC | 1 | |
喇叭 | 1 | |
杜邦线 | 数条 | NA |
参考《HaaS EDU K1快速开始》中安装HaaS Studio完成AliOS Things开发环境搭建。
参考 《HaaS EDU K1快速上手》烧录带Python引擎的固件包。
打开串口
固件烧录完成后,可以通过串口查看示例的运行结果,打开串口的具体方法可参考《HaaS EDU K1快速开始》查看日志章节。
该案例相关的源代码下载可参考《创建工程》,该案例是Python案例。
其中:
选择Python开发
选择解决方案: “voice_assistant”
选择开发板: HaaS EDU K1
├── asr.py # 云端语音识别处理接口├── kws.py # 语音唤醒识别处理接口├── main.py # 主程序├── nlp.py # 云端智能对话交互处理接口├── tts.py # TTS语音合成处理接口├── oled.py # oled显示接口├── player.py # TTS语音播报接口├── README.md # 使用文档说明├── recorder.py # 录音接口├── resource # 本地语料文件│ ├── network_connecting.mp3│ ├── network_fail.mp3│ ├── network_ok.mp3│ ├── noquestion.mp3│ ├── sorry.mp3│ ├── wakeup.mp3│ ├── welcome.mp3│ ├── get_token_fail.mp3└── └── wifi_smartconfig.mp3
100行Python代码搞定程序主体:
def main(): # 初始化声卡驱动 print("enter main function/n") Snd.install_codec_driver() Snd.init() # 打开语音扩展板PA,PIN23: GPIO19 gpio = GPIO() gpio.open("GPIO19") gpio.write(1) gpio.close() # 初始化oled oledInit() #初始化播放器 audioPlayerInit() # 录音初始化 audioRecorderInit() # 连接WiFi connectWifi() # get_wifi_status() sessionId = None is_session_finished = True # 初始化kws唤醒词 global wakeup, count wakeup = False # 播报欢迎语料 oledShowText("I am your HaaS", 6, 18, 1, True) oledShowText("voice assistant!", 4, 30, 1, False) audioPlay(welcome_file) while True: if is_session_finished == True: # 非多轮对话时播放提示音 oledShowText("I am your HaaS", 6, 18, 1, True) oledShowText("voice assistant!", 4, 30, 1, False) kwsEnable(kwsCb) while wakeup == False: time.sleep(0.2) kwsDisable() # 播放唤醒提示音 oledShowText("Host, i am here!", 2, 24, 1, True) audioPlay(wakeup_file) wakeup = False is_session_finished = True # record 3sec pcm data oledShowText("Please speak...", 8, 24, 1, True) rframes, length = audioRecord(duration) # ASR识别 oledShowText("Recognizing...", 12, 24, 1, True) # 动态获取token token_resp = ucloud_ai.get_token_id(access_key, access_secret, domain, region_id) print("token_resp: %s" %token_resp) if token_resp == None: audioPlay(token_fail_file) continue token_resp = ujson.loads(token_resp) if token_resp != None: if token_resp.get("ErrMsg") != "": audioPlay(token_fail_file) continue asr_token = token_resp.get("Token").get("Id") else: print("get token fail") asr_token = asr_default_token if asr_token == None: audioPlay(sorry_file) continue asr_text = asrProcess(app_key, asr_token, "pcm", rframes, length) if asr_text == None: oledShowText("Answering...", 12, 24, 1, True) audioPlay(sorry_file) # 抱歉,我没有听清楚,请重新说一次试试 continue # NLP自然语音处理 is_session_finished, sessionId, intentName, text = nlpProcess(access_key, access_secret, instance_id, sessionId, asr_text) if text == None: oledShowText("Answering...", 12, 24, 1, True) audioPlay(noquestion_file) # 抱歉,没有找到你问的问题,请换一个试试 continue # TTS合成 # text = "今天天气很好" tts_resp = ttsProcess(app_key, asr_token, 3, 16000, "siqi", 100, 0, 0, text, tts_file) oledShowText("Answering...", 12, 24, 1, True) # 根据意图执行设备端动作 doIntent(intentName) if tts_resp == True: # 播放tts print("start to audioPlay tts/n") audioPlay("fs:" + tts_file) else: print("tts resposne fail") audioPlay(network_fail_file) # 释放kws资源 kwsDisable() # 释放播放器 audioPlayerUninit() # 释放录音资源 audioRecordUninit() # 释放声卡驱动 Snd.uninstall_codec_driver() Snd.deinit()
本案例不支持打断功能,所以在唤醒后等待语音播报完成在进行问答,屏幕上有对应的提示。
参考《爆肝一周,用Python在物联网设备上写了个智能语音助手-创建阿里云账号》完成以下两个步骤:
参考《爆肝一周,用Python在物联网设备上写了个智能语音助手-阿里云智能语音交互》完成以下三个主要步骤:
参考《爆肝一周,用Python在物联网设备上写了个智能语音助手-阿里云智能对话机器人》完成以下四个主要步骤:
在上述5.1云端功能开通完成后,将获取到的AccessKey/Access Secret/Appkey/机器人ID填入到main.py中:
# 阿里云访问账号access_key = "Your-Access-Key"access_secret = "Your-Access-Secret"# 智能语音交互app_key = "Your-App-Key"# 登陆https://nls-portal.console.aliyun.com/overview# 查看你创建的项目功能配置旁边的appkey# Chatbot对话机器人实例IDinstance_id = "chatbot-cn-XXXXXXX"# 登陆https://chatbot.console.aliyun.com/yunme.htm#/beebot_preview/overview# 查看您创建的机器人ID
在5.1.3 智能对话机器人开通及配置中介绍了如何创建开关灯对话流,设备端events中的名称需与对话流中的意图名称保持一致。设备端对意图的处理代码位于main.py中,代码如下:
def doIntent(intentName): if intentName == None: return print("intentName: %s" %intentName) leds=("led_r", "led_g", "led_b") events = [ {"light_on": "leds", "value": 1}, {"light_off": "leds", "value": 0}, {"red_light_on": "led_r", "value": 1}, {"red_light_off": "led_r", "value": 0}, {"green_light_on": "led_g", "value": 1}, {"green_light_off": "led_g", "value": 0}, {"blue_light_on": "led_b", "value": 1}, {"blue_light_off": "led_b", "value": 0}, ] gpio = GPIO() for event in events: led = event.get(intentName) if led != None: value = event.get("value") if led == "leds": for led in leds: gpio.open(led) gpio.write(value) gpio.close() else: gpio.open(led) gpio.write(value) gpio.close()
当匹配意图为red_light_on时,设备端将GPIO led_r拉高置1点亮红灯。其他意图类似处理,如果有特殊需求,可以根据需要修改意图,比如控制其他GPIO或者PWM等操作。
参考《Python 轻应用开发工具 HaaS-Studio》推送本案例Python代码包到设备中。
注意事项
如果遇到代码推送结束时报错,请确保设备/data/目录下,除python相关文件外,没有其他不必要的文件,如有,请删除再重试。
注意事项
如果已经连接过WiFi,想要重新配网,请进入串口按"Ctrl+C",然后按“Ctrl+D”退出Python,再rm /data/wifi.conf后重启进入配网。
联网成功后,说出“HaaS HaaS“后,设备唤醒。可以开始向HaaS小助手提问了,让她帮你查天气,开关灯等。当然前提是你在智能对话机器人中已经配置好对话策略。快来打造你的智能语音助手吧!
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/119774.html
摘要:亚马逊人工智能语音助手技能超过万个,全球各主要硬件厂商纷纷搭载或兼容,使得其亚马逊助手无处不在。物联网设备透过云端实现跨行业和跨设备互联互通,所收集数据除了在边缘侧处理,还需要上传至云端,云端作为数据集散地,各种数据经过云端AI处理后,对这些数据利用将会带来新的商业模式。在物联网资深专家杨剑勇看来,云计算是全球物联网重要基础设施,作为物联网产业发展基石,聚集了亚马逊、微软、谷歌和BAT等重量...
摘要:年月日,智能音箱全球发货,早在今年月的谷歌开发者大会上,作为新的生态圈硬件角色开始涉足智能家居领域,锁定目前美国最火爆的智能家居硬件亚马逊为竞争对手。2016年11月4日,Google Home智能音箱全球发货,早在今年5月的谷歌I/O开发者大会上,Google Home作为新的Google生态圈硬件角色开始涉足智能家居领域,锁定目前美国最火爆的智能家居硬件亚马逊Echo为竞争对手。Goog...
摘要:定律在那篇最流行的编程语言能做什么里,我们列举了在不同领域的使用情况,今天让我们来详解一下在物联网中的应用。这个硬件层决定了物联网应用比应用更加复杂。这时,我开始关注实现物联网应用的可能性。 凡是能用JavaScript写出来的,最终都会用JavaScript写出来。 —— Atwood定律 在那篇《最流行的编程语言JavaScript能做什么?》里,我们列举了JavaScript在不...
摘要:定律在那篇最流行的编程语言能做什么里,我们列举了在不同领域的使用情况,今天让我们来详解一下在物联网中的应用。这个硬件层决定了物联网应用比应用更加复杂。这时,我开始关注实现物联网应用的可能性。 凡是能用JavaScript写出来的,最终都会用JavaScript写出来。 —— Atwood定律 在那篇《最流行的编程语言JavaScript能做什么?》里,我们列举了JavaScript在不...
摘要:一名德国男子不在家,家中的被意外激活,并在半夜两点开始播放音乐,吵醒了邻居。然而在两个小时后,公交车就被一辆大货车撞上了。汇丰马上推出了解决方案尝试三次失败之后就锁定账户。 showImg(https://segmentfault.com/img/bV192y?w=700&h=312); 简评:整体来说,2017 年的 AI 进步还是不小的,比 2016 的 AR/VR 强很多。今天的...
阅读 3605·2021-11-15 11:38
阅读 2800·2021-11-11 16:55
阅读 2549·2021-11-08 13:22
阅读 2626·2021-11-02 14:45
阅读 1303·2021-09-28 09:35
阅读 2566·2021-09-10 10:50
阅读 462·2019-08-30 15:44
阅读 2774·2019-08-29 17:06