ラベル python の投稿を表示しています。 すべての投稿を表示
ラベル python の投稿を表示しています。 すべての投稿を表示

2021-11-18

人・モノの動きをマップ上で可視化するオブジェクトトラッキング

 IPS の一般的な機能の一つに、人・モノの動きを追跡し、可視化する機能(以下、オブジェクトトラッキング)があります。下図は当社製品『QucikIPS』で同機能を実行した際のもので、XとY軸に二次元マップを、Z軸には時間を表示しています。青と橙(オレンジ)の線がオブジェクトの時間ごとの位置を示しています。例えば、橙(bcn0-5)は、13:37:58 には、座標(0, 6)にいたことが判ります。
 この3DグラフはPC画面上で回転させることができるため、赤と青が接触あるいは近接したかどうかを視覚的に判断することも可能です。

注:
オブジェクトトラッキング機能は、『QuickIPS』 と『TPC_IPS』の次々バージョンに搭載予定です。

オブジェクトの移動を時系列と共に3D表示
  

用途

 オブジェクトトラッキングは、人・モノの動きをマップ上に時系列と共に表示する機能で、2Dと3D表示が可能です。 感染症罹患者、店舗利用者、運搬機、従業員等の行動・運動を正確に把握する際に有用です。 

人・モノの移動を2Dマップ上に時刻と共に表示

オブジェクトトラッキングで使用するツール等

 『QuickIPS』で使用するツール、アプリケーションは以下の通りです。

使用ツール用途
Python, matpotlib, 他 2D/3D描画を行う。
pyodbc, ODBC, 他 PythonからSQLクエリをデータベースに対して発行。座標、時間、UUIDなどのオブジェクト属性をデータベースから取得し、matplotlib に渡す。
FileMaker Pro
注:QuickIPS で必要
オブジェクトトラッキングはコマンドラインから実行可。『QuickIPS』では、GUIから Python のコマンドを実行。

仕様

  1. オブジェクトの位地を時系列と共に2D、3D表示
    3Dの場合、Z軸には時刻を取る

  2. 『QuickIPS』のGUI上で以下のパラメータの指定
    パラメータ  用途
    時間指定 トラック(追跡)する期間を12桁のコードで指定
    2D/3D トラック図を2Dにするか3Dするか選択
    プロット場所 トラック図を表示する場所を QuickIPS の Webビューア内か、独立した Python-matplotlib ウインドウ内にするかを選択
    ビーコン ピッカーインタフェイスから複数のビーコンを選択可

    操作方法
    1. QuickIPS ウインドウズの[Time] にオブジェクトトラッキングを行う時間帯を12桁のコード(YYYYMMDDHHMMSS、オブジェクト座標を計測した日時)で指定します。


    2. [Plot in...]では、オブジェクトトラッキングの図を表示するアプリケーションを指定します。「QuickIPS」を指定すると QuickIPSの「Webビューア」に、「Separate window」を指定すると Python-matplotlib のウインドウ内にトラッキング図を表示します。ここでは、「QuickIPS」を選択します。
    3. ピッカーアイコンを使って追跡したいビーコンを選択します。上図では、「bcn2-8」 と 「bcn0-5」 の 2種類のビーコンを選択しています。
    4. トラッキング図を2Dで描画するにはラジオボタンで「2D」を選択し、トラッキングボタンをクリックします。QuickIPSウインドウの「Webビューア」に指定した2つのビーコンの移動経路と時刻を示す図が表示されます。




      上記ステップ2の[Plot in...]で「Separate window」を選択していた場合、下図のように Python-matplotlib のウインドウ内にトラッキング図を表示されます。

      人・モノの移動を2Dマップ上に時刻と共に表示

      このウインドウでは、フロアマップを拡大・縮小することにより、詳細を確認できます。


      3Dオブジェクトトラッキング

      3D でオブジェクトトラッキングを実行するするには、上記ステップ4のラジオボタンで「3D」を選択し、トラッキングボタンをクリックします。この時、[Plot in...]で「QuickIPS」が選択されていると、同ウインドウの 「Webビューア」内にトラッキング図が表示されます。

      Webビューア内の画像はマウス操作不可

      [Plot in...]で「Separate window」が選択されてた状態でトラッキングボタンをクリックすると、 Python-matplotlib のウインドウ内に3Dトラッキング図が表示されます。

       この図はマウス操作あるいはウインドウ内のボタン等を利用し、回転させたり、縮小拡大させることができます。以下の動画ではその様子をご覧いただけます。

