註:質問に対する直接的な回答ではありません。
__修正依頼のやり取りを元に下記の回答をしています。
監視カメラで人物を追跡する際、このような制約があるとします。
- 人物の検出ミスが起きえない
- 人物が撮影範囲外に移動しない
- 人物が監視カメラ上で重ならず、近づくこともない
ほとんどあり得ない状況ですが、そうするとこのように座標を管理できます。
疑似コード
Python
1# 上記制約によりret_listの長さは毎回同じで、対応する人物の順序も同じ
2def find_humans(frame):
3 ret_list = []
4 ...
5
6 for human in found_humans:
7 ret_list.append(human.x, human.y)
8
9 ...
10 return ret_list
11
12def main():
13 ...
14
15 coordinate_list = []
16 while カメラが動いている:
17 ...
18
19 coordinate_list.append(find_humans(frame))
20 ...
21
22 ...
23
24 # 人物01の軌跡
25 track_coord_01 = coordinate_listの0列目のスライス
こんな感じですかね。
ただ、兎にも角にも制約が多くて、全く想定通りには働かないでしょう。
例えばCNNを用いて人物再同定を可能にすると、上記制約がかなりましになります。
- 人物が監視カメラ上で重ならず、近づくこともない
疑似コード
Python
1def find_humans(...):
2 上記とほぼ同じ
3
4def check_human_id(座標):
5 ...
6
7 return human_id
8
9def main():
10 ...
11
12 coordinate_dict = {}
13 while カメラが動いている:
14 ...
15
16 for human in find_human(frame):
17 id = check_human_id(座標)
18 if id in coordinate_dict:
19 coordinate_dict[id].append(座標)
20 else:
21 coordinate_dict[id] = [座標]
22 ...
23
24 ...
25
26 # 人物01の軌跡
27 track_coord_01 = coordinate_dict[01]
ですので、人物の識別同定が出来るのはほぼ必須だと思います。
このままの方法で試してみても勉強にはなるでしょうが、非常に学習効率が悪いかと。
やはりOpenCVの機能でトラッキングするのが無難だと思います。
結論としては、おそらく無駄だし、やりきるにしては考察不足/実力不足ですかね。
ついでに
コードを拝見する限り、そもそもPythonの基礎知識が足りていないようです。
そちらの勉強も並行して進めるようにしてください。
本筋から逸れるので解説はしませんが、次のような点で不適です。
- listの名前をシャドウイングしている
- タプルあるいはクラスで構造化出来そうなデータを生で扱っている
- おそらく無駄なループの仕方をしている
- グローバル変数が当たり前のように存在し、しかも型が不明
- 変数の名前から役割が想像できない
- そもそもPythonではif文の条件式をカッコでくるまなくてよい
- 適切に関数化していない結果ネストが深くなっている
- 質問のやり取りを見る限り、おそらくご自身でもいまいち挙動がわかっていない
コードを見ているとよくないC言語の香りがします。
C言語を適切に扱えないまま、その流儀をPythonに持ち込んでわけがわからなくなっているのでは。