水島雄太のブログ

個人的かつ雑多なブログです。

AppleWatchの音声入力機能を使った処理系を作る

はじめに

これは 第2のドワンゴ Advent Calendar 2016 - Qiita 18日目のために書かれた記事です。

なぜAppleWatchの音声入力機能を使った処理系を作るのか

AppleWatchの文字入力はキーボードやタッチUIを利用することが出来ないため、文字入力方法としては以下の3つが用意されています(数字のパスコードの入力については専用のタッチUIが用意されていますが、あくまで補助的なものです)

  • 定型文
  • 音声入力
  • 手書き入力

この中では個人的に音声入力について一番将来性を感じており、入力には多少癖のあるものの、慣れればかなり精度の高い音声認識を行うことが可能です。

私はこの機能を使って移動中に思いついたアイデアなどをEvernoteに書き込んでいます。

この機能をもうちょっと知的に使うことは出来ないかと思い、丁度良い題材として音声を入力とした簡単な処理系を実装することを思いついたため、実装してみました。

仕組み

f:id:ymizushi:20161218195652j:plain

雑な図ですが、全体構成としては上図のような形になっています。

初めはクライアント側で完結する処理系を書こうと思っていましたが、 Swiftの正規表現処理機能が貧弱でかつ私が慣れていなかったため1日で実装が間に合う自信がなかったこと、 また他のデバイスでも汎用的に使えるようにしたいということから、 慣れたPythonでサーバーサイドで処理系を実装し、クライアントからはAPIベースでの処理系への入力・出力と出力のレンダリングのみを行う構成にしました。

サーバーサイドでは以下のAPIを用意しました。

  • セッション作成API
  • セッション削除API
  • Eval API

セッションIDをキーに処理系が保持する環境をRedisに保存しています。

出来ること

現段階では、以下のことが可能です。

  • 代入
  • 評価
  • 加算

もうちょっと本格的な言語機能を作り込みたかったのですが、直前過ぎて時間切れでした。 今後AdventCalendarに登録する時は、もうちょっと前もって作っておこうと思います。

動画

一応動画を撮ってみました。 YouTube

リポジトリ

展望

今回は最小の機能として代入、評価、加算を実装しましたが、入力を学習して何らかのレコメンドに役立てたり、よりファジーな入力も受け付けられるようにできると、より応用の幅が広がるのではないかと思います。

Apple Watch Sport 42mmスペースグレイアルミニウムケースとブラックスポーツバンド
Apple Watch Sport 42mmスペースグレイアルミニウムケースとブラックスポーツバンド
アップル
売り上げランキング : 9962


Amazonで詳しく見る
by G-Tools
Flask Web Development: Developing Web Applications with Python
Flask Web Development: Developing Web Applications with PythonMiguel Grinberg

O'Reilly Media 2014-04-28
売り上げランキング :


Amazonで詳しく見る
by G-Tools