以下に添付図面を参照して、この発明にかかる情報提供プログラム、および情報提供装置の好適な実施の形態を詳細に説明する。
(情報提供システムのシステム構成)
まず、本実施の形態にかかる情報提供システムのシステム構成の一例について説明する。図1は、情報提供システムのシステム構成図である。図1において、情報提供システム100は、情報提供装置101と、カメラ102と、複数の検知装置TMと、を含む構成である。この情報提供システム100は、たとえば、スーパーマーケットや家電量販店などの大型店舗に構築される。
情報提供システム100において、情報提供装置101は、無線により検知装置TMと通信可能である。また、情報提供装置101は、インターネット、LAN(Local Area Network)、WAN(Wide Area Network)などのネットワーク110を介して外部のコンピュータ装置にアクセス可能である。
情報提供装置101は、店舗内のレジR(たとえば、レジR1,R2)で商品の精算を行うために順番待ちしている顧客の待ち時間を予測して、顧客に提供する機能を有する。具体的には、たとえば、情報提供装置101は、レジR1,R2ごとに設けられている電光掲示板D1、D2に行列の待ち時間を表示する。
カメラ102は、店舗内を撮影する機能を有する。カメラ102は、順番待ちしている顧客を俯瞰する位置(ここでは、天井)に設置されており、複数の行列を撮影可能である。撮影画像は静止画でも動画でもよい。カメラ102は、所定の時間間隔(たとえば、1/30[秒])で撮影した画像を画像I/F(不図示)を介して、情報提供装置101に出力する。なお、店舗内に設置するカメラ102の台数は複数でもよい。
検知装置TMは、顧客が商品を収容するために利用する買い物カゴまたは/およびショッピングカートに取り付けられている。検知装置TMは、買い物カゴまたはショッピングカートに収容された商品の商品点数をカウントして、情報提供装置101に送信する機能を有する。また、検知装置TMは、後述する発光部503を制御して、光を発する機能を有する。
情報提供システム100では、検知装置TMによって買い物カゴに収容された商品の商品点数をカウントして、情報提供装置101に通知する。この際、検知装置TMが商品点数の通知と同時に光を発することで、情報提供装置101において撮影画像内の発光箇所から買い物カゴの位置を特定し、顧客が順番待ちしている行列を特定する。
また、情報提供システム100では、情報提供装置101において発光箇所と商品点数とを対応付けることで、顧客が利用している買い物カゴに収容されている商品点数を特定する。この結果、情報提供システム100では、各行列に属する買い物カゴの商品点数から各行列の待ち時間を予測して、店舗内の電光掲示板D1、D2などに表示することができる。
(監視領域の設定例)
つぎに、店舗内の行列を監視する監視領域ARの設定例について説明する。図2は、監視領域の設定例を示す説明図である。図2において、撮影画像Iは、カメラ102によって撮影された店舗内の画像である。ここで、撮影画像I内の「+」はレジRの設置位置であり、点線で囲った領域は監視領域ARである。
情報提供システム100では、撮影画像I上に設定された監視領域AR内に進入した顧客が順番待ちしている行列を順次特定していくことになる。なお、撮影画像Iにおいて、精算が終了して監視領域ARから退出した顧客、あるいは、精算前に行列から離れて監視領域ARから退出した顧客を判断するための退出領域(たとえば、図2中、領域RA)を確保する必要がある。
この監視領域ARは任意に設定可能である。詳細は後述するが、たとえば、監視領域ARは、順番待ちしている顧客数や行列数に応じて動的に設定することができる。ただし、店舗内にカメラ102を複数台設置する場合は、各カメラ102の撮影範囲または監視領域ARが、他のカメラ102の撮影範囲または監視領域ARと重ならないように設定される。
(情報提供装置のハードウェア構成)
つぎに、情報提供装置101のハードウェア構成の一例について説明する。図3は、情報提供装置のハードウェア構成を示すブロック図である。図3において、情報提供装置101は、CPU(Central Processing Unit)301と、ROM(Read‐Only Memory)302と、RAM(Random Access Memory)303と、磁気ディスクドライブ304と、磁気ディスク305と、光ディスクドライブ306と、光ディスク307と、ディスプレイ308と、I/F(Interface)309と、操作パネル310と、を備えている。また、各構成部はバス300によってそれぞれ接続されている。
ここで、CPU301は、情報提供装置101の全体の制御を司る。ROM302は、ブートプログラムなどのプログラムを記憶している。RAM303は、CPU301のワークエリアとして使用される。磁気ディスクドライブ304は、CPU301の制御にしたがって磁気ディスク305に対するデータのリード/ライトを制御する。磁気ディスク305は、磁気ディスクドライブ304の制御で書き込まれたデータを記憶する。
光ディスクドライブ306は、CPU301の制御にしたがって光ディスク307に対するデータのリード/ライトを制御する。光ディスク307は、光ディスクドライブ306の制御で書き込まれたデータを記憶したり、光ディスク307に記憶されたデータをコンピュータに読み取らせたりする。
ディスプレイ308は、文書、画像、機能情報などのデータを表示する。具体的には、たとえば、ディスプレイ308は、店舗内のレジR1,R2ごとに設けられた電光掲示板D1,D2(図1参照)である。このディスプレイ308は、たとえば、CRT、TFT液晶ディスプレイ、プラズマディスプレイなどを採用することができる。I/F309は、通信回線を通じてLAN、WAN、インターネットなどのネットワーク110に接続され、このネットワーク110を介して他の装置に接続される。なお、通信回線は有線でも無線でもよい。
そして、I/F309は、ネットワーク110と内部のインターフェースを司り、外部装置からのデータの入出力を制御する。I/F309には、たとえばモデムやLANアダプタなどを採用することができる。操作パネル310は、文字、数字、各種指示などの入力のためのキーを備え、データの入力をおこなう。
(検知装置のハードウェア構成)
つぎに、検知装置TMのハードウェア構成の一例について説明する。図4は、検知装置のハードウェア構成を示すブロック図である。図4において、検知装置TMは、CPU401と、ROM402と、RAM403と、I/F404と、操作パネル405と、赤外線LED(Light Emitting Diode)406と、を備えている。また、各構成部はバス400によってそれぞれ接続されている。
ここで、CPU401は、検知装置TMの全体の制御を司る。ROM402は、ブートプログラムなどのプログラムを記憶している。RAM403は、CPU401のワークエリアとして使用される。I/F404は、無線により外部装置(たとえば、情報提供装置101)に接続される。
そして、I/F404は、無線ネットワークと内部のインターフェースを司り、外部装置からのデータの入出力を制御する。操作パネル405は、文字、数字、各種設定などの入力のためのキーを備え、データの入力を行う。赤外線LED406は、電流を流すと発光する半導体素子である。なお、検知装置TMの電源は、たとえば、ボタン電池などによって実現される。
(検知装置の機能的構成)
つぎに、検知装置TMの機能的構成について説明する。図5は、検知装置の機能的構成を示すブロック図である。図5において、検知装置TMは、センサ501と、カウンタ502と、発光部503と、制御部504と、通信部505と、を含む構成である。各機能部(センサ501〜通信部505)は、具体的には、たとえば、図4に示したROM402、RAM403などの記憶装置に記憶されたプログラムをCPU401に実行させることにより、または、I/F404により、その機能を実現する。
まず、センサ501は、買い物カゴBに収容されている商品の重量(以下、「カゴ重量」という)の増減を検知する機能を有する。ここで、カゴ重量は、顧客が買い物カゴBに商品を入れた場合に増加し、顧客が買い物カゴBから商品を取り出した場合に減少する。なお、検知された検知結果は、RAM403に記憶される。このセンサ501は、たとえば、買い物カゴBの底面部aと下面部bとの間に設けられる。また、センサ501は、ショッピングカートSCの買い物カゴBを載置する載置面cと下面部dとの間に設けられることにしてもよい。
カウンタ502は、買い物カゴBに収容されている商品の商品点数[点]を計数する機能を有する。具体的には、たとえば、カウンタ502が、カゴ重量の増加が検知されると商品点数をインクリメントし、カゴ重量の減少が検知されると商品点数をデクリメントする。なお、計数された計数結果は、RAM403に記憶される。
発光部503は、発光する機能を有する。発光部503から発せられる光は、赤外線などの不可視光であってもよく、また、可視光であってもよい。発光部503は、たとえば、図4に示した赤外線LED406によって実現される。この発光部503は、たとえば、買い物カゴBの側面eの上部外側に取り付けられる。また、発光部503は、ショッピングカートSCの前面fに取り付けられることにしてもよい。
制御部504は、通信部505を制御する機能を有する。通信部505は、I/F404を介して、情報提供装置101と無線通信する機能を有する。具体的には、たとえば、制御部504が、通信部505を制御して、カウンタ502によって計数された計数結果(商品点数情報)を情報提供装置101に送信する。この際、制御部504は、衝突判定を実行して、他の端末装置との間で送信処理が衝突しない場合に、商品点数情報を送信することにしてもよい。
具体的には、たとえば、まず、制御部504が、通信部505を制御して、商品点数情報の送信許否を問い合わせるリクエストを情報提供装置101に送信する。この結果、商品点数情報の送信を許可するレスポンスを受信した場合に、制御部504が、通信部505を制御して、商品点数情報を情報提供装置101に送信することにしてもよい。
一方、送信を許可しないレスポンスを受信した場合は、一定時間経過後に、制御部504が、通信部505を制御して、上記リクエストを再度送信することにしてもよい。また、レスポンスがない場合は、情報提供装置101からのレスポンスを待つことにしてもよい。
また、制御部504は、発光部503を制御する機能を有する。具体的には、たとえば、制御部504が、発光部503を制御して、通信部505による商品点数情報の送信と同時に発光させる。より具体的には、たとえば、制御部504が、商品点数情報の送信指示を通信部505に送信する際、同時に発光指示を発光部503に送信する。
なお、カウンタ502の計数結果は、顧客が買い物を開始する際には0[点]となっている。具体的には、たとえば、カゴ置場近傍にカウンタ502の計数結果を初期化するリセット信号を発信する機器を設けることで、検知装置TMがリセット信号を受信して計数結果をリセットすることにしてもよい。
また、買い物カゴBを、カゴ置場などで買い物カゴBが重なった場合に、カゴ重量の増減をセンサ501が検知しないような構造にしてもよい。これにより、レジRでの精算が終了した状態(買い物カゴBの商品点数が0[点])を維持することが可能となり、顧客の買い物開始時には計数結果がリセットされた状態となる。
(情報提供装置の機能的構成)
つぎに、情報提供装置101の機能的構成について説明する。図6は、情報提供装置の機能的構成を示すブロック図である。図6において、情報提供装置101は、受信部601と、取得部602と、検出部603と、検索部604と、関連付け部605と、設定部606と、順序判定部607と、列決定部608と、算出部609と、待ち時間算出部610と、出力部611と、を含む構成である。各機能部(受信部601〜出力部611)は、具体的には、たとえば、図3に示したROM302、RAM303、磁気ディスク305、光ディスク307などの記憶装置に記憶されたプログラムをCPU301に実行させることにより、または、I/F309により、その機能を実現する。
まず、受信部601は、I/F309を介して、検知装置TMから商品点数情報を受信する機能を有する。ここで、商品点数情報とは、顧客が利用する買い物カゴBに収容されている商品の商品点数[点]であり、検知装置TMのカウンタ502によって計数された計数結果である。なお、受信された商品点数情報は、RAM303、磁気ディスク305、光ディスク307などの記憶装置に記憶される。
取得部602は、店舗内の監視領域ARをカメラ102によって撮影した撮影画像を取得する機能を有する。具体的には、たとえば、取得部602が、I/F309を介して、所定の時間間隔で撮影された撮影画像をカメラ102から受信する。この撮影画像には、撮影時刻が付与されている。なお、取得された撮影画像は、RAM303、磁気ディスク305、光ディスク307などの記憶装置に記憶される。
検出部603は、取得した撮影画像の中から発光箇所を検出する機能を有する。ここで、発光箇所とは、検知装置TMの発光部503によって発せられた光の位置である。光の位置は、たとえば、撮影画像上のX軸とY軸からなる直交座標系の座標位置によって表現される。なお、検出された発光箇所は、たとえば、図7に示す発光箇所テーブル700に記憶される。
図7は、発光箇所テーブルの記憶内容の一例を示す説明図である。図7において、発光箇所テーブル700は、撮影時刻および発光箇所のフィールドを有し、各フィールドに情報を設定することで、発光箇所情報(たとえば、発光箇所情報700−1,700−2)をレコードとして記憶している。
ここで、撮影時刻とは、カメラ102によって撮影画像が撮影された時刻である。発光箇所とは、撮影画像上の一点を特定する座標位置である。この発光箇所は、買い物カゴBの位置、すなわち、買い物カゴBを利用している顧客の位置となる。なお、図面では、たとえば、発光箇所を単に「p1」と表現しているが、実際は、撮影画像上の一点を特定するX座標、Y座標によって表現される。この発光箇所テーブル700は、たとえば、RAM303、磁気ディスク305、光ディスク307などの記憶装置によって実現される。
検索部604は、発光箇所テーブル700の中から、受信した商品点数情報の受信時刻と撮影時刻が一致する発光箇所を検索する機能を有する。ここで、時刻の一致とは、たとえば、受信時刻と撮影時刻の完全一致であってもよく、受信時刻と撮影時刻の時刻差が所定範囲であってもよい。なお、検索された検索結果は、RAM303、磁気ディスク305、光ディスク307などの記憶装置に記憶される。
ここで、時間経過にともなう発光箇所と商品点数との関係の一例について説明する。図8は、発光箇所と商品点数との関係を示す説明図である。図8には、発光箇所p1〜p3と商品点数s1〜s3との関係が時間軸tに沿って示されている。
図8において、「時刻」とは、商品点数情報の受信時刻、すなわち、各撮影画像I1〜I3の撮影時刻である。「発光箇所」とは、各撮影画像I1〜I3から検出された発光箇所p1〜p3である。「商品点数」とは、各時刻t2,t5,t8に受信された商品点数情報から特定される商品点数s1,s2,s3である。
図6の説明に戻り、関連付け部605は、検索された発光箇所と商品点数情報から特定される商品点数とを関連付ける機能を有する。図8の例では、関連付け部605が、たとえば、発光箇所p1と商品点数s1とを関連付ける。これにより、撮影画像上での顧客の位置と、顧客が利用している買い物カゴBに収容されている商品の商品点数とを対応付けることができる。
なお、関連付けられた関連付け結果は、たとえば、図9に示すターゲットカゴテーブル900に記憶される。ターゲットカゴテーブル900は、たとえば、RAM303、磁気ディスク305、光ディスク307などの記憶装置によって実現される。
図9は、ターゲットカゴテーブルの記憶内容の一例を示す説明図である。図9において、ターゲットカゴテーブル900は、位置および商品点数のフィールドを有し、各フィールドに情報を設定することで、ターゲットカゴ情報900−1をレコードとして記憶している。ここで、位置とは、撮影画像の中から検出された発光箇所、すなわち、買い物カゴBを利用している顧客の位置である。商品点数とは、買い物カゴBに収容されている商品の商品点数である。
設定部606は、撮影画像上での監視領域ARを設定する機能を有する。具体的には、たとえば、設定部606が、監視領域AR内の顧客密度を算出する。そして、設定部606が、算出された顧客密度に基づいて、監視領域ARの範囲を設定する。なお、設定部606による領域設定処理の具体的な処理内容については、図15−1および図15−2を用いて後述する。
順序判定部607は、監視領域ARに進入した顧客の進入順序を判定する機能を有する。具体的には、たとえば、順序判定部607が、ターゲットカゴ情報900−1に基づいて、監視領域ARに進入した顧客の進入順序を判定する。なお、順序判定部607による順序判定処理の具体的な処理内容については図13−1〜図13−3を用いて後述する。
また、判定された順序判定結果は、たとえば、図10に示すカゴ情報テーブル1000に記憶される。カゴ情報テーブル1000は、たとえば、RAM303、磁気ディスク305、光ディスク307などの記憶装置によって実現される。
なお、以下の説明では、監視領域AR内に存在する複数の買い物カゴBを「カゴB1〜Bn」と表記する。また、カゴB1〜Bnのうち任意の買い物カゴBを「カゴBi」と表記する(i=1,2,…,n)。
図10は、カゴ情報テーブルの記憶内容の一例を示す説明図である。図10において、カゴ情報テーブル1000は、カゴID、進入順序、位置、商品点数および移動ベクトルのフィールドを有する。各フィールドに情報を設定することで、買い物カゴ(以下、単に「カゴ」と表記する)B1〜Bnのカゴ情報1000−1〜1000−nがレコードとして記憶されている。
ここで、カゴIDとは、カゴBiを識別する識別子である。進入順序とは、監視領域AR内に進入してきたカゴBiの順序である。位置とは、撮影画像上でのカゴBiの座標位置である。商品点数とは、カゴBiに収容されている商品の商品点数である。移動ベクトルとは、撮影画像上でのカゴBiの移動前または/および移動後の位置と移動方向を表す情報である
列決定部608は、監視領域AR内の複数の行列の中から、顧客が順番待ちしている行列を決定する機能を有する。具体的には、たとえば、列決定部608が、後述する算出部609によって算出された算出結果に基づいて、顧客が順番待ちしている行列を決定する。なお、列決定部608による列決定処理の具体的な処理内容については図14−1〜図14−4を用いて後述する。また、決定された列決定結果は、たとえば、図11に示す列管理テーブル1100に記憶される。
なお、以下の説明では、監視領域AR内に存在する複数の行列を「行列L1〜Lm」と表記する。また、行列L1〜Lmのうち任意の行列を「行列Lj」と表記する(j=1,2,…,m)。
図11は、列管理テーブルの記憶内容の一例を示す説明図である。図11において、列管理テーブル1100は、行列ID、最後尾位置、精算速度およびカゴリストのフィールドを有する。各フィールドに情報を設定することで、行列L1〜Lmごとの管理情報1100−1〜1100−mがレコードとして記憶されている。
ここで、行列IDとは、監視領域AR内の行列Lj(j=1,2,…,m)を識別する識別子である。最後尾位置とは、行列Ljの最後尾の座標位置である。精算速度とは、行列Ljに対応するレジRjでの単位時間当たりに精算可能な商品点数である(たとえば、[点/秒])。カゴリストとは、行列Ljに属するカゴBiのカゴIDをリスト化したものである。ここでは、行列Ljに並んだ順にカゴIDが追加されていく。すなわち、行列L1の先頭位置はカゴB1の位置p1となる。
待ち時間算出部610は、顧客が順番待ちしている行列Ljの待ち時間を算出する機能を有する。具体的には、たとえば、まず、待ち時間算出部610が、列管理テーブル1100の精算速度を参照して、行列Ljに対応するレジRjの精算速度fjを特定する。さらに、待ち時間算出部610が、列管理テーブル1100のカゴリストを参照して、行列Ljに属するカゴB(以下、「カゴBj(1)〜Bj(n)」と表記する)を特定する。
このあと、待ち時間算出部610が、カゴ情報テーブル1000の商品点数を参照して、特定されたカゴBj(1)〜Bj(n)の商品点数sj(1)〜sj(n)を特定する。つぎに、待ち時間算出部610が、下記式(1)を用いて、特定された商品点数sj(1)〜sj(n)を足し合わせることにより総商品点数を算出する。そして、待ち時間算出部610が、下記式(2)を用いて、行列Ljの待ち時間を算出する。ただし、Sjは総商品点数である。また、Tjは行列Ljの待ち時間である。
Tj=Sj/fj ・・・(2)
なお、算出された待ち時間は、たとえば、図12に示す待ち時間テーブル1200に記憶される。待ち時間テーブル1200は、たとえば、RAM303、磁気ディスク305、光ディスク307などの記憶装置によって実現される。
図12は、待ち時間テーブルの記憶内容の一例を示す説明図である。図12において、待ち時間テーブル1200は、行列ID、レジIDおよび待ち時間のフィールドを有する。各フィールドに情報を設定することで、行列L1〜Lmの待ち時間情報1200−1〜1200−mがレコードとして記憶されている。ここで、行列IDとは、行列Ljを識別する識別子である。レジIDとは、行列Ljに対応するレジRjを識別する識別子である。待ち時間とは、行列Ljの待ち時間である。
なお、列管理テーブル1100内の各レジRjの精算速度fjは、任意に設定可能である。具体的には、たとえば、精算速度fjは、レジRjを担当する店員の精算作業の熟練度に基づいて設定される。また、待ち時間算出部610が、所定の時間間隔(たとえば、1時間)で、単位商品当たりの精算時間の平均値を算出することで精算速度fjを動的に算出することにしてもよい。なお、精算時間の平均値は、レジRj単位でも店員単位でもよい。
図6の説明に戻り、出力部611は、算出された行列の待ち時間を出力する機能を有する。具体的には、たとえば、出力部611が、待ち時間テーブル1200を参照して、レジRjごとに設置されている店舗内の電光掲示板(たとえば、図1に示した電光掲示板D1、D2)に、各レジRjに対応する待ち時間Tjを表示することにしてもよい。
他の出力形式としては、たとえば、プリンタ(不図示)への印刷出力、I/F309による外部装置への送信がある。また、RAM303、磁気ディスク305、光ディスク307などの記憶領域に記憶することとしてもよい。なお、出力部611は、列決定部608によって決定された列決定結果を出力することにしてもよい。
(順序判定処理)
つぎに、上記順序判定部607による順序判定処理の具体的な処理内容の一例について説明する。図13−1〜図13−3は、順序判定例を示す説明図である。ここでは、パターン1〜5を例に挙げて、監視領域ARに進入した顧客(以下、「対象顧客」という)の進入順序を判定する場合について説明する。
なお、以下の説明では、対象顧客が利用しているカゴBを「カゴBt」と表記し、カゴBtの位置を「pt」と表記する。カゴBtの位置ptは、たとえば、図9に示したターゲットカゴ情報900−1の位置p1である。
<パターン1>
図13−1において、パターン1は、カゴ情報テーブル1000にカゴ情報が未登録の場合の順序判定例である。まず、順序判定部607は、撮影画像Ia上でのカゴBtの位置ptが監視領域AR内か否かを判断する。これは、対象顧客が、行列Ljで順番待ちしているのか、単にレジRj近傍を通過しているのかを判断するための処理である。
ここでは、カゴBtの位置ptは監視領域AR外のため、カゴBtの進入順序は未判定となる。すなわち、カゴ情報テーブル1000に、カゴBtに関するカゴ情報は登録されない。これにより、買い物中など単にレジRj近傍を通過している顧客を順序判定対象から除外することができる。
<パターン2>
図13−1において、パターン2は、カゴ情報テーブル1000にカゴ情報が未登録の場合の順序判定例である。まず、順序判定部607は、撮影画像Ib上でのカゴBtの位置ptが監視領域AR内か否かを判断する。ここでは、カゴBtの位置ptは監視領域AR内である。この場合、順序判定部607は、カゴBtの進入順序を「1」と判定する。この結果、カゴ情報テーブル1000には、カゴBtに関するカゴ情報1000−tが登録される。
<パターン3>
図13−2において、パターン3は、カゴ情報テーブル1000にカゴ情報が登録済みの場合の順序判定である。まず、順序判定部607は、撮影画像Ic上でのカゴBtの位置ptとカゴBxの位置pxとの距離dtxを算出する。そして、順序判定部607は、距離dtxと予め設定されている閾値d0とを比較する。
これは、カゴBtとカゴBxが異なるものなのか、同一のものなのかを判断するための処理である。具体的には、順序判定部607は、距離dtxが閾値d0未満の場合、カゴBtとカゴBxは同一カゴと判断する。一方、順序判定部607は、距離dtxが閾値d0以上の場合、カゴBtとカゴBxは異なるカゴと判断する。
ここでは、距離dtxが閾値d0未満である。したがって、カゴBtとカゴBxは同一のカゴと判断される(すなわち、顧客が少し移動しただけの状況)。これにより、監視領域AR内で順序判定済みの顧客が少し移動した場合に、別の顧客として順序判定してしまうことを防ぐことができる。なお、閾値d0は、任意に設定されてRAM303、磁気ディスク305、光ディスク307などの記憶領域に記憶されている。
また、順序判定部607は、カゴBtの位置ptが監視領域AR内か否かを判断する。ここでは、カゴBtの位置ptは監視領域AR内である。順序判定部607は、距離dtxが閾値d0未満かつカゴBtの位置ptが監視領域AR内の場合、カゴ情報テーブル1000内のカゴBxの位置pxを位置ptに更新する。
すなわち、監視領域AR内で少し移動したカゴBxの位置pxを修正する。この際、順序判定部607は、カゴBxの移動ベクトルv(x)を求めて、カゴ情報テーブル1000内の移動ベクトルを更新する。なお、移動ベクトルv(x)は、カゴBxの移動前の位置pxと移動後の位置ptから求めることができる。
<パターン4>
図13−2において、パターン4は、カゴ情報テーブル1000にカゴ情報が登録済みの場合の順序判定例である。まず、順序判定部607は、撮影画像Id上でのカゴBtの位置ptとカゴBxの位置pxとの距離dtxを算出する。そして、順序判定部607が、距離dtxと閾値d0とを比較する。ここでは、距離dtxが閾値d0以上である。したがって、カゴBtとカゴBxは異なるカゴと判断される。
また、順序判定部607は、カゴBtの位置ptが監視領域AR内か否かを判断する。ここでは、カゴBtの位置ptは監視領域AR内である。順序判定部607は、距離dtxが閾値d0以上かつカゴBtの位置ptが監視領域AR内の場合、カゴBtの進入順序を「2」と判定する。この結果、カゴ情報テーブル1000に、カゴBtに関するカゴ情報1000−tが登録される。
<パターン5>
図13−3において、パターン5は、カゴ情報テーブル1000にカゴ情報が登録済みの場合の順序判定例である。まず、順序判定部607は、撮影画像Ie上でのカゴBtの位置ptとカゴBxの位置pxとの距離dtxを算出する。そして、順序判定部607が、距離dtxと閾値d0とを比較する。ここでは、距離dtxが閾値d0未満である。
また、順序判定部607は、カゴBtの位置ptが監視領域AR内か否かを判断する。ここでは、カゴBtの位置ptは監視領域AR外である。順序判定部607は、距離dtxが閾値d0未満かつカゴBtの位置ptが監視領域AR外の場合、カゴ情報テーブル1000からカゴBxに関するカゴ情報1000−xを削除する。
すなわち、順序判定部607は、対象顧客がレジRjでの精算が終了して監視領域ARから退出した、あるいは、精算前に行列から離れて監視領域ARから退出したと判断して、カゴBxに関するカゴ情報1000−xをカゴ情報テーブル1000から削除する。
(列決定処理)
つぎに、上記列決定部608の具体的な処理内容の一例について説明する。図14−1〜図14−4は、列決定例を示す説明図である。ここでは、カゴ情報テーブル1000内のカゴBiを利用している顧客が順番待ちしている行列Ljを決定する第1〜第4の列決定処理について説明する。
<第1の列決定処理>
まず、算出部609は、カゴBiの位置piと各行列L1〜Lmの最後尾位置P1〜Pmとの距離を算出する。具体的には、たとえば、算出部609が、列管理テーブル1100を参照して、カゴBiの位置piと各行列L1〜Lmの最後尾位置P1〜Pmとの距離Di1〜Dimを算出する。
なお、行列Ljのカゴリストが「空」の場合、すなわち、行列Ljに誰も順番待ちしていない場合は、行列Ljの最後尾位置Pjは、予め設定された初期位置Pj0となる。この初期位置Pj0は、たとえば、行列Ljに対応するレジRjの配置位置である。行列Ljの初期位置Pj0は、RAM303、磁気ディスク305、光ディスク307などの記憶領域に記憶されている。
列決定部608は、算出された距離Di1〜Dimに基づいて、複数の行列L1〜Lmの中から、顧客が順番待ちしている行列を決定する。具体的には、たとえば、列決定部608が、複数の行列L1〜Lmの中から、距離Di1〜Dimが最短となる行列Ljを、顧客が順番待ちしている行列に決定する。
図14−1の例では、算出部609が、カゴBiとカゴBxの距離Dixを算出する。さらに算出部609が、カゴBiとカゴByの距離Diyを算出する。そして、列決定部608が、距離Dixと距離Diyを比較して(Dix<Diy)、距離が短い行列Lxを、顧客が順番待ちしている行列に決定する。
<第2の列決定処理>
まず、算出部609は、カゴBiの位置piと各行列Ljの最後尾位置Pjとを結ぶ第1の直線と、行列Ljに属する顧客群から選ばれた一の顧客の位置と他の顧客の位置とを結ぶ第2の直線とがなす角度θjを算出する。ここで、第2の直線は、たとえば、行列Ljの最後尾から1番目のカゴBj1の位置pj1と2番目のカゴBj2の位置pj2とを結ぶ直線である。
具体的には、たとえば、算出部609は、下記式(3)を用いて、第1および第2の直線がなす角度θjを表すcosθjを算出する。ただし、V1は位置pj1から位置piへのベクトル、V2は位置pj1から位置pj2へのベクトル、|V1|はベクトルV1のノルム、|V2|はベクトルV2のノルムである。
cosθj=V1・V2(|V1|×|V2|) ・・・(3)
そして、列決定部608は、算出されたcosθ1〜cosθmに基づいて、複数の行列L1〜Lmの中から、顧客が順番待ちしている行列を決定する。具体的には、たとえば、列決定部608が、複数の行列L1〜Lmの中から、cosθjが最小となる行列Ljを、顧客が順番待ちしている行列に決定する。
図14−2の例では、算出部609が、行列Lx、Lyについて第1および第2の直線がなす角度θx、θyを算出する。ここで、行列Lxについて、第1の直線はカゴBiの位置piと行列Lxの最後尾位置Px(カゴBx1の位置px1)とを結ぶ直線、第2の直線は行列Lxに属するカゴBx1の位置px1とカゴBx2の位置px2とを結ぶ直線である。また、行列Lyについて、第1の直線はカゴBiの位置piと行列Lyの最後尾位置Py(カゴBy1の位置py1)とを結ぶ直線、第2の直線は行列Lyに属するカゴBy1の位置py1とカゴBy2の位置py2とを結ぶ直線である。
具体的には、たとえば、算出部609は、上記式(3)を用いて、第1および第2の直線がなす角度θx、θyを表すcosθx、cosθyを算出する。そして、列決定部608が、算出されたcosθxとcosθyを比較して(cosθx<cosθy)、最小の行列Lxを、顧客が順番待ちしている行列に決定する。
<第3の列決定処理>
まず、算出部609は、カゴBiの位置piと行列Ljの最後尾位置Pjとを結ぶ第1の直線と、カゴBiが直前に移動した際の移動前の位置pi’と移動後の位置piとを結ぶ第2の直線とがなす角度θjを算出する。ここで、第2の直線は、カゴ情報テーブル1000内の移動ベクトルと平行な直線である。
具体的には、たとえば、算出部609は、上記式(3)を用いて、第1および第2の直線がなす角度θjを表すcosθjを算出する。そして、列決定部608が、複数の行列L1〜Lmの中から、cosθjが最大となる行列Ljを、顧客が順番待ちしている行列に決定する。
図14−3の例では、算出部609が、行列Lx、Lyについて第1および第2の直線がなす角度θx、θyを算出する。ここで、行列Lxについて、第1の直線はカゴBiの位置pi’と位置piとを結ぶ直線、第2の直線はカゴBiの位置piと行列Lxの最後尾位置Px(カゴBxの位置px)とを結ぶ直線である。また、行列Lyについて、第1の直線はカゴBiの位置pi’と位置piとを結ぶ直線、第2の直線はカゴBiの位置piと行列Lyの最後尾位置Py(カゴByの位置py)とを結ぶ直線である。
具体的には、たとえば、算出部609は、上記式(3)を用いて、第1および第2の直線がなす角度θx、θyを表すcosθx、cosθyを算出する。そして、列決定部608が、算出されたcosθxとcosθyを比較して(cosθx>cosθy)、最大の行列Lxを、顧客が順番待ちしている行列に決定する。
<第4の列決定処理>
まず、算出部609は、上記式(1)を用いて、行列Ljに属する顧客のカゴBj(1)〜Bj(n)に収容されている商品の商品点数sj(1)〜sj(n)の総商品点数Sjを算出する。このあと、算出部609は、上記式(2)を用いて、行列Ljの待ち時間Tjを算出する。そして、列決定部608が、複数の行列L1〜Lmの中から、Tjが最小となる行列Ljを、顧客が順番待ちしている行列に決定する。
図14−4の例では、算出部609が、上記式(1)を用いて、行列Lx、Lyについて総商品点数Sx、Syを算出する。そして、算出部609が、上記式(2)を用いて、行列Lx、Lyの待ち時間Tx、Tyを算出する。ここでは、行列Lxの総商品点数Sxは6(=2+3+1)[点]、行列Lyの総商品点数Syは10(=1+5+4)[点]である。
また、行列Lxの精算速度fxを「fx=0.3」、行列Lyの精算速度fyを「fy=0.2」とする。この場合、行列Lxの待ち時間Txは20(=6/0.3)[秒]、行列Lyの待ち時間Tyは50(=10/0.2)[秒]となる。そして、列決定部608が、Tx、Tyを比較して(Tx<Ty)、待ち時間が短い行列Lxを、顧客が順番待ちしている行列に決定する。
なお、ここでは待ち時間Tjに基づいて、顧客が順番待ちしている行列を決定することにしたが、これに限らない。たとえば、列決定部608が、各行列Ljに属するカゴ数が最小となる行列を、顧客が順番待ちしている行列に決定することにしてもよい。また、列決定部608が、各行列Ljの総商品点数Sjが最小となる行列を、顧客が順番待ちしている行列に決定することにしてもよい。
(領域設定処理)
つぎに、上記設定部606による領域設定処理の具体的な処理内容の一例について説明する。図15−1、図15−2は、領域設定例を示す説明図である。
図15−1において、まず、設定部606が、撮影画像I上での監視領域AR内の複数の行列L1〜L3を横切るように監視領域ARを所定間隔Hで区切って複数の区間r1〜r4に分割する。このあと、設定部606が、カゴ情報テーブル1000を参照して、各区間r1〜r4に含まれるカゴ数X(1)〜X(4)を算出する。
具体的には、たとえば、設定部606が、カゴBiの位置のX座標が『(i−1)×H≦X<i×H』となるカゴBiを区間riに含まれるものとすることで、区間riのカゴ数X(i)を算出することにしてもよい。ここでは、カゴ数X(1)〜X(4)は『X(1)=3、X(2)=3、X(3)=2、X(4)=1』である。
そして、設定部606が、レジR1〜R3から最も遠い区間r4に含まれるカゴ数X(4)が0[個]より大きい場合、監視領域ARを所定領域mA拡張して設定する。ここで、所定領域mAは、任意に設定可能であり、たとえば、各区間r1〜r4と同じ大きさの領域である。ここでは、区間r4に含まれるカゴ数X(4)は0[個]より大きいため、監視領域ARを所定領域mA拡張して設定する。
図15−2において、まず、設定部606が、撮影画像I上での監視領域AR内の複数の行列L1〜L3を横切るように監視領域ARを所定間隔Hで区切って複数の区間r1〜r4に分割する。このあと、設定部606が、カゴ情報テーブル1000を参照して、各区間r1〜r4に含まれるカゴ数X(1)〜X(4)を算出する。ここでは、カゴ数X(1)〜X(4)は『X(1)=3、X(2)=3、X(3)=0、X(4)=0』である。
そして、設定部606が、レジR1〜R3から遠いほうから複数の区間(たとえば、1番目と2番目の区間r4,r3)連続してカゴ数が0[個]の場合、監視領域ARを所定領域cA縮小して設定する。ここで、所定領域cAは、任意に設定可能であり、たとえば、各区間r1〜r4と同じ大きさの領域である。ここでは、区間r4,r3に含まれるカゴ数X(4),X(3)が連続して0[個]のため、監視領域ARを所定領域cA縮小して設定する。
なお、拡張可能な最大の監視領域ARの大きさ、および、縮小可能な最小の監視領域ARの大きさは予め設定されている。これにより、設定部606が、拡張可能な最大の監視領域ARの大きさを超えて拡張(たとえば、撮影画像より大きい領域)しないように、あるいは、縮小可能な最小の監視領域ARの大きさを超えて縮小しないようにすることができる。
(検知装置の各種処理手順)
つぎに、カゴBiに取り付けられている検知装置TMにおいて実行される各種処理手順について説明する。
<カウンタ処理手順>
ここではまず、検知装置TMにおいて実行されるカウンタ処理手順について説明する。このカウンタ処理は、カゴBiに収容されている商品の商品点数s(i)を計数する処理である。図16は、検知装置のカウンタ処理手順の一例を示すフローチャートである。
図16のフローチャートにおいて、まず、センサ501により、カゴBiに収容されている商品のカゴ重量の増減を検知する(ステップS1601)。このあと、カウンタ502により、カゴ重量が増加したか否かを判断する(ステップS1602)。ここで、カゴ重量が増加した場合(ステップS1602:Yes)、商品点数s(i)をインクリメントして(ステップS1603)、ステップS1601に戻る。
一方、カゴ重量が増加していない場合(ステップS1602:No)、カウンタ502により、カゴ重量が減少したか否かを判断する(ステップS1604)。ここで、カゴ重量が減少した場合(ステップS1604:Yes)、商品点数s(i)をデクリメントして(ステップS1605)、ステップS1601に戻る。
一方、カゴ重量が減少していない場合(ステップS1604:No)、ステップS1601に戻る。これにより、カゴBiに収容されている商品点数s(i)を適切に計数することができる。
<送信処理手順>
つぎに、検知装置TMにおいて実行される送信処理手順について説明する。この送信処理は、商品点数s(i)を表す商品点数情報を情報提供装置101に送信する処理である。図17は、検知装置の送信処理手順の一例を示すフローチャートである。
図17のフローチャートにおいて、まず、制御部504により、通信部505を制御して衝突判定処理を実行する(ステップS1701)。この結果、商品点数情報を送信可能な場合(ステップS1702:Yes)、制御部504により、発光部503を制御して発光させるとともに、通信部505を制御して商品点数情報を情報提供装置101に送信する(ステップS1703)。
そして、所定時間待機して(ステップS1704)、ステップS1701に戻る。一方、ステップS1702において、商品点数情報を送信不可の場合(ステップS1702:No)、所定時間待機して(ステップS1704)、ステップS1701に戻る。
これにより、カゴBiに収容されている商品点数s(i)を情報提供装置101に送信することができる。この際、他の検知装置TMとの送信処理の衝突判定を行うことで、情報提供装置101において発光箇所と商品点数とを1対1で適切に対応付けることができる。
(情報提供装置の各種処理手順)
つぎに、情報提供装置101において実行される各種処理手順について説明する。
<検出処理手順>
ここではまず、情報提供装置101において実行される検出処理手順について説明する。この検出処理は、撮影画像の中から発光箇所を検出する処理である。図18は、情報提供装置の検出処理手順の一例を示すフローチャートである。
図18のフローチャートにおいて、まず、取得部602により、カメラ102から撮影画像を取得する(ステップS1801)。ここで、撮影画像を取得するのを待って(ステップS1801:No)、取得した場合(ステップS1801:Yes)、検出部603により、取得した撮影画像の中から発光箇所を検出する(ステップS1802)。
そして、発光箇所が検出された場合(ステップS1803:Yes)、検出部603により、撮影画像の撮影時刻と、検出された発光箇所とを発光箇所テーブル700に記録して(ステップS1804)、本フローチャートによる一連の処理を終了する。一方、発光箇所が検出されなかった場合(ステップS1803:No)、本フローチャートによる一連の処理を終了する。これにより、撮影画像上の発光箇所からカゴBiの位置p(i)を特定することができる。
<情報提供処理手順>
つぎに、情報提供装置101において実行される情報提供処理手順について説明する。この情報提供処理は、行列Ljの待ち時間Tjを顧客に提供するための処理である。図19は、情報提供装置の情報提供処理手順の一例を示すフローチャートである。
図19のフローチャートにおいて、まず、受信部601により、検知装置TMから商品点数情報を受信したか否かを判断する(ステップS1901)。ここで、商品点数情報を受信するのを待って(ステップS1901:No)、受信した場合(ステップS1901:Yes)、検索部604により、発光箇所テーブル700の中から、商品点数情報の受信時刻と撮影時刻が一致する発光箇所を検索する(ステップS1902)。
ここで、発光箇所が検索されなかった場合(ステップS1903:No)、本フローチャートによる一連の処理を終了する。一方、発光箇所が検索された場合(ステップS1903:Yes)、関連付け部605により、検索された発光箇所と商品点数情報から特定される商品点数とを関連付けてターゲットカゴテーブル900に登録する(ステップS1904)。
そして、順序判定部607により、監視領域ARに進入した顧客の進入順序を判定する順序判定処理を実行する(ステップS1905)。つぎに、列決定部608により、監視領域AR内の複数の行列の中から、顧客が順番待ちしている行列を決定する列決定処理を実行する(ステップS1906)。
このあと、待ち時間算出部610により、行列Ljの待ち時間を算出する待ち時間算出処理を実行して(ステップS1907)、出力部611により、待ち時間テーブル1200を参照して、レジRjごとに設置されている店舗内の電光掲示板に各行列Ljの待ち時間Tjを表示して(ステップS1908)、本フローチャートによる一連の処理を終了する。
これにより、複数の行列L1〜Lmの中から顧客が並んでいる行列Ljを適切に特定し、行列Ljごとの待ち時間Tjを予測して顧客に提供することができる。
<順序判定処理手順>
つぎに、図19に示したステップS1905の順序判定処理手順について説明する。図20−1および図20−2は、順序判定処理手順の一例を示すフローチャートである。図20−1のフローチャートにおいて、まず、順序判定部607により、ターゲットカゴテーブル900からカゴBtの位置ptを抽出する(ステップS2001)。
このあと、順序判定部607により、カゴ情報テーブル1000にカゴ情報が登録されているか否かを判断する(ステップS2002)。ここで、カゴ情報が未登録の場合(ステップS2002:No)、図20−2のステップS2003に移行して、順序判定部607により、カゴBtの位置ptは監視領域AR内か否かを判断する(ステップS2003)。
ここで、監視領域AR内の場合(ステップS2003:Yes)、順序判定部607により、カゴBtの進入順序SNを「1」とする(ステップS2004)。そして、順序判定部607により、カゴ情報テーブル1000にカゴBtのカゴ情報を登録して(ステップS2005)、図19に示したステップS1906に移行する。一方、監視領域AR外の場合(ステップS2003:No)、図19に示した情報提供処理にかかる一連の処理を終了する。
また、図20−1に示したステップS2002において、カゴ情報が登録されている場合(ステップS2002:Yes)、順序判定部607により、「i=1」として(ステップS2006)、カゴ情報テーブル1000からカゴBiの位置p(i)を抽出する(ステップS2007)。
そして、順序判定部607により、カゴBtの位置ptとカゴBiの位置p(i)との距離dtiを算出する(ステップS2008)。つぎに、順序判定部607により、iをインクリメントして(ステップS2009)、「i>n」か否かを判断する(ステップS2010)。ここで、「i≦n」の場合(ステップS2010:No)、ステップS2007に戻る。
一方、「i>n」の場合(ステップS2010:Yes)、順序判定部607により、距離dt1〜dtnの中から最小のdtiを選択する(ステップS2011)。そして、順序判定部607により、距離dtiと閾値d0とを比較して「dti<d0」か否かを判断する(ステップS2012)。
ここで、「dti≧d0」の場合(ステップS2012:Yes)、図20−2のステップS2013に移行して、順序判定部607により、カゴBtの位置ptは監視領域AR内か否かを判断する(ステップS2013)。
ここで、監視領域AR内の場合(ステップS2013:Yes)、順序判定部607により、カゴBtの進入順序SNを「n+1」とする(ステップS2014)。そして、順序判定部607により、カゴ情報テーブル1000にカゴBtのカゴ情報を登録して(ステップS2005)、図19に示したステップS1906に移行する。一方、監視領域AR外の場合(ステップS2013:No)、図19に示した情報提供処理にかかる一連の処理を終了する。
また、図20−1に示したステップS2012において、「dti<d0」の場合(ステップS2012:No)、図20−2のステップS2015に移行して、順序判定部607により、カゴBtの位置ptは監視領域AR内か否かを判断する(ステップS2015)。
ここで、監視領域AR内の場合(ステップS2015:Yes)、順序判定部607により、カゴ情報テーブル1000内のカゴBiの位置p(i)を位置ptに更新する(ステップS2016)。このあと、順序判定部607により、カゴBiの移動ベクトルv(i)を算出する(ステップS2017)。そして、順序判定部607により、カゴ情報テーブル1000内のカゴBiの移動ベクトルを更新して(ステップS2018)、図19に示したステップS1906に移行する。
また、ステップS2015において、監視領域AR外の場合(ステップS2015:No)、順序判定部607により、カゴ情報テーブル1000内のカゴBiのカゴ情報1000−iを削除する(ステップS2019)。そして、順序判定部607により、カゴ情報テーブル1000内のカゴ情報を進入順序が昇順となるようにソートして(ステップS2020)、図19に示したステップS1906に移行する。
これにより、監視領域AR内に進入した顧客および監視領域AR外に退出した顧客を適切に把握するとともに、各顧客の進入順序を正確に特定することができる。
<列決定処理手順>
つぎに、図19に示したステップS1906の列決定処理手順について説明する。図21は、列決定処理手順の一例を示すフローチャートである。図21のフローチャートにおいて、まず、列決定部608により、各行列Ljの最後尾位置Pjを初期位置Pj0に設定する(ステップS2101)。
このあと、列決定部608により、「i=1」として(ステップS2102)、「i>n」か否かを判断する(ステップS2103)。ここで、「i≦n」の場合(ステップS2103:No)、列決定部608により、カゴ情報テーブル1000を参照して、カゴBiの位置p(i)を特定する(ステップS2104)。
そして、列決定部608により、第1の列決定処理を実行する(ステップS2105)、このあと、列決定部608により、複数の行列Ljが選択されたか否かを判断する(ステップS2106)。ここで、複数の行列Ljが選択されなかった場合(ステップS2106:No)、列決定部608により、列管理テーブル1100の行列LjのカゴリストにカゴBiを登録する(ステップS2107)。
さらに、列決定部608により、列管理テーブル1100内の行列Ljの最後尾位置PjをカゴBiの位置p(i)に更新する(ステップS2108)。そして、列決定部608により、iをインクリメントして(ステップS2109)、ステップS2103に戻る。
また、ステップS2106において、複数の行列Ljが選択された場合(ステップS2106:Yes)、列決定部608により、複数の行列Ljを列候補L(k)として、図22に示す列候補テーブル2200に登録して(ステップS2110)、第2の列決定処理を実行して(ステップS2111)、ステップS2109に移行する。
また、ステップS2103において、「i>n」の場合(ステップS2103:Yes)、図19に示したステップS1907に移行する。
ここで、列候補テーブル2200について説明する。図22は、列候補テーブルの記憶内容の一例を示す説明図である。図22において、列候補テーブル2200は、列候補IDおよび行列IDのフィールドを有し、各フィールドに情報を設定することで、列候補情報2200−1から2200−Kをレコードとして記憶している。
ここで、列候補IDとは、列候補L(k)を識別する識別子である(k=1,2,…,K)。行列IDとは、列候補に対応する行列Ljを識別する識別子である。この列候補テーブル2200は、たとえば、RAM303、磁気ディスク305、光ディスク307などの記憶装置によって実現される。
<<第1の列決定処理手順>>
つぎに、図21に示したステップS2105の第1の列決定処理手順について説明する。図23は、第1の列決定処理手順の一例を示すフローチャートである。図23のフローチャートにおいて、まず、算出部609により、「j=1」として(ステップS2301)、列管理テーブル1100を参照して、列Ljの最後尾位置Pjを特定する(ステップS2302)。
このあと、算出部609により、カゴBiの位置p(i)と列Ljの最後尾位置Pjの距離Dijを算出する(ステップS2303)。そして、算出部609により、jをインクリメントして(ステップS2304)、「j>m」か否かを判断する(ステップS2305)。ここで、「j≦m」の場合(ステップS2305:No)、ステップS2302に戻る。
一方、「j>m」の場合(ステップS2305:Yes)、列決定部608により、行列L1〜Lmの中から距離Dijが最小となる列Ljを選択して(ステップS2306)、図21に示したステップS2106に移行する。これにより、距離Dijが最短となる行列Ljを、顧客が順番待ちしている行列として特定することができる。
<<第2の列決定処理手順>>
つぎに、図21に示したステップS2111の第2の列決定処理手順について説明する。図24は、第2の列決定処理手順の一例を示すフローチャートである。図24のフローチャートにおいて、まず、算出部609により、「k=1」として(ステップS2401)、列管理テーブル1100を参照して、列候補L(k)の最後尾から1番目、2番目のカゴの位置p(k1)、p(k2)を特定する(ステップS2402)。
ここで、位置p(k1)、p(k2)が特定された場合(ステップS2403:Yes)、算出部609により、上記式(3)を用いて、第1および第2の直線がなす角度θ(k)を表すcosθ(k)を算出する(ステップS2404)。なお、第1の直線とは、カゴBiの位置piと列候補L(k)の最後尾位置P(k)とを結ぶ直線である。また、第2の直線とは、列候補L(k)の最後尾から1番目のカゴの位置p(k1)と2番目のカゴの位置p(k1)とを結ぶ直線である。
そして、算出部609により、kをインクリメントして(ステップS2405)、「k>K」か否かを判断する(ステップS2406)。ここで、「k≦K」の場合(ステップS2406:No)、ステップS2402に戻る。
一方、「k>K」の場合(ステップS2406:Yes)、列決定部608により、複数の列候補L(1)〜L(K)の中から、cosθ(k)が最小となる列候補L(k)を選択する(ステップS2407)。そして、列決定部608により、複数の列候補L(k)が選択されたか否かを判断する(ステップS2408)。
ここで、複数の列候補L(k)が選択されなかった場合(ステップS2408:No)、列決定部608により、列管理テーブル1100の列候補L(k)のカゴリストにカゴBiを登録する(ステップS2409)。なお、列候補L(k)のカゴリストとは、列候補L(k)に対応する行列Ljのカゴリストである。
さらに、列決定部608により、列管理テーブル1100内の列候補L(k)の最後尾位置P(k)をカゴBiの位置p(i)に更新して(ステップS2410)、図21に示したステップS2109に移行する。なお、最後尾位置P(k)とは、列候補L(k)に対応する行列Ljの最後尾位置Pjである。
また、ステップS2408において、複数の列候補L(k)が選択された場合(ステップS2408:Yes)、列決定部608により、複数の列候補L(k)をkが昇順となるようにソートして列候補テーブル2200に登録する(ステップS2411)。そして、列決定部608により、第3の列決定処理を実行して(ステップS2412)、図21に示したステップS2109に移行する。
また、ステップS2403において、位置p(k1)、p(k2)が特定されなかった場合(ステップS2403:No)、列決定部608により、第3の列決定処理を実行して(ステップS2412)、図21に示したステップS2109に移行する。これにより、カゴBiの位置p(i)が行列の延長線上となる行列Ljを、顧客が順番待ちしている行列として特定することができる。
<<第3の列決定処理手順>>
つぎに、図24に示したステップS2412の第3の列決定処理手順について説明する。図25は、第3の列決定処理手順の一例を示すフローチャートである。図25のフローチャートにおいて、まず、算出部609により、カゴ情報テーブル1000を参照して、カゴBiの移動ベクトルv(i)を特定する(ステップS2501)。
ここで、移動ベクトルv(i)が特定された場合(ステップS2502:Yes)、算出部609により、「k=1」として(ステップS2503)、列管理テーブル1100を参照して、列候補L(k)の最後尾位置P(k)を特定する(ステップS2504)。
そして、算出部609により、上記式(3)を用いて、第1および第2の直線がなす角度θ(k)を表すcosθ(k)を算出する(ステップS2505)。なお、第1の直線とは、カゴBiの位置piと列候補L(k)の最後尾位置P(k)とを結ぶ直線である。また、第2の直線とは、移動ベクトルv(i)から特定されるカゴBiの移動前の位置pi’と移動後の位置piとを結ぶ直線である。
つぎに、算出部609により、kをインクリメントして(ステップS2506)、「k>K」か否かを判断する(ステップS2507)。ここで、「k≦K」の場合(ステップS2507:No)、ステップS2504に戻る。
一方、「k>K」の場合(ステップS2507:Yes)、列決定部608により、複数の列候補L(1)〜L(K)の中から、cosθ(k)が最大となる列候補L(k)を選択する(ステップS2508)。そして、列決定部608により、複数の列候補L(k)が選択されたか否かを判断する(ステップS2509)。
ここで、複数の列候補L(k)が選択されなかった場合(ステップS2509:No)、列決定部608により、列管理テーブル1100内の列候補L(k)のカゴリストにカゴBiを登録する(ステップS2510)。さらに、列決定部608により、列管理テーブル1100内の列候補L(k)の最後尾位置P(k)をカゴBiの位置p(i)に更新して(ステップS2511)、図21に示したステップS2109に移行する。
また、ステップS2509において、複数の列候補L(k)が選択された場合(ステップS2509:Yes)、列決定部608により、複数の列候補L(k)をkが昇順となるようにソートして列候補テーブル2200に登録する(ステップS2512)。そして、列決定部608により、第4の列決定処理を実行して(ステップS2513)、図21に示したステップS2109に移行する。
また、ステップS2502において、移動ベクトルv(i)が特定されなかった場合(ステップS2502:No)、列決定部608により、第4の列決定処理を実行して(ステップS2513)、図21に示したステップS2109に移行する。これにより、顧客の移動方向を考慮して、顧客が順番待ちしている行列Ljを特定することができる。
<<第4の列決定処理手順>>
つぎに、図25に示したステップS2513の第4の列決定処理手順について説明する。図26は、第4の列決定処理手順の一例を示すフローチャートである。図26のフローチャートにおいて、まず、算出部609により、「k=1」として(ステップS2601)、列管理テーブル1100を参照して、列候補L(k)の精算速度f(k)を特定する(ステップS2602)。なお、精算速度f(k)とは、列候補L(k)に対応する行列Ljの精算速度f(j)である。
このあと、算出部609により、列管理テーブル1100を参照して、列候補L(k)のカゴリストに含まれるカゴB(1)〜B(n)を特定する(ステップS2603)。なお、カゴB(1)〜B(n)とは、列候補テーブル2200内の列候補L(k)に対応する行列Ljのカゴリストに含まれるカゴ群である。
つぎに、算出部609により、カゴ情報テーブル1000を参照して、カゴB(1)〜B(n)の商品点数s(1)〜s(n)を特定する(ステップS2604)。なお、商品点数s(1)〜s(n)とは、列候補L(k)に対応する行列Ljのカゴリストに含まれるカゴ群の商品点数である。
そして、算出部609により、上記式(1)を用いて、商品点数s(1)〜s(n)の総商品点数S(k)を算出する(ステップS2605)。このあと、算出部609により、上記式(2)を用いて、列候補L(k)の待ち時間T(k)を算出する(ステップS2606)。つぎに、算出部609により、kをインクリメントして(ステップS2607)、「k>K」か否かを判断する(ステップS2608)。
ここで、「k≦K」の場合(ステップS2608:No)、ステップS2602に戻る。一方、「k>K」の場合(ステップS2608:Yes)、列決定部608により、複数の列候補L(1)〜L(K)の中から、待ち時間T(k)が最小となる列候補L(k)を選択する(ステップS2609)。
そして、列決定部608により、複数の列候補L(k)が選択されたか否かを判断する(ステップS2610)。ここで、複数の列候補L(k)が選択されなかった場合(ステップS2610:No)、列決定部608により、列管理テーブル1100内の列候補L(k)のカゴリストにカゴBiを登録する(ステップS2611)。
さらに、列決定部608により、列管理テーブル1100内の列候補L(k)の最後尾位置P(k)をカゴBiの位置p(i)に更新して(ステップS2612)、図21に示したステップS2109に移行する。
また、ステップS2610において、複数の列候補L(k)が選択された場合(ステップS2610:Yes)、列決定部608により、選択された複数の列候補L(k)の中から任意の列候補L(k)を選択して(ステップS2613)、ステップS2611に移行する。これにより、待ち時間Tjの最も短い行列Ljを、顧客が順番待ちしている行列として特定することができる。
<待ち時間算出処理手順>
つぎに、図19に示したステップS1907の待ち時間算出処理手順について説明する。図27は、待ち時間算出処理手順の一例を示すフローチャートである。図27のフローチャートにおいて、まず、待ち時間算出部610により、「j=1」として(ステップS2701)、列管理テーブル1100を参照して、行列Ljの精算速度fjを特定する(ステップS2702)。
このあと、待ち時間算出部610により、列管理テーブル1100を参照して、行列Ljのカゴリストに含まれるカゴB(1)〜B(n)を特定する(ステップS2703)。なお、カゴB(1)〜B(n)とは、行列Ljのカゴリストに含まれるカゴ群である。
つぎに、待ち時間算出部610により、カゴ情報テーブル1000を参照して、カゴB(1)〜B(n)の商品点数s(1)〜s(n)を特定する(ステップS2704)。なお、商品点数s(1)〜s(n)とは、行列Ljのカゴリストに含まれるカゴ群の商品点数である。
そして、待ち時間算出部610により、上記式(1)を用いて、商品点数s(1)〜s(n)の総商品点数Sjを算出する(ステップS2705)。このあと、待ち時間算出部610により、上記式(2)を用いて、行列Ljの待ち時間Tjを算出して(ステップS2706)、待ち時間テーブル1200に待ち時間Tjを登録する(ステップS2707)。
つぎに、待ち時間算出部610により、jをインクリメントして(ステップS2708)、「j>m」か否かを判断する(ステップS2709)。ここで、「j≦m」の場合(ステップS2709:No)、ステップS2702に戻る。一方、「j>m」の場合(ステップS2709:Yes)、図19に示したステップS1908に移行する。これにより、店舗内に形成される行列Ljごとの待ち時間Tjを正確に予測することができる。
なお、上述した説明では、第1〜第4の列決定処理を実行した結果、複数の列候補L(k)が存在する場合、図26に示したステップS2613において任意の列候補L(k)を選択することにしたが、これに限らない。以下、未決定のカゴBiが順番待ちしている行列Ljを決定する第5の列決定処理について説明する。
図28は、列決定例を示す説明図(その5)である。図28において、第1〜第4の列決定処理を実行した結果、カゴB1の列候補L(k)として、行列Lxと行列Lyが残っている(図28中(1))。この場合、列決定部608が、未決定のカゴB1を図29に示す未決定リストテーブル2900に登録する(たとえば、ステップS2613)。
図29は、未決定リストテーブルの記憶内容の一例を示す説明図である。図29において、未決定リストテーブル2900は、未決定カゴIDおよび列候補IDのフィールドを有し、各フィールドに情報を設定することで、未決定リスト(たとえば、未決定リスト2900−1)をレコードとして記憶している。
ここで、未決定カゴIDとは、順番待ちしている行列Ljが決定されていない未決定のカゴBiを識別する識別子である。列候補IDとは、カゴBiが順番待ちしている列候補L(k)を識別する識別子である。未決定リストテーブル2900は、たとえば、RAM303、磁気ディスク305、光ディスク307などの記憶装置によって実現される。
図28において、列決定部608が、カゴB1を未決定リストテーブル2900に登録したあと、カゴB2が順番待ちしている行列Ljとして行列Lyを決定している(図28中(2))。この場合、列決定部608が、カゴB1の未決定リスト2900−1の列候補IDの中から行列Lyを削除する。
図28において、未決定リスト2900−1の列候補IDの中から行列Lyが削除された結果、列候補IDが行列Lxの1つとなったため、列決定部608が、カゴB1が順番待ちしている行列Ljを行列Lxに決定する(図28中(3))。これは、カゴB2が行列Lyに並んだということは、その前のカゴB1が行列Lyとは異なる行列Lxに並んだ可能性が高いという前提に基づく処理である。
<第5の列決定処理手順>
つぎに、上述した第5の列決定処理手順について説明する。この第5の列決定処理は、たとえば、図21に示したステップS2108のあとに実行される。図30は、第5の列決定処理手順の一例を示すフローチャートである。
図30のフローチャートにおいて、まず、列決定部608により、未決定リストテーブル2900の中から、列候補IDに列Ljを含む未決定リストを検索する(ステップS3001)。ここで、未決定リストが検索されなかった場合(ステップS3002:No)、ステップS3001に戻る。
一方、未決定リストが検索された場合(ステップS3002:Yes)、列決定部608により、検索された未決定リストの列候補IDから列Ljを削除する(ステップS3003)。そして、列決定部608により、未決定リストの列候補IDが一つとなったか否かを判断する(ステップS3004)。ここで、列候補IDが複数の場合(ステップS3004:No)、ステップS3001に戻る。
一方、列候補IDが一つとなった場合(ステップS3004:Yes)、列決定部608により、列管理テーブル1100の列候補L(k)のカゴリストにカゴBiを登録する(ステップS3005)。そして、列決定部608により、未決定リストテーブル2900の中から、検索された未決定リストを削除して(ステップS3006)、列候補L(k)を列Ljとして(ステップS3007)、ステップS3001に戻る。
<領域設定処理手順>
つぎに、撮影画像上での監視領域ARを設定する領域設定処理手順について説明する。図31は、領域設定処理手順の一例を示すフローチャートである。図31のフローチャートにおいて、まず、設定部606により、カゴ情報テーブル1000の記憶内容が更新されたか否かを判断する(ステップS3101)。
ここで、更新されるのを待って(ステップS3101:No)、更新された場合(ステップS3101:Yes)、設定部606により、監視領域ARをレジR1〜Rmの位置を基準として行列L1〜Lmの最後尾に向かって間隔Hで区切る(ステップS3102)。なお、レジR1〜Rmの位置は、たとえば、予め設定された初期位置P10〜Pm0である。
このあと、設定部606により、カゴ情報テーブル1000を参照して、各区間r(1)〜r(n)に含まれるカゴ数X(1)〜X(n)を算出する(ステップS3103)。なお、区間r(1)〜r(n)は、監視領域ARを間隔Hで区切って分割された区間である。
そして、設定部606により、区間r(n)のカゴ数X(n)が「0」より大きいか否かを判断する(ステップS3104)。ここで、「X(n)>0」の場合(ステップS3104:Yes)、設定部606により、監視領域ARを拡張して(ステップS3105)、本フローチャートによる一連の処理を終了する。
一方、「X(n)=0」の場合(ステップS3104:No)、設定部606により、「n>1」か否かを判断する(ステップS3106)。ここで、「n=1」の場合(ステップS3106:No)、本フローチャートによる一連の処理を終了する。一方、「n>1」の場合(ステップS3106:Yes)、「X(n)=X(n−1)=0」か否かを判断する(ステップS3107)。
ここで、「X(n)=X(n−1)≠0」の場合(ステップS3107:No)、本フローチャートによる一連の処理を終了する。一方、「X(n)=X(n−1)=0」の場合(ステップS3107:Yes)、設定部606により、監視領域ARを縮小して(ステップS3108)、本フローチャートによる一連の処理を終了する。これにより、店舗内の混雑度に応じて監視領域ARの大きさを動的に設定することができる。
以上説明したように、本実施の形態によれば、複数の行列L1〜Lmの中から顧客が並んでいる行列Ljを適切に特定することができる。これにより、行列Ljごとの待ち時間Tjを予測して、顧客に提供することができる。
また、本実施の形態において、監視領域AR内に進入した顧客のカゴBiの位置p(i)と各行列Ljの最後尾位置Pjとの距離Dijに基づいて、顧客が順番待ちしている行列Ljを決定することにしてもよい。これにより、たとえば、距離Dijが最短となる行列Ljを、顧客が順番待ちしている行列として特定することができる。
また、本実施の形態において、カゴBiの位置p(i)と行列Ljの最後尾位置Pjとを結ぶ第1の直線と、カゴ群B1〜Bnから選ばれた二つのカゴの位置を結ぶ第2の直線とがなす角度θjに基づいて、顧客が順番待ちしている行列Ljを決定することにしてもよい。これにより、カゴBiの位置p(i)が行列の延長線上となる行列Ljを、顧客が順番待ちしている行列として特定することができる。
また、本実施の形態において、カゴBiの位置p(i)と行列Ljの最後尾位置Pjとを結ぶ第1の直線と、カゴBiの移動ベクトルv(i)から特定される第2の直線とがなす角度θjに基づいて、顧客が順番待ちしている行列Ljを決定することにしてもよい。これにより、顧客の移動方向を考慮して、顧客が順番待ちしている行列Ljを特定することができる。
また、本実施の形態において、各行列Ljの総商品点数Sjに基づいて、顧客が順番待ちしている行列Ljを決定することにしてもよい。これにより、待ち時間Tjの最も短い行列Ljを、顧客が順番待ちしている行列として特定することができる。
また、本実施の形態において、カゴBxのあとに監視領域AR内に進入した他のカゴBy(x≠y)が順番待ちしている行列Lyとは異なる他の行列Lxを、顧客が順番待ちしている行列Ljを決定することにしてもよい。
また、本実施の形態において、顧客が順番待ちしている行列Ljが特定された結果、その行列Ljの最後尾位置Pjを、顧客のカゴBiの位置p(i)とすることにより、各行列Ljの最後尾位置Pjを適切に更新することができる。
また、本実施の形態において、監視領域ARを撮影した撮影画像の中から、検知装置TMの発光部503によって発せられた発光箇所を検出することにより、カゴBiの位置p(i)を正確に取得することができる。
また、本実施の形態において、商品点数情報が発光部503による発光と同時に送信されることを利用して、発光箇所が検出された撮影画像と商品点数情報とを関連付けることにより、カゴBiの位置p(i)と商品点数s(i)を適切に対応付けることができる。
また、本実施の形態において、監視領域AR内の顧客密度に基づいて、監視領域ARを拡張または縮小することにより、店舗内の混雑度に応じて監視領域ARの大きさを動的に設定することができる。
このように、本情報提供プログラム、および情報提供装置によれば、店舗内に形成される非固定的な複数の行列L1〜Lmの中から顧客が並んでいる行列Ljを適切に特定することができる。また、各行列Ljに属するカゴBiの商品点数s(i)から待ち時間Tjを算出するため、行列Ljの長さから待ち時間を予測する場合に比べて、行列Ljの待ち時間Tjを正確に求めることができる。
なお、本実施の形態で説明した情報提供方法は、予め用意されたプログラムをパーソナル・コンピュータやワークステーション等のコンピュータで実行することにより実現することができる。本情報提供プログラムは、ハードディスク、フレキシブルディスク、CD−ROM、MO、DVD等のコンピュータで読み取り可能な記録媒体に記録され、コンピュータによって記録媒体から読み出されることによって実行される。また本情報提供プログラムは、インターネット等のネットワークを介して配布してもよい。
上述した実施の形態に関し、さらに以下の付記を開示する。
(付記1)監視領域内で順番待ちしている顧客の行列ごとに、当該行列の最後尾位置を記憶するデータベースにアクセス可能なコンピュータを、
前記監視領域内に進入した対象顧客の位置を取得する取得手段、
前記取得手段によって取得された対象顧客の位置と、前記データベース内の前記各行列の最後尾位置との距離を算出する算出手段、
前記算出手段によって算出された算出結果に基づいて、前記監視領域内の複数の行列から、前記対象顧客が順番待ちしている行列を決定する決定手段、
前記決定手段によって決定された決定結果を出力する出力手段、
として機能させることを特徴とする情報提供プログラム。
(付記2)前記データベースは、さらに、前記行列に属する顧客群の各顧客の位置を記憶しており、
前記算出手段は、前記行列ごとに、前記対象顧客の位置と前記データベース内の前記行列の最後尾位置とを結ぶ第1の直線と、前記データベース内の前記顧客群から選ばれた一の顧客の位置と他の顧客の位置とを結ぶ第2の直線と、がなす角度を算出することを特徴とする付記1に記載の情報提供プログラム。
(付記3)前記データベースは、さらに、前記監視領域内で前記対象顧客が移動した際の移動ベクトルを記憶しており、
前記算出手段は、前記行列ごとに、前記対象顧客の位置と前記データベース内の前記行列の最後尾位置とを結ぶ第1の直線と、前記データベース内の前記対象顧客の移動ベクトルに平行な第3の直線と、がなす角度を算出することを特徴とする付記1または2に記載の情報提供プログラム。
(付記4)前記データベースは、さらに、前記顧客が商品を収容するために利用する容器に収容されている前記商品の商品点数を記憶しており、
前記算出手段は、前記行列ごとに、前記データベース内の前記行列に属する顧客群の容器に収容されている商品の商品点数の合計を算出することを特徴とする付記1〜3のいずれか一つに記載の情報提供プログラム。
(付記5)前記決定手段は、前記対象顧客のあとに前記監視領域内に進入した他の顧客が順番待ちしている行列を決定する決定結果に基づいて、前記対象顧客が順番待ちしている行列を決定することを特徴とする付記1〜4のいずれか一つに記載の情報提供プログラム。
(付記6)前記コンピュータを、
前記データベース内の各行列の最後尾位置のうち、前記決定手段によって決定された対象顧客が順番待ちしている行列の最後尾位置を前記対象顧客の位置に更新する更新手段として機能させることを特徴とする付記1〜5のいずれか一つに記載の情報提供プログラム。
(付記7)前記コンピュータを、
前記監視領域を撮影した画像の中から、前記対象顧客が商品を収容するために利用する容器に設けられた検知装置の発光手段によって発せられた発光箇所を検出する検出手段として機能させ、
前記取得手段は、前記検出手段によって検出された発光箇所を前記対象顧客の位置として取得することを特徴とする付記1〜6のいずれか一つに記載の情報提供プログラム。
(付記8)前記コンピュータを、
前記発光手段の発光と同期させて前記検知装置から送信される前記容器に収容された商品の商品点数を受信する受信手段、
前記検出手段によって発光箇所が検出された画像のうち、前記受信手段によって受信された商品点数の受信時刻と撮影時刻が一致する画像を当該商品点数と関連付ける関連付け手段、
前記関連付け手段によって関連付けられた関連付け結果に基づいて、前記決定手段によって決定された対象顧客が順番待ちしている行列の待ち時間を算出する待ち時間算出手段として機能させ、
前記出力手段は、前記待ち時間算出手段によって算出された行列の待ち時間を出力することを特徴とする付記7に記載の情報提供プログラム。
(付記9)前記コンピュータを、
前記監視領域内の前記顧客の密度に基づいて、前記監視領域の範囲を設定する設定手段として機能させ、
前記取得手段は、前記設定手段によって設定された監視領域内に進入した対象顧客の位置を取得することを特徴とする付記1〜8のいずれか一つに記載の情報提供プログラム。
(付記10)監視領域内に進入した対象顧客の位置を取得する取得手段と、
前記取得手段によって取得された対象顧客の位置と、前記監視領域内で順番待ちしている顧客の行列ごとの最後尾位置を記憶するデータベース内の前記各行列の最後尾位置との距離を算出する算出手段と、
前記算出手段によって算出された算出結果に基づいて、前記監視領域内の複数の行列から、前記対象顧客が順番待ちしている行列を決定する決定手段と、
前記決定手段によって決定された決定結果を出力する出力手段と、
を備えることを特徴とする情報提供装置。