※『QuickIPS』及びオブジェクトトラッキング の仕様は今後変更されることがあります。


(亀)


IPS関連のBlog記事

土屋企画のIPS製品について/IPS product of TPC

2020-12-26

機械学習によりIPSの位置測位精度を改善する

  弊社では Raspberry Pi とビーコンを利用した IPS(Indoor Positioning System / 屋内位置測位システム ― 屋内のモノの位置を推定するシステム)を開発しており、昨年、独自のアルゴリズム・TCOT(二円指向三点測位)に基づくシステムのプロトタイプを本ブログと YouTube にて紹介しました。

 TCOTを含む三点測位系の位置推定は、フィンガプリント方式に比べ事前のデータ蓄積・データ更新が不要な点が大きなメリットですが、反面、測位精度が低いのが弱点です。

 今回、Raspberry Pi(以下、端末と呼ぶことがあります)とビーコンをテスト環境に敷設し、予めビーコンと端末の位置座標と、端末が取得したビーコンのRSSIをデータベースに記録(これを「フィンガプリント」と言います)し、そのフィンガプリントデータを機械学習にかけてることにより、測位精度がどの程度向上するのかを検証しました。

 機械学習ツールは多くありますが、今回はノープログラミングで利用できる Orange と、Pythonの機械学習ライブラリとして有名な scikit-learn を使用し、それぞれで得た推定位置の結果を matplotlib によりプロットしています。


テスト環境

 テスト環境は当社事務所にAplix社製ビーコン54台とRaspbery Pi 端末13台を下図のように配置し、構築しています。端末13台は4mを辺とする正方形の4頂点上に配置し(これをグリッドと呼びます)、さらに各正方形の中心にも端末を配置しています。位置測位の対象となるビーコンは図の[R]と[B]の両方に配置しています。

 



データと特徴量について

 フィンガプリントを記録するデータベーステーブルには多くのフィールドがありますが、機械学習で使用する特徴量には端末の名称(下図のN1T、N2T、N3T・・・)、各端末が取得したRSSIに基づき算出したが端末からビーコンまでの距離(N1R、N2R、N3R・・・)を取り、目的変数(ラベル)はビーコンの位置座標(ax, ay)となります。 

データベーステーブルに記録されたフィンガプリント(一部)をExcelで表示


機械学習による位置推定

 

TCOTによる位置推定

 機械学習に入る前に、当社の二円指向三点測位(TCOT)により算出した推定位置を  matplotlib によりプロットした結果を以下に提示します。

図1:TCOTによる位置推定のプロット


 各矢印の始点が実際のビーコンの位置、終点がTCOTにより算出された推定座標となります。 

 以下では今回使用する機械学習のツールについて説明すると共に、TCOTで使った同じデータを機械学習に適用し、どの程度、推定位置が改善するかを見ていきます。

 

Orange Data Mining による位置推定

 今回使用した機械学習ツールの1つが Orange Data Mining で、スロベニアのリュブリャナ大学が開発提供するオープンソースのデータマイニングツールです。どなたでも無料ダウンロードして使用することができます。
 本ツールでは、データ読み込み、モデル定義、予測、出力までの流れを GUI で組み合わせていくことにより、ノープログラミングで機械学習を実行できます。

 操作画面のサンプルは以下のようになります。

 今回は 数多くある機械学習の手法の中のk近傍モデル(kNN)を用いてビーコン位置の推定を行いました。kNNでは、あらかじめ教師となるデータを収集し、データは全て数値に変換されます。次に運用データ(機械学習の教科書では、"テストデータ"と呼ばれます)をkNNに渡すと、各テストデータが最も近接する教師データに分類され、それが持つ目的変数(ここでは教師データのxとy座標)を返してきます。

 下図が Orange kNNの返してきたビーコンの推定位置をプロットしたものです。予め教師データを作成するというコストはかかりますが、図1のTCOTに比べると推定位置の誤差は改善されいます。

Orange kNN で指定した主なパラメータ:

  • k:1
  • メトリック:Manhattan
  • Weight:Distance

