SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine(コードジン) DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

IoTをかじってみよう

IoTをかじってみよう(7)
~mbedを使って音声認識でデバイスを制御する

動作確認(Bluemix)

 最後にBluemixで確認しましょう。まず、docker-push.shコマンドでdockerイメージをBluemixにアップロードします。

./docker-push.sh
The push refers to a repository [registry.ng.bluemix.net/utton/watsonproxy]
b43b2817bbfe: Pushed
a8fca08822d8: Pushed
de174b528b56: Pushed

 なお、no basic auth credentialsというエラーが表示される際は、cf ic loginコマンドを実行してください。pushには数分かかります。終わったら、docker-bluemix-run.shで実行します。

./docker-bluemix-run.sh
7bb9a5d9-78fb-40be-b68b-b5b1c49d3579

 cf ic psコマンドで、STATUSの部分がRunningになるのを待ちます。

$ cf ic ps
CONTAINER ID        IMAGE                                              COMMAND             CREATED              STATUS                 PORTS               NAMES
7bb9a5d9-78f        registry.ng.bluemix.net/utton/watsonproxy:latest   ""                  About a minute ago   Running a minute ago   80/tcp              romantic_noyce

 次にIPアドレスをバインドします。デフォルトではパブリックなIPアドレスが割り当てられていないので、外からアクセスできません。まずはcf ic ip listで確保しているアドレスを確認します。

$ cf ic ip list
Number of allocated public IP addresses: 1

Listing the IP addresses in this space...
IP Address      Container ID
169.44.121.77   7bb9a5d9-78fb-40be-b68b-b5b1c49d3579

 このように、Container IDの部分が記載されたアドレスはすでに使用済みです。もしもContainer IDの部分が空になっているIPアドレスがあれば、空きなのでそのまま使用できます。また、デフォルトでIPアドレスは2つまで使用できます。IPアドレスの個数が2つに逹っしていなければ、cf ic ip requestを実行してください。

$ cf ic ip request
OK
The IP address "169.44.121.78" was obtained.

 再度、cf ic ip listで確認すると、Container IDが空のIPアドレスが増えていることが分かります。

$ cf ic ip list
Number of allocated public IP addresses: 2

Listing the IP addresses in this space...
IP Address      Container ID
169.44.121.78
169.44.121.77   7bb9a5d9-78fb-40be-b68b-b5b1c49d3579

 cf ic ip bindコマンンドでIPアドレスをバインドします。

$ cf ic ip bind 169.44.121.78 7bb9a5d9-78f
OK
The IP address was bound successfully.

 cf ic ip bindコマンドにはIPアドレスと、コンテナのIDを指定します。コンテナのIDは、cf ic psで確認できます。コマンドの実行が終わったら、再度cf ic psで確認します。

$ cf ic ps
CONTAINER ID        IMAGE                                              COMMAND             CREATED             STATUS                      PORTS                      NAMES
655ad675-cff        registry.ng.bluemix.net/utton/watsonproxy:latest   ""                  36 seconds ago      Networking 30 seconds ago   169.44.121.78:80->80/tcp   sleepy_mestorf

 このようにSTATUSがNetworkingになっているときは、IPアドレスの割り当て中です。Runningになるまで待ってください。それでは、mbedのプログラムの以下の部分を、上記で割り当てたIPアドレスに変更してコンパイルし、mbedに書き込んでからリセットしてこれまでと同じように実行してみてください。

    int responseCode = httpClient.post("http://169.44.121.78/", request, &response);

 きちんと認識されれば、LED4が点灯するはずです。うまくいかない時は、ログを確認してみてください。ログは、cf ic logsで確認できます。引数にコンテナのIDを指定してください。

$ cf ic logs 655ad675-cff
;[info] play.api.Play - Application started (Prod)
N[info] p.c.s.NettyServer - Listening for HTTP on /0:0:0:0:0:0:0:0:80

Start index
"wav: /tmp/5224690688905516918.wav
~response: '{"results":[{"alternatives":[{"confidence":0.373,"transcript":"明るく し "}],"final":true}],"result_index":0}'
transcript: '"明るく し "'
command: '明るくし'

注意点

 今回は、リソースの制限を回避するため、mbedから直接WSTにリクエストを行うのではなく、Bluemix上に用意したプロクシを経由するようにしました。このため以下の注意点があります。

  • プロクシまでの通信は暗号化されていません。最大1.5秒のデバイスの操作コマンドですが、外に漏洩して困るような内容を入力しないように注意してください
  • プロクシのIPアドレスさえ分かれば、誰にでもプロクシが使用できてしまいます。実験が終わったらプロクシを終了しておくのが良いでしょう

まとめ

 最終回はWatson Speech to Textを用いた音声認識を試してみました。

 Watson Speech to Textは音声ファイルを、https、WebSocketで受け取り認識結果をJSONで返します。mbedにおける音声の取り込みや、SSLの処理にはメモリが必要となります。mbedのアナログ入力は、そのままでは音声入力には使えません。外付け回路が必要となります。

 デバイス自体が非力でも、ネットワークの力によってさまざまな応用が可能となる点がIoTの醍醐味の一つです。デバイスでできること、サーバ・サイドでできることはいろいろありますが、この2つをうまく組み合わせたアイデアの中に、きっと今まで見たことのないようなアプリケーションが眠っているはずです。ぜひアイデアを形にしてみてください。

補足

 ソフトバンクが、ARM社を買収しました(発表資料)。孫社長のコメントからもIoTに対する熱い期待が感じられます。今後もこの分野は目の離せない存在となりそうです。

この記事は参考になりましたか?

連載通知を行うには会員登録(無料)が必要です。
既に会員の方はを行ってください。
IoTをかじってみよう連載記事一覧

もっと読む

この記事の著者

花井 志生(ペンネーム 宇野るいも)(ハナイ シセイ(ペンネーム ウノルイモ))

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/9568 2016/08/10 14:00

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー