屋内ナビゲーション手法:SCAN #mixleap

1.5K Views

February 28, 20

スライド概要

2020年1月30日(木)に、ヤフー大阪オフィスで「Mix Leap Study #57 - iOS & Android勉強会」を開催しました。

「PayPayフリマ」「Yahoo!天気」のAndroidアプリ、そして社内の研究開発から生まれたGPS不要の屋内ナビゲーション手法「SCAN」のiOSアプリを開発する3組のエンジニア・デザイナーが、その開発ノウハウを語りました。

イベントの詳細については、下記connpassページをご覧ください。
https://yahoo-osaka.connpass.com/event/159924/

profile-image

2023年10月からSpeaker Deckに移行しました。最新情報はこちらをご覧ください。 https://speakerdeck.com/lycorptech_jp

シェア

またはPlayer版

埋め込む »CMSなどでJSが使えない場合

関連スライド

各ページのテキスト
1.

Mix Leap Study #57 - iOS & Android勉強会 屋内ナビゲーション手法:SCAN ヤフー株式会社 鈴木 健司 Confidential 西 紗記子

2.

SCANとは? Confidential

3.

屋内位置測位技術の課題 GPSが届きにくい 屋内ではGPS電波が届きにくく 屋内で位置を特定させるには異なるアプローチが必要 Confidential 事業者側の準備コスト QR/地磁気/Wifiなど既存設備への追加や 専用の地図を用意する必要

4.

SCANのアプローチ 1 設置されている構内図を Confidential 2 SCANで撮影すると 3 撮影画像に現在地を表示/追跡

5.

SCANの特徴 Camera IMU スマホ単体で完結 専用の装置や地図が不要 現在地測位に用いるのはスマホ内蔵カメラとIMUだけ 既存設備をそのまま活用可能で導入コストが低い Confidential

6.

Confidential

7.

R&Dしたので SCANは世界最高峰の国際学会に採択されました コンピュータ科学分野の国際学会ACM(Association for Computing Machinery)が主催する MobileHCI 2019 DemosにてSCANは査読スコア満点で採択され、その研究内容に高い関心が寄せられています Confidential

8.

Confidential

9.

BEST DEMO - Peopleʼs Choice を受賞しました! Confidential

10.

SCANのしくみ Confidential

11.

全体の流れ - ユーザの操作時 - Confidential

12.

屋内地図を撮影 Confidential

13.

屋内地図を撮影 matching feature points reference user scanned 撮影画像と参照画像のマッチング Confidential

14.

(Camera Calibration) 屋内地図を撮影 2枚の画像から回転/移動量を求め現在地XYを算出 target u user matching feature points reference user scanned 撮影画像と参照画像のマッチング Confidential a2 a1 reference θ u= ( cosθ -sinθ sinθ cosθ )a 2

15.

(Camera Calibration) 屋内地図を撮影 2枚の画像から回転/移動量を求め現在地XYを算出 target u user a2 a1 reference θ u= ( cosθ -sinθ sinθ cosθ )a 2 matching feature points reference user scanned 撮影画像と参照画像のマッチング Confidential user scanned front-view 正面図に補正し現在地XYを画像上にマッピング

16.

(Camera Calibration) 屋内地図を撮影 2枚の画像から回転/移動量を求め現在地XYを算出 target u user a2 a1 IMUで相対的移動量を取得し位置更新 reference IMU θ u= ( cosθ -sinθ sinθ cosθ )a 2 matching feature points reference user scanned 撮影画像と参照画像のマッチング Confidential user scanned front-view 正面図に補正し現在地XYを画像上にマッピング 3d axis

17.

SCANの実装を少し詳しく Confidential

18.

(Camera Calibration) 屋内地図を撮影 2枚の画像から回転/移動量を求め現在地XYを算出 target u user a2 a1 IMUで相対的移動量を取得し位置更新 reference 3d axis IMU θ u= ( cosθ -sinθ sinθ cosθ )a 2 matching feature points ←これ reference user scanned 撮影画像と参照画像のマッチング Confidential user scanned front-view 正面図に補正し現在地XYを画像上にマッピング

19.

の前にちょっと 行列演算について Confidential

20.

Confidential 参照:https://ja.wikipedia.org/wiki/レナ_(画像データ)

21.

Confidential

22.

問 Confidential 画像を右上100ピクセル移動しなさい

23.

Confidential

24.

Confidential

25.

Confidential

26.

Confidential

27.

Confidential

28.

問 Confidential 画像を原点から45度回転させなさい

29.

Confidential

30.

Confidential

31.

Confidential

32.

