Upgrade to Pro — share decks privately, control downloads, hide ads and more …

20180209 DroidKaigi2018 ActivityRecognition simulation

56d7bcf9b5071512c65e753a1619987a?s=47 KAKKA
February 09, 2018

20180209 DroidKaigi2018 ActivityRecognition simulation

近年のAndroidデバイスには多くのセンサーが組み込まれるようになった。Googleはこれらのセンサーを活用してActivityRecognitionというユーザーの行動認識APIをAndroidフレームワークで提供した。
ユーザーの行動を認識することによって、アプリケーションプロバイダは適切なタイミングで適切な内容のコンテンツを提示することができるようになる。
例えば車を運転中であれば、車やドライブに関する情報である。

このActivityRecognitionを実用的に活用するためには、その認識精度が非常に重要になる。誤認識が発生するとユーザー離反の原因となり得る。また、ActivityRecognitionのエンジン自体はブラックボックスとなっているため、改善が難しい。

このセッションではActivityRecognitionの基本的な利用方法を説明し、現状の認識精度を調べた結果を報告する。さらに、複数のセンサーデータをシミュレーションし、精度向上のヒントとなる情報を探る。最後に実用的なActivityRecognitionの利用方法を説明する。

56d7bcf9b5071512c65e753a1619987a?s=128

KAKKA

February 09, 2018
Tweet

