九色国产,午夜在线视频,新黄色网址,九九色综合,天天做夜夜做久久做狠狠,天天躁夜夜躁狠狠躁2021a,久久不卡一区二区三区

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
樹莓派語音聊天機器人201802版
       最近用樹莓派實現(xiàn)了一個能和人對話的機器人,簡要介紹一下。

樹莓派(Raspberry Pi)是世界上最流行的微型電腦主板,是開源硬件的領(lǐng)導(dǎo)產(chǎn)品,它為學(xué)生計算機編程教育而設(shè)計,只有信用卡大小,且價格低廉。支持linux(debian)等操作系統(tǒng)。最重要的是資料完善,社區(qū)活躍。
我用的是樹莓派B+版本,基本配置是博通BCM2836處理器,4核900M主頻,1G RAM。

我的目標是做成一個和人對話的機器人,這就需要機器人有輸入設(shè)備和輸出設(shè)備。輸入設(shè)備是麥克風(fēng),輸出可以是HDMI、耳機或音響,我這里用了音響。下面是我的樹莓派照片。4個USB接口分別連了無線網(wǎng)卡、無線鍵盤、麥克風(fēng)、音響供電。


我們可以把機器人的對話分成三個部分:聽、思考、說。
“聽”,是把人說的話記錄下來,并轉(zhuǎn)換成文字。
“思考”,就是根據(jù)不同的輸入給出不同的輸出。比如,對方說“現(xiàn)在時間”,你就可以回答“現(xiàn)在是北京時間xx點xx分”。
“說”,是把文字轉(zhuǎn)換成語音,并播放出來。

這三個部分涉及到大量語音識別、語音合成、人工智能等技術(shù),這些都是要花大量時間精力研究的,好在有些公司已經(jīng)開放了接口給客戶使用。這里,我選擇了百度的API。下面分別說明這三個部分的實現(xiàn)。

“聽”

首先是把人說的話錄制下來,我使用了arecord工具。命令如下:
  1. arecord -D "plughw:1" -f S16_LE -r 16000 test.wav
其中,-D參數(shù)后接錄制設(shè)備,連接麥克風(fēng)后,樹莓派上有2個設(shè)備:內(nèi)部設(shè)備和外部usb設(shè)備,plughw:1代表使用外部設(shè)備。-f表示錄制的格式,-r表示聲音采樣頻率。由于后面提到的百度語音識別對音頻文件格式是有要求的,我們需要錄制成符合要求的格式。另外,在這里我沒有指定錄制的時間,它會一直錄制下去,直到用戶按下ctrl-c。錄制后的音頻文件保存為test.wav。
接下來,我們要把音頻轉(zhuǎn)換成文字,即語音識別(asr),百度的語音開放平臺提供了免費的服務(wù),并支持REST API
文檔見: http://yuyin.baidu.com/docs/asr/57
流程基本就是獲取token,把需要識別的語音信息、語音數(shù)據(jù)、token等發(fā)送給百度的語音識別服務(wù)器,就能獲取到對應(yīng)的文字。因為服務(wù)器支持REST API,我們可以用任何語言來實現(xiàn)客戶端的代碼,這里使用的是python



  1. # coding: utf-8

  2. import urllib.request
  3. import json
  4. import base64
  5. import sys

  6. def get_access_token():
  7.     url = "https://openapi.baidu.com/oauth/2.0/token"
  8.     grant_type = "client_credentials"
  9.     client_id = "填寫API Key?"
  10.     client_secret = "填寫Secret Key"

  11.     url = url + "?" + "grant_type=" + grant_type + "&" + "client_id=" + client_id + "&" + "client_secret=" + client_secret

  12.     resp = urllib.request.urlopen(url).read()
  13.     data = json.loads(resp.decode("utf-8"))
  14.     return data["access_token"]


  15. def baidu_asr(data, id, token):
  16.     speech_data = base64.b64encode(data).decode("utf-8")
  17.     speech_length = len(data)

  18.     post_data = {
  19.             "format" : "wav",
  20.             "rate" : 16000,
  21.             "channel" : 1,
  22.             "cuid" : id,
  23.             "token" : token,
  24.             "speech" : speech_data,
  25.             "len" : speech_length
  26.     }

  27.     url = "http://vop.baidu.com/server_api"
  28.     json_data = json.dumps(post_data).encode("utf-8")
  29.     json_length = len(json_data)
  30.     #print(json_data)

  31.     req = urllib.request.Request(url, data = json_data)
  32.     req.add_header("Content-Type", "application/json")
  33.     req.add_header("Content-Length", json_length)

  34.     print("asr start request\n")
  35.     resp = urllib.request.urlopen(req)
  36.     print("asr finish request\n")
  37.     resp = resp.read()
  38.     resp_data = json.loads(resp.decode("utf-8"))
  39.     if resp_data["err_no"] == 0:
  40.         return resp_data["result"]
  41.     else:
  42.         print(resp_data)
  43.         return None

  44. def asr_main(filename):
  45.     f = open(filename, "rb")
  46.     audio_data = f.read()
  47.     f.close()

  48.     token = get_access_token()
  49. ##    token = "以上獲取token令牌可以保持下來,不用一直獲取,一個月有效" 
  50.     uuid = "填寫AppID"
  51.     resp = baidu_asr(audio_data, uuid, token)
  52.     print(resp[0])
  53.     return resp[0]


