一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

當(dāng)語(yǔ)音助手遇到機(jī)器人

 Python技術(shù) 2021-06-17

來(lái)源:Python 技術(shù)「ID: pythonall」

當(dāng)語(yǔ)音助手遇到機(jī)器人

大家都知道現(xiàn)在智能手機(jī)都有語(yǔ)音助手,Mac 有 Siri,Windows 有小冰,那么這些語(yǔ)音助手遇到機(jī)器人會(huì)發(fā)生哪些有趣的對(duì)話呢?這里我們請(qǐng)來(lái)了圖靈機(jī)器人(http://www./)和 Siri 語(yǔ)音助手完成一次有趣的對(duì)話。

使用的到技術(shù)

圖靈機(jī)器人使用的是文字輸入而 Siri 使用的是語(yǔ)音輸入,需要文字轉(zhuǎn)語(yǔ)音和 Siri 截圖識(shí)別文字。下圖為程序的大致流程:

使用到的技術(shù)有:

  1. 圖靈機(jī)器人(http://www./)的 API 接口
  2. 百度 AI開(kāi)放平臺(tái)的語(yǔ)音合成接口、OCR文字識(shí)別接口
  3. ImageGrab 截圖
  4. 文件傳輸

導(dǎo)入的模塊有:

from PIL import ImageGrabimport requestsimport base64from urllib.parse import quote_plus

圖靈機(jī)器人 API

圖靈機(jī)器人登錄后創(chuàng)建機(jī)器人并復(fù)制 apiKey。

我們使用 API V2.0接入,接口的地址是:http://openapi./openapi/api/v2,用 POST 方式請(qǐng)求,這里使用文本方式向機(jī)器人發(fā)送消息。

def tuling(): """ 圖靈機(jī)器人 :return: """
host = 'http://openapi./openapi/api/v2' data = { "reqType":0, # 輸入類型:0-文本(默認(rèn))、1-圖片、2-音頻 "perception": { # 輸入信息 "inputText": { # 文本信息 "text": "嗨,Siri!" } }, "userInfo": { # 用戶信息 "apiKey": "8d78a28535c947e69c2ddbcc5efeed51", "userId": "1234567" } } response = requests.post(host, json=data) if response: return response.json()['results'][0]['values']['text'] else: return '錯(cuò)誤了!'

示例結(jié)果

[{'groupType': 1, 'resultType': 'text', 'values': {'text': '我的手機(jī)沒(méi)有siri'}}]

語(yǔ)音在線合成

在百度 AI 開(kāi)放平臺(tái)中有一個(gè)在線語(yǔ)音合成,這款 API 可以將文本轉(zhuǎn)換成音頻,我們這里將圖靈機(jī)器人返回的結(jié)果轉(zhuǎn)成 MP3 格式音頻。創(chuàng)建好百度應(yīng)用之后復(fù)制 api_key 和 secret_key 獲取 token。

def fetch_token(): """ 獲取token :return: token """ access_token = ""
api_key = 'Pd4uoyvt1cwD7n2sHtLd5Ov0' secret_key = '8BnaPRcv3tTNa94eaFVfFy1pW2UkmvrO'
token_url = 'http://openapi.baidu.com/oauth/2.0/token' params = {'grant_type': 'client_credentials', 'client_id': api_key, 'client_secret': secret_key} response = requests.post(token_url, post_data) if response: access_token = response.json()['access_token'] return access_token
def synthesized_speech(text, token): """ 合成語(yǔ)音 """
# 保存的文件路徑 mp3_path = "/Users/xx/Desktop/siri/result.mp3" tts_url = 'http://tsn.baidu.com/text2audio'
tex = quote_plus(text) # 此處TEXT需要兩次urlencode # tok:token,tex:文本,per:發(fā)音人,spd:語(yǔ)速(0-15)默認(rèn) 5,pit:音調(diào)(0-15)默認(rèn) 5, # vol:音量(0-9)默認(rèn) 5,aue:下載的文件格式, 3 mp3(default)、4 pcm-16k、5 pcm-8k、6 wav, # cuid:用戶唯一標(biāo)識(shí),lan ctp 固定參數(shù) params = {'tok': token, 'tex': tex, 'per': 4, 'spd': 5, 'pit': 5, 'vol': 5, 'aue': 3, 'cuid': "pythonjishu", 'lan': 'zh', 'ctp': 1}
response = requests.post(tts_url, params) if response: with open(mp3_path, 'wb') as of: of.write(response.content)

文件傳輸

在 Mac 上 Siri 和音頻同時(shí)操作是行不通的,此時(shí)播放音頻文件沒(méi)有聲音,我們必須把音頻文件傳輸?shù)降诙_(tái)電腦上。這時(shí)在命令行輸入 python3 -m http.server 把當(dāng)前電腦做一個(gè)簡(jiǎn)易的服務(wù)器。

python3 -m http.server

在第二臺(tái)電腦瀏覽器上輸入 http://IP地址:8000/,并找到音頻文件播放。

http://IP地址:8000/http://192.168.1.102:8000/Desktop/siri/result.mp3

截圖

當(dāng) Siri 聽(tīng)到聲音后會(huì)在最后一行返回結(jié)果,我們需要將 Siri 界面截圖和識(shí)別文字。

def grab_img(): """ 截圖 :return: """ img_path = "/Users/xx/Desktop/siri/grab.png" # bbbox 的參數(shù)為截取屏幕的一部分,距離左邊像素,上邊像素,右邊像素,下邊像素 img = ImageGrab.grab(bbox=(2630,80,3330,1290)) img.save(img_path) return img_path

文字識(shí)別

將 Siri 截圖后需要識(shí)別最后一行文字,這里使用百度 AI 開(kāi)放平臺(tái)的 OCR(還是和上面語(yǔ)音合成一樣創(chuàng)建應(yīng)用后復(fù)制 api_key 和 secret_key)將這段結(jié)果傳輸給圖靈機(jī)器人,一段對(duì)話就完成了。

def fench_ocr_token(): """ 獲取ocr token :return: token """
api_key = 'ioE84jDQmGNLG7heN6rovF9Q' secret_key = 'qGVyAobVtCGKdD1Ncz60IvGMdf3dP1ct'
access_token = "" url = 'https://aip./oauth/2.0/token?grant_type=client_credentials&client_id='+api_key+'&client_secret='+secret_key response = requests.get(url) if response: access_token = response.json()['access_token'] return access_token

def ocr(img_path, access_token): """ 通用文字識(shí)別 :return: 識(shí)別后的文字 """ text = "" request_url = "https://aip./rest/2.0/ocr/v1/general_basic" # 二進(jìn)制方式打開(kāi)圖片文件 f = open(img_path, 'rb') img = base64.b64encode(f.read()) params = {"image":img} request_url = request_url + "?access_token=" + access_token headers = {'content-type': 'application/x-www-form-urlencoded'} response = requests.post(request_url, data=params, headers=headers) if response: words_result = response.json()['words_result'] text = words_result[-1]['words'] return text

示例結(jié)果

最后一行取最后一個(gè)words
[{'words': '股市'}, {'words': 'Apple公司的股票價(jià)格”'}, {'words': '時(shí)鐘'}, {'words': '“柏林現(xiàn)在幾點(diǎn)鐘?”'}, {'words': '通訊錄'}, {'words': '“秦葳住在哪里?”'}, {'words': '查找'}, {'words': '“我的 iPhone在哪里?'}, {'words': '備忘錄'}, {'words': '“記下我午餐花了12塊錢(qián)”'}, {'words': '網(wǎng)絡(luò)搜索'}, {'words': '“上網(wǎng)查找北極熊”'}, {'words': '問(wèn)與答'}, {'words': '公斤等于多少磅?”'}, {'words': '播客'}, {'words': '播放播客”'}, {'words': '密碼'}, {'words': '“顯示我的密碼”'}, {'words': '嗨S'}, {'words': '嗨,Si很高興見(jiàn)到你。'}]

總結(jié)

這個(gè) Python 程序并不復(fù)雜只需要使用多個(gè) API 接口。希望小伙伴們都可以放開(kāi)思維寫(xiě)各種 Python 小程序練手。

    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多

    国产精品白丝一区二区| 视频一区二区三区自拍偷| 五月婷婷缴情七月丁香| 精品欧美一区二区三久久| 国产成人精品一区二区在线看| 国产一区二区三中文字幕| 欧美精品专区一区二区| 欧美日韩亚洲精品内裤| 国产亚洲精品俞拍视频福利区| 青青久久亚洲婷婷中文网| 成人你懂的在线免费视频| 婷婷伊人综合中文字幕| 亚洲一区二区三区在线免费 | 国产精品久久香蕉国产线| 日本少妇aa特黄大片| 国产日韩欧美在线播放| 色无极东京热男人的天堂| 国产一区二区三中文字幕 | 精品国产日韩一区三区| 亚洲成人精品免费在线观看| 亚洲中文字幕免费人妻| 国产成人综合亚洲欧美日韩| 日韩欧美91在线视频| 国产成人精品一区二三区在线观看 | 亚洲熟女国产熟女二区三区 | 中文字幕在线区中文色| 国产麻豆一线二线三线| 亚洲第一香蕉视频在线| 久久精品国产亚洲av麻豆尤物| 精品伊人久久大香线蕉综合| 国内精品美女福利av在线| 久一视频这里只有精品| 欧美国产日本免费不卡| 在线观看日韩欧美综合黄片| 91亚洲国产成人久久| 丰满少妇被粗大猛烈进出视频| 国产精品免费精品一区二区| 日韩欧美黄色一级视频| 久久99亚洲小姐精品综合| 99久久精品免费精品国产| 亚洲中文字幕有码在线观看|