これで誰でも自作Siriが作れる？アメリカで話題のAIサービスを試してみた。


先日[producthunt](http://www.producthunt.com/)をみていると、[api.ai](http://api.ai/)というサービスが盛り上がっていた。

ちょっとググってみると下記の記事にも取り上げられていた。
[Build your own Siri: Api.ai offers voice integration for all](http://thenextweb.com/dd/2014/09/16/build-your-own-siri-api-ai-offers-voice-integration-for-all/)

たしかに最近社内でもIoTが流行っていて、同期が自作Siriを作っていたけど、結局音声を認識してアクションにつなげるところの手間が大変そうだったw
音声データ入力は今後ますます使われるインターフェイスかと思うので、この機会にAI系のサービスを試してみた。

＊紹介するサービスはどちらも英語でしか使えません。

##試したサービス

1.[api.ai](http://api.ai/)

参考)
[producthunt/api-ai](http://www.producthunt.com/posts/api-ai)
[Build your own Siri: Api.ai offers voice integration for all](http://thenextweb.com/dd/2014/09/16/build-your-own-siri-api-ai-offers-voice-integration-for-all/)

2.[wit.ai](https://wit.ai/)

参考)
[Techcrunch-Natural Language Platform Wit.ai Raises $3M Seed Round Led By Andreessen Horowitz](http://techcrunch.com/2014/10/15/natural-language-platform-wit-ai-raises-3m-seed-round-led-by-andreessen-horowitz/)
[Wit.ai Raises $3M Seed Round Led by Andreessen Horowitz](https://wit.ai/blog/2014/10/15/wit-ai-raises-seed-round-from-andreessen-horowitz)

##api.aiについて

###簡単な流れ


####基本編

※登録はしている前提です。

①Entitiesで名称を登録していきます。
![ent.png](https://qiita-image-store.s3.amazonaws.com/0/5365/ef1cf8d9-23cb-ac06-30af-ba70086890c4.png "ent.png")

②下記のsave&closeを入力し保存

③先ほどのentitiesを使ってintentsを作成
ここで音声データ⇄jsonデータの関係を作ります。

![intents1.png](https://qiita-image-store.s3.amazonaws.com/0/5365/eee78ef3-2e80-fac1-b7fc-31c1fd0c7fe7.png "intents1.png")

![intents2.png](https://qiita-image-store.s3.amazonaws.com/0/5365/ebea24f3-65e2-8827-511c-8ef2301ef7f7.png "intents2.png")

④save&closeを押して登録完了。

⑤では一旦テストをしてみます。
右側にあるマイクマークを押して喋ってみましょう。
![test.png](https://qiita-image-store.s3.amazonaws.com/0/5365/e9b7242d-6b43-6459-7047-a7a579249f6a.png "test.png")


####中級編

コンテキストな文章にも対応させてみる。

例)
・turn on TV!
↓
・turn off it.

it = TV ということを認識させたい。

ところが、結論できませんでした。
[Document](http://api.ai/docs/getting-started/quick-start-contexts.html)のような、

・What is the wether in Tokyo?
↓
・what about Osaka?

これは天気のことを聞いているよってのはできるんですが、文章から文章に渡す変数を動的にできず・・・。

一応[supportで質問してみた。](https://support.api.ai/customer/en/portal/questions/8635264-how-can-i-use-any-dynamic-contexts-?new=8635264)
返ってきたら更新します。


###実際にアプリに組み込む

[こちら](http://api.ai/downloads.html)をみると一応サービス的にはAndroid SDK/ios SDKと用意してくれている。
僕自身iosで今回使ってみたかったのでios SDKをいれようと思ったが、[githubのREADME](https://github.com/api-ai/api-ai-ios-sdk)通り実行してもpodでインストールできず。。。
無理くりやってみようかとも思ったが、まだ開発もそこまでされていないっぽかったので一旦断念。

まぁまだまだ開発段階ということですねw

※ちなみに[API](http://api.ai/docs/getting-started/quick-start-api.html)は動きました。

なので一旦は[こんな感じ ](https://gist.github.com/ystrot/e799f338ab9849c90b04)でpostして解析って感じですね。

###総評

まだまだ開発途中って感じで今の段階からバリバリ使えるかっていうとそうでもなさそうですが、すごく簡単な設定でロジックを組めるので、かなり良さげですね！

Contextのところも上手く使えるようになると尚良し！

##wit.aiについて

###簡単な流れ

①早速intentの登録
wit.aiはデフォルトでentityが登録されています。
なので、一旦デフォルトを使います。

![wit-intents.png](https://qiita-image-store.s3.amazonaws.com/0/5365/77bca540-deb1-19e4-33f3-336182b98a1c.png "wit-intents.png")

![wit-intent2.png](https://qiita-image-store.s3.amazonaws.com/0/5365/7f222d3f-84e3-485e-8b8b-18588ce96f58.png "wit-intent2.png")

![wit-intent3.png](https://qiita-image-store.s3.amazonaws.com/0/5365/35dbe07d-e8c3-9b69-36f0-52ced051ead2.png "wit-intent3.png")

![wit-intent4.png](https://qiita-image-store.s3.amazonaws.com/0/5365/fa712318-8f6d-04ac-4da2-99ca19fdf53b.png "wit-intent4.png")

②簡単ですが、一旦これでintentは登録完了です。

③次にiosのアプリでこれを呼び出したいと思います。

wit.aiの凄さはかなりの言語/osに対応しています。
(ios/android/rasberrypi/ruby...)

※ドキュメント一覧は[こちら](https://wit.ai/docs/ios/quickstart)

④ドキュメント通りですがiosのアプリを実装します。

ドキュメントを参考にしながら作ってください。
Appdelegateに書くtokenですが、バージョンが新しくなったのか、

・Server Access Token (※開発などprivate serverからのアクセス)
・Client Access Token (※public serverからのアクセス)

とあります。ここではServer Access Tokenを使いましょう。
特にその他では詰まらないかと思います。

[リポジトリを公開している](https://github.com/moriyaman/testWitobjectiveC)のでわからなければ参考にしてください。

⑤buildしてみます。

![クリック.png](https://qiita-image-store.s3.amazonaws.com/0/5365/3d091595-359f-b1f7-10d1-2e7e3f53b07f.png "クリック.png")

⑥クリックして話すと...
![ 出現.png](https://qiita-image-store.s3.amazonaws.com/0/5365/1243ef76-135a-bd7d-f0d7-64dc3f301828.png " 出現.png")

このように表示されれば成功です。
他にもNSdictionaryでentityが返ってくるので、ロジックを書く際はそっちで判定すれば可能かと思います。


もちろんiosで実装しなくとも[wit.aiが用意してくれているサンプルページ](http://labs.wit.ai/speech/index.html)よりClient Access Tokenを入力しマイクを押せばテストができます。

![apiテスト.png](https://qiita-image-store.s3.amazonaws.com/0/5365/7aa016e8-76dc-65c1-be71-e857c4b525aa.png "apiテスト.png")

###中級編

Wit.aiではgithubのように自分のリポジトリを公開できます。
[Explore](https://wit.ai/explore)より、いろいろ調べてみてください。

githubと同じでfolkすることで自分のリポジトリとして取り込むことができます。

![スクリーンショット 2014-10-19 23.06.23.png](https://qiita-image-store.s3.amazonaws.com/0/5365/b13cf826-08e4-858d-2e53-c967e6a9b9df.png "スクリーンショット 2014-10-19 23.06.23.png")

例えばIoT関連のリポジトリを作っている方がいたので、それをfolkしてみました。

そのほかにも、settingsよりcollaboratorを追加できたり、すごく自由に使えそうです。

###総評

api.aiよりは完成度は高く、Exploreなどのコミュニティがあったりと取っ付きやすかったです。iosに入れてもすぐに使えたので、アプリに音声操作を追加したい場合はかなり良さげですね。

一方でapi.aiの方がintentsの登録は簡単かつ自由度が高く、contexts的な機能も現在はなさそうなのでその辺がネガティブでした。


##最後に

今後、この周りの as a service系も増えそうですね。
本当最近いろいろと提供してくれるサービスが増えて便利な世の中ですね〜w