成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

爆肝一周,用Python在物聯(lián)網(wǎng)設(shè)備上寫了個智能語音助手

I_Am / 2604人閱讀

摘要:背景介紹智能語音助手作為物聯(lián)網(wǎng)領(lǐng)域的一個重要生態(tài)成員,是一種全新的交互方式,它能夠解放雙手,隨時提供服務(wù),無須借助任何按鍵。學(xué)完該案例讓你對智能語音助手有一個全新的認(rèn)識??靵泶蛟炷愕闹悄苷Z音助手吧

1. 背景介紹

智能語音助手作為物聯(lián)網(wǎng)領(lǐng)域的一個重要生態(tài)成員,是一種全新的交互方式,它能夠解放雙手,隨時提供服務(wù),無須借助任何按鍵。想必很多開發(fā)者都有玩過天貓精靈、小愛同學(xué)或者小度吧,看到這些炫酷的人工智能產(chǎn)品,是不是很想搞清楚它到底怎么工作的沖動,是不是也想自己打造一臺專屬智能語音助手。僅僅通過說出“HaaS HaaS”、“天貓精靈”、或“小愛同學(xué)”,就可以喚醒語音助手并告訴它想要的信息。在商業(yè)領(lǐng)域的人工智能產(chǎn)品要么是C或者C++開發(fā),工作量巨大?,F(xiàn)在有了HaaS EDU K1,通過數(shù)100行Python代碼就可以輕松打造一款智能音箱。這種全新的開發(fā)方式,還不來體驗下!

開始學(xué)習(xí)之前我們先看一下案例效果:

爆肝一周,用Python在物聯(lián)網(wǎng)設(shè)備上寫了個智能語音助手!

涉及知識點(diǎn)

  • HaaS小程序配網(wǎng)
  • https網(wǎng)絡(luò)通信
  • 本地喚醒AI推理引擎運(yùn)用
  • 云端智能語音交互平臺應(yīng)用
  • 云端智能對話機(jī)器人應(yīng)用
  • 模擬MIC聲音采樣
  • 喇叭播放wav、mp3文件
  • 文件系統(tǒng)應(yīng)用
  • OLED繪字

2. 方案介紹

本案例基于HaaS云端一體智能語音交互框架打造的。整個框架如下:

從框架可以看到,該案例是一個完整的云端語音交互全鏈路,包括了本地語音喚醒、回聲消除、降噪、ASR、NLP、TTS等。學(xué)完該案例讓你對智能語音助手有一個全新的認(rèn)識。

2.1 軟件功能

整個方案支持:

  1. HaaS小程序配網(wǎng);
  2. HaaS HaaS離線語音喚醒;
  3. 云端智能語音交互;
  4. 自定義問答、閑聊、多輪對話、知識庫等對話流管理。

3. 開發(fā)環(huán)境搭建

3.1 硬件準(zhǔn)備

3.1.1 使用HaaS語音擴(kuò)展板

HaaS語音擴(kuò)展板是專門為HaaS EDU K1教育神器打造的,無縫對接,即查即用,不過目前沒有對外售賣,后續(xù)將在一些訓(xùn)練營或活動中定向贈送。以下是使用HaaS語音擴(kuò)展板的硬件圖,最終正式的版本比這個更小。

3.1.2 使用外接麥克風(fēng)和喇叭

如果沒有HaaS語音擴(kuò)展板也沒有關(guān)系,請按照如下步驟接入麥克風(fēng)和喇叭:

麥克風(fēng)接入MIC1_N接口,喇叭介入SPKLP接口。

HaaS EDU K1硬件排線圖請參考
https://help.aliyun.com/document_detail/205267.html

購買鏈接僅供參考??!我們不負(fù)責(zé)商家發(fā)貨的品質(zhì)保障等問題?。?/p>

名稱

數(shù)量

參考鏈接

HaaS EDU K1開發(fā)版

1

HaaS EDU K1購買鏈接

microUSB數(shù)據(jù)線

1

普通microusb線即可

模擬MIC

1

模擬MIC參考鏈接

喇叭

1

喇叭參考鏈接

杜邦線

數(shù)條

NA

3.2 環(huán)境搭建

參考《HaaS EDU K1快速開始》中安裝HaaS Studio完成AliOS Things開發(fā)環(huán)境搭建。

3.2.1 Python固件編譯、燒錄

參考 《HaaS EDU K1快速上手》燒錄帶Python引擎的固件包。

打開串口

固件燒錄完成后,可以通過串口查看示例的運(yùn)行結(jié)果,打開串口的具體方法可參考《HaaS EDU K1快速開始》查看日志章節(jié)。