“思考”
這里我使用了圖靈機器人。其文檔見:http://www.tuling123.com/help/h_cent_webapi.jhtml?nav=doc
它的使用非常簡單,這里不再贅述,代碼如下:
# coding: utf-8import requestsimport jsonimport sysdef Tuling(words):    Tuling_API_KEY = "此處填寫自己的Turling KEY"    body = {"key":Tuling_API_KEY,"info":words.encode("utf-8")}    url = "http://www.tuling123.com/openapi/api"    r = requests.post(url,data=body,verify=True)    if r:        date = json.loads(r.text)        print date["text"]        return date["text"]    else:        return None

“說”
先需要把文字轉(zhuǎn)換成語音,即語音合成(tts)。然后把聲音播放出來。
百度的語音開放平臺提供了tts的接口,并可配置男女聲、語調(diào)、語速、音量。服務(wù)器返回mp3格式的音頻數(shù)據(jù)。我們把數(shù)據(jù)以二進制方式寫入文件中。
詳見http://yuyin.baidu.com/docs/tts/136
代碼如下:
  1. # coding: utf-8

  2. import urllib.request
  3. import json
  4. import sys

  5. def baidu_tts_by_post(data, id, token):
  6.     post_data = {
  7.             "tex" : data,
  8.             "lan" : "zh",
  9.             "ctp" : 1,
  10.             "cuid" : id,
  11.             "tok" : token,
  12.     }

  13.     url = "http://tsn.baidu.com/text2audio"
  14.     post_data = urllib.parse.urlencode(post_data).encode('utf-8')
  15.     #print(post_data)
  16.     req = urllib.request.Request(url, data = post_data)

  17.     print("tts start request")
  18.     resp = urllib.request.urlopen(req)
  19.     print("tts finish request")
  20.     resp = resp.read()
  21.     return resp

  22. def tts_main(filename, words):
  23.     token = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
  24.     text = urllib.parse.quote(words)
  25.     uuid = "填寫AppID"
  26.     resp = baidu_tts_by_post(text, uuid, token)

  27.     f = open("test.mp3", "wb")
  28.     f.write(resp)
  29.     f.close()

得到音頻文件后,安裝mpg123: sudo apt-get install mpg123 ,可以使用mpg123播放器播放。
  1. mpg123 test.mp3

整合
最后,把這三個部分組合起來。
可以先把python相關(guān)的代碼整合成main.py,如下:
  1. import asr
  2. import tts
  3. import robot

  4. words = asr.asr_main("test.wav")
  5. new_words = robot.Tuling(words)
  6. tts.tts_main("test.mp3", new_words)

再使用腳本,調(diào)用相關(guān)工具:
  1. #! /bin/bash
  2. arecord -"plughw:1" -f S16_LE -r 16000 test.wav
  3. python3 main.py
  4. mpg123 test.mp3

好了,現(xiàn)在你可以和機器人對話了。運行腳本,對著麥克風(fēng)說句話,然后按ctrl-c,機器人就會回你話了。

本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊舉報
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
使用百度API實現(xiàn)語音識別——in python (2015
python實現(xiàn)的json數(shù)據(jù)以HTTP GET,POST,PUT,DELETE方式頁面請求
python,web登錄
Python開發(fā)之路(2)— 使用百度API實現(xiàn)語音識別
【百度語音rest API】文本轉(zhuǎn)換成語音,以及語音轉(zhuǎn)化成文本
樹莓派 python 百度語音控制 gpio 控制開關(guān)燈 | | URl
更多類似文章 >>
生活服務(wù)
熱點新聞
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服