Amazon Echo 买了一个新玩具。技术篇。2/2

in #cn7 years ago

先发个video 写一大片还不如看一个video,最后效果就是这样。
第一个是youtube,如果打不开,第二个是优酷的(不过不知道steemit怎么插入优酷视频)。


http://v.youku.com/v_show/id_XMjg5NjY2MzEyNA==.html?spm=a2h3j.8428770.3416059.1

言归正传,今天来说说geek怎么来玩这个玩具。如果不了解echo 是啥的,可以看看我第一篇。https://steemit.com/cn/@initnas/amazon-echo

买到手当天,就写了一个小skill,没啥用的skill,就是让alexa 听到我名字后拼命夸我。是为了第二天拿到公司后去逗同事们开心。

第二天和同事们聊天,我们desk是做期货交易,有时会有人来语音询价,比如买一手石油多少钱来,卖一手黄金多少钱啦。特别费时间,要一一回答。

所以我就想如果用Alexa来回答,就能节约时间了。所以回家就写了一个POC。实践一下,看看效果。

做这个poc 我用的系统是Linux,用的语言是python,用了一个外界lib:flask-ask。
Flask ask 是一个专门为alexa 写的lib,很好用。

第一我来说一下整体结构。
一个skill 有两部分。

第一是语音识别,这个由Amazon来完成,识别好以后,传给我用python写的代码。

第二就是识别后,怎么处理得到的内容,这个是我通过Flask-ask写的代码,测试的时候服务器是我的电脑。便于debug。

第一部分是在Amazon Alexa网站上操作,其实就是告诉她,如果听到哪些关键词,应该怎么抓取和传送。

比如说如果听到Can you please give the price for {currency}。 Alexa就知道这个问题是用来询价,并且是询的是什么currency。

用户如果说 Can you please give the price for bitcoin?

Amazon就会抓取关键词,让Skill知道 到底是要问BTC 还是 ETH。
{
"slots": [
{
"name": "currency",
"type": "CRYPTO_CURRENCY"
}
],
"intent": "RFQIntent"
}

那么我的python处理这个问题的代码就是。

@ask.intent("RFQIntent", convert={'currency': str}) #当我收到一个问题的时候

def REQ(currency): #我收到询价的是 currency

if (currency == "bitcoin"): #我比较一下到底是啥
    p = Coinbase.GetPrice('BTC') #如果是比特币,那就用coinbase 去查价格
    return question(render_template("RFQ",  ccy=currency, price=p))
if (currency == "ethereum"):
    p = Coinbase.GetPrice('ETH')
    return question(render_template("RFQ",  ccy=currency, price=p))
else:
    return statement(render_template('Cannothelp')) #如果是别的 Alexa就会说 can not help

这样第一个对话就结束了。

我分享了所有代码,在github上 https://github.com/duwenzhen/AlexaCrytoCurrencyRFQHub/blob/master/AlexaCryptoCurrency.py

我觉得自己解释的有点乱。看来我不能做一个老师。。。组织能力有问题,起码用中文说专业知识不太行。。。
其实写skill很简单 只要了解一个skill是怎么分工的。
Amazon 按照你的要求。把关键词给你,你处理好以后 再发一句话给Amazon,由Alexa读出来。。。

一个回合就结束了。

我的自我介绍 https://steemit.com/cn/@initnas/2cg9ss

Sort:  

事先聲明 代碼寫的醜 因為只是一個poc 要快速出效果。:)

先赞一下,以后慢慢看