3.2.2 Python案例代碼下載

該案例相關(guān)的源代碼下載可參考《創(chuàng)建工程》,該案例是Python案例。
其中:

選擇Python開發(fā)

選擇解決方案: “voice_assistant”

選擇開發(fā)板: HaaS EDU K1

4. 軟件架構(gòu)

4.1 代碼結(jié)構(gòu)

├── 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

4.2 程序主體

100行Python代碼搞定程序主體:

def main():    # 初始化聲卡驅(qū)動    print("enter main function/n")    Snd.install_codec_driver()    Snd.init()    # 打開語音擴(kuò)展板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)        # 動態(tài)獲取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)        # 根據(jù)意圖執(zhí)行設(shè)備端動作        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()    # 釋放聲卡驅(qū)動    Snd.uninstall_codec_driver()    Snd.deinit()

5. 案例體驗

本案例不支持打斷功能,所以在喚醒后等待語音播報完成在進(jìn)行問答,屏幕上有對應(yīng)的提示。

5.1 云端功能開通

5.1.1 阿里云賬號開通及訪問控制

參考《爆肝一周,用Python在物聯(lián)網(wǎng)設(shè)備上寫了個智能語音助手-創(chuàng)建阿里云賬號》完成以下兩個步驟:

  1. 注冊阿里云賬號
  2. 獲取AccessKey和Secret

5.1.2 智能語音交互開通及配置

參考《爆肝一周,用Python在物聯(lián)網(wǎng)設(shè)備上寫了個智能語音助手-阿里云智能語音交互》完成以下三個主要步驟:

  1. 智能語音交互功能開通
  2. 完成語音識別和語音合成功能進(jìn)行配置
  3. 獲取智能語音交互Appkey

5.1.3 智能對話機(jī)器人開通及配置

參考《爆肝一周,用Python在物聯(lián)網(wǎng)設(shè)備上寫了個智能語音助手-阿里云智能對話機(jī)器人》完成以下四個主要步驟:

  1. 創(chuàng)建會話機(jī)器人
  2. 配置機(jī)器人知識庫
  3. 發(fā)布機(jī)器人
  4. 在機(jī)器人管理頁獲取對話機(jī)器人實例ID

5.2 設(shè)備端代碼配置

5.2.1 賬號信息配置

在上述5.1云端功能開通完成后,將獲取到的AccessKey/Access Secret/Appkey/機(jī)器人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# 查看你創(chuàng)建的項目功能配置旁邊的appkey# Chatbot對話機(jī)器人實例IDinstance_id = "chatbot-cn-XXXXXXX"# 登陸https://chatbot.console.aliyun.com/yunme.htm#/beebot_preview/overview# 查看您創(chuàng)建的機(jī)器人ID

5.2.2 開關(guān)燈意圖匹配

在5.1.3 智能對話機(jī)器人開通及配置中介紹了如何創(chuàng)建開關(guān)燈對話流,設(shè)備端events中的名稱需與對話流中的意圖名稱保持一致。設(shè)備端對意圖的處理代碼位于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()

當(dāng)匹配意圖為red_light_on時,設(shè)備端將GPIO led_r拉高置1點(diǎn)亮紅燈。其他意圖類似處理,如果有特殊需求,可以根據(jù)需要修改意圖,比如控制其他GPIO或者PWM等操作。

5.3 Python代碼推送

參考《Python 輕應(yīng)用開發(fā)工具 HaaS-Studio》推送本案例Python代碼包到設(shè)備中。

注意事項

如果遇到代碼推送結(jié)束時報錯,請確保設(shè)備/data/目錄下,除python相關(guān)文件外,沒有其他不必要的文件,如有,請刪除再重試。

5.4 HaaS小程序配網(wǎng)

  1. 確認(rèn)OLED上顯示"Enter WiFi Smart Config...";
  2. 打開手機(jī)支付寶,搜索HaaS小程序,同時打開手機(jī)藍(lán)牙功能;
  3. 點(diǎn)擊掃描待配網(wǎng)設(shè)備;
  4. 選擇Wi-Fi SSID;
  5. 填入Wi-Fi密碼;
  6. 點(diǎn)擊發(fā)起配網(wǎng);
  7. 等待設(shè)備端連接Wi-Fi,當(dāng)聽到語音播報“網(wǎng)絡(luò)連接成功!”或OLED看到“WiFi Connected!”表示網(wǎng)絡(luò)連接成功。

注意事項

