Yura YuLife

ITエンジニアの覚え書き。

ニューラルネットで声から体調を推定するシステムを作りました

IDCフロンティア主催のIoTと健康をテーマにしたハッカソン、サバフェス 2016で Healthy Voice Netというシステムを作ったので紹介します。大雑把に言うと、ニューラルネットワークを用いて声色を分類することで、声から体調が分かるシステムです。

プレゼンテーション

デモ動画

ソースコード

github.com

概要

Healthy Voice Netは、体調による声色の違いをニューラルネットワークを使って学習させることで、声から体調を推定できるシステムです。

f:id:yurayur:20160326235431p:plain

見た目はこんな感じ。

ニューラルネットの学習

データの用意

体調の良い時、寝不足の時、風邪気味の時の声をたくさん録音しておきます。今回は「おはよう」という決め打ちの文言を、それぞれ約30回ずつ録音したファイル(wav, mono, 16bit, 44.1kHz)を用意しました。データ数は多ければ多いほど良いと思いますし、ノイズへの耐性を強くするために、様々な環境で録音するほうが好ましいです。

音声の前処理

前処理として、録音した音声ファイルをFFTにかけ、さらに音量を正規化します。これは、体調の良し悪しが音声のスペクトルに現れるという仮定のもと、波形の違いをニューラルネットに学習させるためです。音声の録音にはPyAudioを、FFT変換にはscipyをそれぞれ利用しています。

ニューラルネットの構成

ニューラルネットは、4層の全結合のものを利用しています。

  • 入力層: 20000次元 (1Hz〜20kHzの各周波数の音量に対応)
  • 中間層1: 100次元
  • 中間層2: 20次元
  • 出力層: 3次元 (良好、寝不足、風邪気味の各体調に対応)

ニューラルネットの生成、学習にはChainerを利用しました。

学習の実行

約100個の音声ファイルに対して60世代ほど学習をさせました。学習にかかる時間はCPUを利用しても10分程度です。学習データが少ないためか、かなり過学習になる傾向があり、50〜60世代くらいまでは精度が上がっていくのですが、逆にそこから先はテストデータに対する精度が落ちてしまいました。本来ならば現在の100倍〜1000倍くらいの学習データが必要だと思います。

体調の推定

システムの構築

システムの構築には以下のデバイスを利用しました。

LEDとスイッチは以下のように配線しています。

f:id:yurayur:20160326231721p:plain

LCDの表示方法については以下の記事を参照してください。

yura2.hateblo.jp

上記のようにデバイスを構成して、Raspberry Piでpythonスクリプトを動かすと、デモ動画のように動作します。

推定精度

ノイズの少ない環境においては、僕の3つの声色はかなり高い精度で推定できました。特に寝不足風の声に関しては、かなり声色に癖があったためか、ほぼ100%の確率で正しく推定できています。一方で、ノイズに対する対策を一切行っていないので、周辺の雑音が多い環境では普通の声が風邪気味と推定される確率が高かったです。

クラウドとの連携

ブラウザでの結果確認

今回のハッカソンがIDCフロンティア主催のサーバーフェスタということで、IDCFクラウドを利用してデータの表示や他のシステムとの連携を行っています。

推定された体調や録音された音声は、以下のページからブラウザ上で確認可能です。

上記のページでは単に結果を見られるだけでなく、ページ内のフォームで正しい体調を指定することで、ニューラルネットの学習用データが追加され、推定精度を高めることができます。ページの表示にはdjangoを利用しています。

myThingsとの連携

myThingsのIDCFクラウドチャンネルを利用することで、体調が推定された際に、myThingsからGmailやSlackなどのサービスへ通知を飛ばすことが出来ます。面倒なのかと思いきや、環境構築用のスクリプトが用意されていたので、ものの1時間程度でスマホにプッシュ通知を飛ばすことができました。しかも、クーポンを利用すると半年くらい無料でサーバが利用できるので超オススメです。

www.idcf.jp

さいごに

本システムを持って乗り込んだサバフェスですが、なんとIDCF賞をいただくことができました。叙々苑で美味しい焼き肉食べてきます!

参加賞としてRaspberry Piやセンサー、microSDカード等を提供してくださった主催者、スポンサーの皆様、色々とお話をさせていただいた参加者の皆様、どうもありがとうございました!

サバフェスは本当に素敵なイベントです!次回以降も是非参加したいと思います!