Slide 1

Slide 1 text

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

Slide 2

Slide 2 text

目次 Android ActivityRecognitionについて ● 基本的な使い方 ● 特徴や注意点 センサーデータを用いたActivityRecognitionシミュレーション ● 手法 ● 結果 ActivityRecognitionを用いた行動認識の実用化について

Slide 3

Slide 3 text

KAKKA twitter@KAKKA_Blog

Slide 4

Slide 4 text

ActivityRecognition

Slide 5

Slide 5 text

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

Slide 6

Slide 6 text

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

Slide 7

Slide 7 text

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

Slide 8

Slide 8 text

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

Slide 9

Slide 9 text

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

Slide 10

Slide 10 text

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

Slide 11

Slide 11 text

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

Slide 12

Slide 12 text

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

Slide 13

Slide 13 text

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

Slide 14

Slide 14 text

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

Slide 15

Slide 15 text

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

Slide 16

Slide 16 text

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

Slide 17

Slide 17 text

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

Slide 18

Slide 18 text

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

Slide 19

Slide 19 text

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

Slide 20

Slide 20 text

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

Slide 21

Slide 21 text

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

Slide 22

Slide 22 text

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

Slide 23

Slide 23 text

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

Slide 24

Slide 24 text

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

Slide 25

Slide 25 text

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

Slide 26

Slide 26 text

ActivityRecognitionシミュレーション

Slide 27

Slide 27 text

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

Slide 28

Slide 28 text

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

Slide 29

Slide 29 text

シミュレーション手順

Slide 30

Slide 30 text

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

Slide 31

Slide 31 text

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

Slide 32

Slide 32 text

シミュレーション手順 どのセンサーを使うか 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:デバイス温度。使わなそう

Slide 33

Slide 33 text

シミュレーション手順 どのセンサーを使うか 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つを使ってみて、精度悪そうなら他のセンサーも増やしてみる 精度良さそうならさらにセンサーを絞ってみる

Slide 34

Slide 34 text

シミュレーション ON_FOOT 実機でのActivityRecognition結果

Slide 35

Slide 35 text

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

Slide 36

Slide 36 text

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

Slide 37

Slide 37 text

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

Slide 38

Slide 38 text

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

Slide 39

Slide 39 text

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

Slide 40

Slide 40 text

シミュレーション ON_FOOT Activity正解率 - 100% 100% 平均信頼度 96.83 97.17 97.33 実機 センサー2つ accelerationのみ accelerationだけで完璧な精度

Slide 41

Slide 41 text

シミュレーション IN_VEHICLE 実機でのActivityRecognition結果

Slide 42

Slide 42 text

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

Slide 43

Slide 43 text

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

Slide 44

Slide 44 text

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

Slide 45

Slide 45 text

シミュレーション結果から言えること ● ActivityRecognitionにおいて、センサーはほぼaccelerationを使っている ○ 他のActivity(TILTING, ON_BICYCLE, WALKING, RUNNING)は、追加検証して確かめる必要が ある ● 位置情報やその他のセンサーの影響は少ない ○ エミュレータに位置情報を与えていないので、位置情報を ONにしていたら精度があがるとは考え にくい ● ActivityRecognitionは、accelerationのデータから予測できる実際のユーザーの行動のヒント と捉えるべき ○ 他のセンサーを組み合わせると、精度の高いユーザー行動検出が可能

Slide 46

Slide 46 text

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

Slide 47

Slide 47 text

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

Slide 48

Slide 48 text

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

Slide 49

Slide 49 text

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

Slide 50

Slide 50 text

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

Slide 51

Slide 51 text

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

Slide 52

Slide 52 text

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

Slide 53

Slide 53 text

ActivityRecognitionを実用化するために 歩きスマホの状態を検出 ActivityRecognitionでON_FOOTを検出 歩いているか スマホをリズミカルに振っていて ポケットに入っているかいないか 画面を見ているか見ていないか proximityセンサで離れていることを確認 歩いていて ポケットに入っていなくて 画面を見ているか見ていないか gravity(orientation)を確認 歩いていて ポケットに入っていなくて 画面を見ている 位置情報でスピードをチェック 歩いていて ポケットに入っているかいないか 画面を見ているか見ていないか

Slide 54

Slide 54 text

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

Slide 55

Slide 55 text

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

Slide 56

Slide 56 text

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