注:
kNNは教師データに基づき分類を行うアルゴリズムであり、本例では教師が持つ目的変数(x、y座標)に分類されます。従って、上図でビーコンが座標(0.5,0.5)に位置する場合でも、アルゴリズム的には座標(0, 0)が正解値となります。


scikit-learn による位置推定

 次に、Google が提供するオープンソースの Python 用機械学習ライブラリ scikit -learn を使用します。

 ここでは Orange Data Mining と同様に k近傍法(最近傍法)を採用します。ビーコン座標の予測モデル関数として KNeighborsClassifier、KNeighborsRegressor の二つを使います。

 

KNeighborsClassifier による位置推定

 ここでは K近傍法のクラス分類となる KNeighborsClassifier 関数を使い、教師あり学習によりビーコンの位置を推定します。ラベル(分類クラス、目的変数)は X座標、Y座標 の多クラスを与えます。

パラメータ指定:

nbrs = KNeighborsClassifier(n_neighbors=1, metric='manhattan', algorithm ='brute', weights='distance')
nbrs.fit(teacherData, teacherXYLabel)
prediction = nbrs.predict( testData )


パラメータ指定:

  • k:1
  • アルゴリズム:brute
  • メトリック:manhattan
  • Weights:distance


 プロット結果は Orange とほぼ同等となりました。ただ、Orange と scikit-learn で同じ kNNを使いながら、個々のビーコンの推定座標に違いがありました。kNNは比較的単純なアルゴリズムなので Orange と scikit-learnで同じ結果を返すものと思っていたのですが、少し意外でした。この理由は、Orange では指定できない、brute(総当り) にあるのかもしれません。

 

KNeighborsRegressor による位置推定

 ここでは K近傍法の回帰分析となる KNeighborsRegressor 関数を使うことによって、教師あり学習により位置を推定します。ラベル(分類クラス、目的変数)として X座標、Y座標 の多クラスを与えます。

パラメータ指定:

nbrs = KNeighborsRegressor(n_neighbors=1, metric='manhattan', algorithm ='brute', weights='distance' )
nbrs.fit( teacherData, teacherXYLabel )
prediction = nbrs.predict( testData )

主なパラメータ指定:

  • k:1
  • アルゴリズム:brute
  • メトリック:manhattan
  • Weights:distance

  KNeighborsClassifier 関数と同一のプロット結果となりました。

 

参考リンク:
k近傍法
2.4 アルゴリズム1 k-最近傍法

今後の課題

 今回、いくつかの方法でビーコンの位置推定を試みました。scikit-learn のkNN関数で指定したパラメータは、GridSearchCV により得られた最適解を使用していますが、特徴量スケーリングの改良などにより位置推定の精度をもう少し上げられるかも知れません。ニューラルネットワーク(MLPClassifier)も試してはいるのですが、まだ良い結果を得られていません。今後はMLPClassifierを含むその他のエスティメータも試用していく予定です。

 また、エスティメータ以前に、取得したデータを見るとRSSIの振れ幅が大きい端末があり、この振れ幅が位置推定に悪影響を及ぼしていると思われます。この振れ幅を抑えるハードウェア的なアプローチの検討の方がより重要かもしれません。


Varista について

 Webで上でプログラミング無しで利用できる機械学習ツールに Varista があります。以前に無償版を試用してみたのですが、上記の同じデータをアップロードできず、しばらく放置していました。年末、ダメ元で Varista に問い合わせたところ、思いがけず迅速・適格な回答を貰い、アップロードができるようになり、位置推定の結果(CSVファイル)を取得できました。そのファイルをプロットしたのが下図です。 

 Varista は決定木ベースのアルゴリズムを使用しており、設定可能なパラメータが多数あります。今回はほぼデフォルトのまま使用しましたが、上述の kNN と遜色ない結果が得られました。 このことから IPS では決定木関連のアリゴリズムも有望と思われます。

Varistaの「エキスパート」画面 ― 多数のパラメータを設定できる

 Varista には API は無いようですが、WebからテストデータをPostすると、即結果を返してくれるようなAPIがあればウレシイ、というユーザもいるのではないでしょうか。


 2021/01/05追記(亀)


(亀)

IPS関連のBlog記事

土屋企画のIPS製品について/IPS product of TPC