Transcript

  1. 複数センサーシミュレーションによ る行動認識 (ActivityRecognition)解剖 そして実用化 DroidKaigi 2018 2018/02/09 17:40- @Room1 Drivemode,

    Inc. KAKKA (Nobuhisa Hirata)
  2. 目次 Android ActivityRecognitionについて • 基本的な使い方 • 特徴や注意点 センサーデータを用いたActivityRecognitionシミュレーション • 手法

    • 結果 ActivityRecognitionを用いた行動認識の実用化について
  3. KAKKA twitter@KAKKA_Blog

  4. ActivityRecognition

  5. Activity Recognition ユーザーの行動が認識できる

  6. Activity Recognitionの使い方 パーミッション付与

  7. Activity Recognitionの使い方 IntentServiceで検出されたActivityを受け取る

  8. Activity Recognitionの使い方 IntentServiceで検出されたActivity(ユーザーの行動)を受け取る intent からActivityRecognitionResultを取得

  9. Activity Recognitionの使い方 IntentServiceで検出されたActivity(ユーザーの行動)を受け取る 最も可能性の高いActivityを取得

  10. Activity Recognitionの使い方 IntentServiceで検出されたActivity(ユーザーの行動)を受け取る 可能性のあるActivityのListを取得

  11. Activity Recognitionの使い方 DetectedActivity type: 検出した行動タイプ (e.g. ON_FOOT) confidence: 信頼度スコア (0

    to 100)
  12. Activity Recognitionの使い方 ActivityRecognitionClientで認識リクエスト clientのインスタンス作成

  13. Activity Recognitionの使い方 ActivityRecognitionClientで認識リクエスト 認識結果受け取るためのPendingIntent作成

  14. Activity Recognitionの使い方 ActivityRecognitionClientで認識リクエスト リクエスト実行(detectionIntervalMillis, pendingIntent) detectionIntervalMillisは0が最速。 しかしAPI21からデバイスがパワーセーブモードのときに頻度が少なくなる。

  15. Activity Recognitionの使い方 ActivityRecognitionClientで認識リクエスト

  16. Activity Recognitionの使い方 IntentServiceで検出されたActivityを受け取る

  17. Activity Recognitionの特徴・注意点 ON_FOOT 歩いているときに検出 かなり精度と頻度が高い 歩きスマホでも、ポケットに入れてるときでも検出される WALKING, RUNNING 名前の通り、歩いている時、走っている時に検出 検出頻度は少ない

    ON_FOOTよりも具体的なActivity
  18. Activity Recognitionの特徴・注意点 IN_VEHICLE 何かしらの乗り物に乗っているときに検出 車、電車、バス、飛行機など mostProbableActivityはUNKNOWNになることが多い スマホホルダーに固定している時、シートに放置している時、ポケットに入れてる時のいずれでも検 出される 昔はIN_VEHICLE_HOLDINGもあったが、今は削除されている ON_BICYCLE

    自転車に乗っている時に検出 ホルダーに装着時に確認
  19. Activity Recognitionの特徴・注意点 STILL スマホを静かなところに放置しているときに検出 家の机の上、床など 体が静止しているという条件ではポケットに入れているときでも検出される TILTING スマホを回転させている時に検出 portrait -

    landscapeなど
  20. Activity Recognitionの特徴・注意点 ON_FOOTを無理やり検出させる

  21. Activity Recognitionの特徴・注意点 IN_VEHICLEを無理やり検出させる

  22. Activity Recognitionの特徴・注意点 IN_VEHICLEを無理やり検出させる

  23. Activity Recognitionの特徴・注意点 予想外のシチュエーションで誤検出がある 実用化するにはそのまま使えない

  24. Activity Recognitionの特徴・注意点 精度を改善する方法は? → うーん・・・ 位置情報使ってスピード測ればいい?近接センサーとか? → そもそもそれらはActivtyRecognitionに使われているの? ActivityRecognitionの中身どうなってるの? わからん!

  25. Activity Recognitionの特徴・注意点 予めセンサーデータを集めて、 各センサーごとに、端末に注入して シミュレーションすると 何かわかるかもしれない

  26. ActivityRecognitionシミュレーション

  27. シミュレーション手順 Androidエミュレーター センサーの値は何も動かないが、直接デー タを入力可能

  28. シミュレーション手順 Androidエミュレーターのaccelerationセンサーに(x, y, z) = (0, 0, 0)が注入される

  29. シミュレーション手順

  30. シミュレーション手順 各Activityを実際に行う && ActivityRecognitionで認識結果を記録 && センサーデータ記録

  31. シミュレーション手順 エミュレーターにセンサーデータを流し込む && ActivityRecognitionで認識結果を記録

  32. シミュレーション手順 どのセンサーを使うか TYPE_ACCELEROMETER:加速度。使いそう。 TYPE_AMBIENT_TEMPERATURE:気温。使わなそう。 TYPE_GRAVITY:重力。ACCELEROMETERで十分そう。 TYPE_GYROSCOPE:角速度。微妙。 TYPE_LIGHT:照度。ポケットに入れてるときも同じ結果だから使わなそう。 TYPE_LINEAR_ACCELERATION:Monitoring acceleration along

    a single axis. 使わなそう。 TYPE_MAGNETIC_FIELD:磁場。関係なさそう。 TYPE_ORIENTATION:ACCELEROMETERやGYROSCOPEで十分そう。 TYPE_PRESSURE:気圧。使わなそう。ハイキングみたいな Activityなら使うのか? TYPE_PROXIMITY:近接。ポケット入れてる時も同じ結果だから使わなそう。 TYPE_RELATIVE_HUMIDITY:湿度。雨の日のランニングとか検出するには必要?今不要。 TYPE_ROTATION_VECTOR:TILTINGには使うか?一旦使わない。 TYPE_TEMPERATURE:デバイス温度。使わなそう
  33. シミュレーション手順 どのセンサーを使うか TYPE_ACCELEROMETER TYPE_AMBIENT_TEMPERATURE TYPE_GRAVITY TYPE_GYROSCOPE TYPE_LIGHT TYPE_LINEAR_ACCELERATION TYPE_MAGNETIC_FIELD TYPE_ORIENTATION

    TYPE_PRESSURE TYPE_PROXIMITY TYPE_RELATIVE_HUMIDITY TYPE_ROTATION_VECTOR TYPE_TEMPERATURE とりあえずこの2つを使ってみて、精度悪そうなら他のセンサーも増やしてみる 精度良さそうならさらにセンサーを絞ってみる
  34. シミュレーション ON_FOOT 実機でのActivityRecognition結果

  35. シミュレーション ON_FOOT シミュレーションでのActivityRecognition結果

  36. シミュレーション ON_FOOT Activity正解率 - 100% 平均信頼度 96.83 97.17

  37. シミュレーション ON_FOOT Activity正解率 - 100% 平均信頼度 96.83 97.17 accelerationとgyroscopeだけですでに完璧な精度

  38. シミュレーション ON_FOOT accelerationのみを用いたシミュレーションでの ActivityRecognition結果

  39. シミュレーション ON_FOOT Activity正解率 - 100% 100% 平均信頼度 96.83 97.17 97.33

    実機 センサー2つ accelerationのみ
  40. シミュレーション ON_FOOT Activity正解率 - 100% 100% 平均信頼度 96.83 97.17 97.33

    実機 センサー2つ accelerationのみ accelerationだけで完璧な精度
  41. シミュレーション IN_VEHICLE 実機でのActivityRecognition結果

  42. シミュレーション IN_VEHICLE accelerationシミュレーションでのActivityRecognition結果

  43. シミュレーション IN_VEHICLE Activity正解率 - 100% 平均信頼度 90.8 90.2

  44. シミュレーション IN_VEHICLE Activity正解率 - 100% 平均信頼度 90.8 90.2 accelerationだけで完璧な精度

  45. シミュレーション結果から言えること • ActivityRecognitionにおいて、センサーはほぼaccelerationを使っている ◦ 他のActivity(TILTING, ON_BICYCLE, WALKING, RUNNING)は、追加検証して確かめる必要が ある •

    位置情報やその他のセンサーの影響は少ない ◦ エミュレータに位置情報を与えていないので、位置情報を ONにしていたら精度があがるとは考え にくい • ActivityRecognitionは、accelerationのデータから予測できる実際のユーザーの行動のヒント と捉えるべき ◦ 他のセンサーを組み合わせると、精度の高いユーザー行動検出が可能
  46. ActivityRecognitionを実用化するために 車に乗っていて、スマホはホルダーにセットしている状態を検出

  47. ActivityRecognitionを実用化するために 車に乗っていて、スマホはホルダーにセットしている状態を検出 ActivityRecognitionでIN_VEHICLEを検出 車かバスか電車か飛行機に乗っているか ドラムを叩いているか 机を叩いていて ポケットにあるかないか 位置情報使ってスピードを計測 車かバスに乗っていて ポケットにあるかないか

    proximityセンサで離れていることを確認 車かバスに乗っていて ポケットに入ってない
  48. ActivityRecognitionを実用化するために 車に乗っていて、スマホはホルダーにセットしている状態を検出?

  49. ActivityRecognitionを実用化するために 車に乗っていて、スマホはホルダーにセットしている状態を検出 Super rare case!

  50. ActivityRecognitionを実用化するために 車に乗っていて、スマホはホルダーにセットしている状態を検出?

  51. ActivityRecognitionを実用化するために 車に乗っていて、スマホはホルダーにセットしている状態を検出? Super rare case!

  52. ActivityRecognitionを実用化するために 歩きスマホの状態を検出

  53. ActivityRecognitionを実用化するために 歩きスマホの状態を検出 ActivityRecognitionでON_FOOTを検出 歩いているか スマホをリズミカルに振っていて ポケットに入っているかいないか 画面を見ているか見ていないか proximityセンサで離れていることを確認 歩いていて ポケットに入っていなくて

    画面を見ているか見ていないか gravity(orientation)を確認 歩いていて ポケットに入っていなくて 画面を見ている 位置情報でスピードをチェック 歩いていて ポケットに入っているかいないか 画面を見ているか見ていないか
  54. ActivityRecognitionを実用化するために 歩きスマホの状態を検出?

  55. ActivityRecognitionを実用化するために 歩きスマホの状態を検出? Super rare case!

  56. まとめ ActivityRecognitionでは、accelerationをメインに使って行動検出をしていそうだ ActivityRecognitionは現状、誤検出がかなり多い ActivityRecognitionの検出結果をヒントにして、様々な情報からユーザーの行動認識の精度が高 められる