Confidential

33.

45 Confidential

34.

Confidential

35.

Confidential

36.

これを行列演算でやってみる Confidential

37.

1 0 0 Confidential 0 1 0 0 0 1 参照:https://developer.apple.com/documentation/accelerate

38.

1 0 0 0 1 0 0 0 1 複数の計算式を一行で出来る! Confidential 参照:https://developer.apple.com/documentation/accelerate

39.

平行移動行列 !" 1 #" = 0 0 1 0 1 0 100 ! 100 # 1 1 " + 100 = & + 100 1 回転行列 45 cos " ! 180 #" = 45 sin 1 180 0 45 − sin 180 45 cos 180 0 0 ! # 0 1 1 45 45 cos * ∗ , − sin *∗0 180 180 = 45 45 sin * ∗ , + cos *∗0 180 180 1 回転と平行移動のアフィン変換行列 " ! 1 #" = 0 0 1 Confidential 0 1 0 45 cos 100 180 100 45 sin 1 180 0 45 − sin 180 45 cos 180 0 0 ! # 0 1 1 参照:https://developer.apple.com/documentation/accelerate

40.

Swiftでどう書くの? Confidential

41.

Confidential 参照:https://developer.apple.com/documentation/accelerate

42.

1 0 0 0 1 0 100 100 1 simd_float3x3(simd_float3(1, 0, 100), simd_float3(0, 1, 100), simd_float3(0, 0, 1)) Confidential

43.

" ! 1 " # = 0 0 1 0 1 0 100 ! 100 # 1 1 let p = simd_float3(x, y, 1) * simd_float3x3(simd_float3(1, 0, 100), simd_float3(0, 1, 100), simd_float3(0, 0, 1)) . Confidential

44.

一般的な数学 " ! 1 " # = 0 0 1 0 1 0 100 ! 100 # 1 1 " + 100 = & + 100 1 simdではこう書かなくてはならない! ! 1 " = # 0 # 1 0 1 " ! Confidential 0 1 0 100 100 1 " + 100 = & + 100 1

45.

Confidential

46.

Confidential

47.

Confidential

48.

これをシェーダーでやってみる Confidential

49.

forで1pxづつやる || 画素数多いと時間がかかる Confidential

50.

Confidential forで1pxづつやる shaderで同時並列でやる || || 画素数多いと時間がかかる 処理が早い!

51.

Confidential

52.

Confidential

53.

forで1pxづつやる ⏱ Confidential 0.241829秒 shaderで同時並列でやる

54.

forで1pxづつやる ⏱ Confidential 0.241829秒 shaderで同時並列でやる ⏱ 0.000584秒

55.

400倍 高速 forで1pxづつやる ⏱ Confidential 0.241829秒 shaderで同時並列でやる ⏱ 0.000584秒

56.

※実際はこうなります。興味のある方は是非調べてみて下さい! Confidential

57.

ここまで前提知識 Confidential

58.

(Camera Calibration) 屋内地図を撮影 2枚の画像から回転/移動量を求め現在地XYを算出 target u user a2 a1 IMUで相対的移動量を取得し位置更新 reference 3d axis IMU θ u= ( cosθ -sinθ sinθ cosθ )a 2 matching feature points ←これ reference user scanned 撮影画像と参照画像の特徴量マッチング Confidential user scanned front-view 正面図に補正し現在地XYを画像上にマッピング

59.

!" cos ) # " = sin ) 0 1 − sin ) cos ) 0 0 ! 0 # 1 1 行列を用いることで画像の変換が行えることを説明しました Confidential

60.

ここに2枚の画像があります Confidential

61.

? ? ? ? ? ? ? ? ? 左画像を右画像と完全に変換できる未知の行列が存在します! Confidential

62.

どう求めるのか? Confidential

63.

⚙ ℎ$$ ! = ℎ%$ ℎ&$ ℎ$% ℎ%% ℎ&% computer vision Computer Visionの技術を用いると未知の行列が得られます この未知の行列のことを「ホモグラフィー行列」と呼びます Confidential ℎ$& ℎ%& ℎ&&

64.

ℎ$$ ! = ℎ%$ ℎ&$ ℎ$% ℎ%% ℎ&% ℎ$& ℎ%& ℎ&& 左の画像の任意のXYが、右の画像のどこかがHを用い計算できる Confidential

65.

"# ! (H.inverse) 右の画像の任意のXYが左の画像のどこかがHの逆行列で計算できます Confidential

66.

user scanned front-view すなわち、ユーザが撮った写真を正面図に変換できます! Confidential

67.

ありがとうございました Confidential