如果已經(jīng)連接過WiFi,想要重新配網(wǎng),請進(jìn)入串口按"Ctrl+C",然后按“Ctrl+D”退出Python,再rm /data/wifi.conf后重啟進(jìn)入配網(wǎng)。

5.5 語音交互體驗

聯(lián)網(wǎng)成功后,說出“HaaS HaaS“后,設(shè)備喚醒??梢蚤_始向HaaS小助手提問了,讓她幫你查天氣,開關(guān)燈等。當(dāng)然前提是你在智能對話機(jī)器人中已經(jīng)配置好對話策略??靵泶蛟炷愕闹悄苷Z音助手吧!

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/119774.html

相關(guān)文章

  • 亞馬遜新時代:云服務(wù)獨(dú)領(lǐng)風(fēng)騷,AI助手無處不在

    摘要:亞馬遜人工智能語音助手技能超過萬個,全球各主要硬件廠商紛紛搭載或兼容,使得其亞馬遜助手無處不在。物聯(lián)網(wǎng)設(shè)備透過云端實現(xiàn)跨行業(yè)和跨設(shè)備互聯(lián)互通,所收集數(shù)據(jù)除了在邊緣側(cè)處理,還需要上傳至云端,云端作為數(shù)據(jù)集散地,各種數(shù)據(jù)經(jīng)過云端AI處理后,對這些數(shù)據(jù)利用將會帶來新的商業(yè)模式。在物聯(lián)網(wǎng)資深專家楊劍勇看來,云計算是全球物聯(lián)網(wǎng)重要基礎(chǔ)設(shè)施,作為物聯(lián)網(wǎng)產(chǎn)業(yè)發(fā)展基石,聚集了亞馬遜、微軟、谷歌和BAT等重量...

    Bmob 評論0 收藏0
  • Google Home與亞馬遜Echo “家庭云計算機(jī)”戰(zhàn)爭打響

    摘要:年月日,智能音箱全球發(fā)貨,早在今年月的谷歌開發(fā)者大會上,作為新的生態(tài)圈硬件角色開始涉足智能家居領(lǐng)域,鎖定目前美國最火爆的智能家居硬件亞馬遜為競爭對手。2016年11月4日,Google Home智能音箱全球發(fā)貨,早在今年5月的谷歌I/O開發(fā)者大會上,Google Home作為新的Google生態(tài)圈硬件角色開始涉足智能家居領(lǐng)域,鎖定目前美國最火爆的智能家居硬件亞馬遜Echo為競爭對手。Goog...

    Lycheeee 評論0 收藏0
  • JavaScript在物聯(lián)網(wǎng)中的應(yīng)

    摘要:定律在那篇最流行的編程語言能做什么里,我們列舉了在不同領(lǐng)域的使用情況,今天讓我們來詳解一下在物聯(lián)網(wǎng)中的應(yīng)用。這個硬件層決定了物聯(lián)網(wǎng)應(yīng)用比應(yīng)用更加復(fù)雜。這時,我開始關(guān)注實現(xiàn)物聯(lián)網(wǎng)應(yīng)用的可能性。 凡是能用JavaScript寫出來的,最終都會用JavaScript寫出來。 —— Atwood定律 在那篇《最流行的編程語言JavaScript能做什么?》里,我們列舉了JavaScript在不...

    aaron 評論0 收藏0
  • JavaScript在物聯(lián)網(wǎng)中的應(yīng)

    摘要:定律在那篇最流行的編程語言能做什么里,我們列舉了在不同領(lǐng)域的使用情況,今天讓我們來詳解一下在物聯(lián)網(wǎng)中的應(yīng)用。這個硬件層決定了物聯(lián)網(wǎng)應(yīng)用比應(yīng)用更加復(fù)雜。這時,我開始關(guān)注實現(xiàn)物聯(lián)網(wǎng)應(yīng)用的可能性。 凡是能用JavaScript寫出來的,最終都會用JavaScript寫出來。 —— Atwood定律 在那篇《最流行的編程語言JavaScript能做什么?》里,我們列舉了JavaScript在不...

    Barrior 評論0 收藏0
  • 2017 十大失敗 AI 案例

    摘要:一名德國男子不在家,家中的被意外激活,并在半夜兩點(diǎn)開始播放音樂,吵醒了鄰居。然而在兩個小時后,公交車就被一輛大貨車撞上了。匯豐馬上推出了解決方案嘗試三次失敗之后就鎖定賬戶。 showImg(https://segmentfault.com/img/bV192y?w=700&h=312); 簡評:整體來說,2017 年的 AI 進(jìn)步還是不小的,比 2016 的 AR/VR 強(qiáng)很多。今天的...

    tomener 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<