modify byte.trackerupdate, add list first_finded

This commit is contained in:
王庆刚
2024-05-25 18:35:53 +08:00
parent d6f3693d3f
commit dff029de20
17 changed files with 132 additions and 80 deletions

Binary file not shown.

View File

@ -216,7 +216,7 @@ class Track:
trajdist_min, trajdist_max,
trajlen_rate, trajdist_rate]
def compute_static_fids(self, det_y, STATIC_THRESH = 8):
def pt_state_fids(self, det_y, STATIC_THRESH = 8):
'''
前摄时y一般选择为 box 的 y1 坐标,且需限定商品在购物车内。
inputs
@ -324,12 +324,15 @@ class doTracks:
for t_id in self.trackID:
# print(f"The ID is: {t_id}")
idx = np.where(track_ids == t_id)[0]
box = self.bboxes[idx, :]
box = self.bboxes[idx, :]
assert len(set(box[:, 7])) == len(box), "Please check!!!"
lboxes.append(box)
return lboxes
'''
def classify(self):
tracks = self.tracks
@ -354,10 +357,11 @@ class doTracks:
self.Static.extend(static_tracks)
'''剔除静止目标后的 tracks'''
# 剔除静止目标后的 tracks
tracks = self.sub_tracks(tracks, static_tracks)
return tracks
'''

View File

@ -51,41 +51,29 @@ class doBackTracks(doTracks):
# return lboxes
# =============================================================================
def classify(self):
'''
功能:对 tracks 中元素分类
'''
tracks = super().classify()
# tracks = self.tracks
# shopcart = self.shopcart
'''功能:对 tracks 中元素分类 '''
# # 提取手的frame_id并和动目标的frame_id 进行关联
# hand_tracks = [t for t in tracks if t.cls==0]
# self.Hands.extend(hand_tracks)
# tracks = self.sub_tracks(tracks, hand_tracks)
tracks = self.tracks
# 提取手的frame_id并和动目标的frame_id 进行关联
hand_tracks = [t for t in tracks if t.cls==0]
self.Hands.extend(hand_tracks)
# # 提取小孩的track并计算状态left, right, incart
# kid_tracks = [t for t in tracks if t.cls==9]
# kid_states = [self.kid_state(t) for t in kid_tracks]
# self.Kids = [x for x in zip(kid_tracks, kid_states)]
# tracks = self.sub_tracks(tracks, kid_tracks)
tracks = self.sub_tracks(tracks, hand_tracks)
# 提取小孩的track并计算状态left, right, incart
kid_tracks = [t for t in tracks if t.cls==9]
kid_states = [self.kid_state(t) for t in kid_tracks]
self.Kids = [x for x in zip(kid_tracks, kid_states)]
tracks = self.sub_tracks(tracks, kid_tracks)
# static_tracks = [t for t in tracks if t.frnum>1 and t.is_static()]
# self.Static.extend(static_tracks)
# '''剔除静止目标后的 tracks'''
# tracks = self.sub_tracks(tracks, static_tracks)
static_tracks = [t for t in tracks if t.frnum>1 and t.is_static()]
self.Static.extend(static_tracks)
'''剔除静止目标后的 tracks'''
tracks = self.sub_tracks(tracks, static_tracks)
'''购物框边界外具有运动状态的干扰目标'''
out_trcak = [t for t in tracks if t.is_OutTrack()]

View File

@ -31,7 +31,7 @@ class backTrack(Track):
'''运动点帧索引(运动帧两端的静止帧索引)'''
self.moving_index = self.compute_dynamic_fids()
self.static_dynamic_fids = self.compute_static_dynamic_fids()
# self.static_index, self.moving_index = self.compute_static_dynamic_fids()
'''该函数依赖项: self.cornpoints定义 4 个商品位置变量:
self.Cent_isIncart, self.LB_isIncart, self.RB_isIncart
@ -250,13 +250,35 @@ class backTrack(Track):
return moving_index
def compute_static_dynamic_fids(self):
static_dynamic_fids = []
for traj in self.trajectory:
static, dynamic = self.compute_static_fids(traj)
idx2 = self.trajlens.index(min(self.trajlens))
trajmin = self.trajectory[idx2]
static, dynamic = self.pt_state_fids(trajmin)
static = np.array(static)
dynamic = np.array(dynamic)
if static.size:
indx = np.argsort(static[:, 0])
static = static[indx]
if dynamic.size:
indx = np.argsort(dynamic[:, 0])
dynamic = dynamic[indx]
static_dynamic_fids.append((static, dynamic))
return static_dynamic_fids
return static, dynamic
# =============================================================================
# static_dynamic_fids = []
# for traj in self.trajectory:
# static, dynamic = self.pt_state_fids(traj)
# static_dynamic_fids.append((static, dynamic))
#
# return static_dynamic_fids
# =============================================================================
@ -270,6 +292,10 @@ class backTrack(Track):
trajlen_rate, trajdist_rate]
'''
# print(f"TrackID: {self.tid}")
boxes = self.boxes
condt1 = self.feature[5] < 0.2 or self.feature[3] < 120
'''静态情况 2: 目标初始状态为静止,适当放宽关键点最小相对运动轨迹 < 0.5'''

View File

@ -31,8 +31,8 @@ class frontTrack(Track):
'''y1、y2静止状态区间值是 boxes 中对 axis=0 的索引,不是帧索引'''
det_y1 = np.diff(boxes[:, 1], axis=0)
det_y2 = np.diff(boxes[:, 3], axis=0)
self.static_y1, self.dynamic_y1 = self.compute_static_fids(det_y1)
self.static_y2, self.dynamic_y2 = self.compute_static_fids(det_y2)
self.static_y1, self.dynamic_y1 = self.pt_state_fids(det_y1)
self.static_y2, self.dynamic_y2 = self.pt_state_fids(det_y2)
self.isCornpoint = self.is_left_or_right_cornpoint()
self.isBotmpoint = self.is_bottom_cornpoint()

View File

@ -90,7 +90,7 @@ def have_tracked():
k = 0
gt = Profile()
for filename in os.listdir(trackdict):
filename = 'test_20240402-173935_6920152400975_front_174037379.pkl'
filename = 'test_20240402-173935_6920152400975_back_174037372.pkl'
file, ext = os.path.splitext(filename)
filepath = os.path.join(trackdict, filename)
TracksDict = np.load(filepath, allow_pickle=True)
@ -121,9 +121,9 @@ def have_tracked():
# k += 1
# if k==1:
# break
k += 1
if k==1:
break
if len(alltracks):
drawFeatures(alltracks, save_dir)

View File

@ -214,6 +214,8 @@ class BYTETracker:
refind_stracks = []
lost_stracks = []
removed_stracks = []
first_finded = []
scores = results.conf
cls = results.cls
@ -328,6 +330,9 @@ class BYTETracker:
continue
track.activate(self.kalman_filter, self.frame_id)
activated_stracks.append(track)
first_finded.append(track)
# Step 5: Update state
for track in self.lost_stracks:
if self.frame_id - track.end_frame > self.max_time_lost:
@ -359,7 +364,7 @@ class BYTETracker:
for x in self.tracked_stracks if x.is_activated]
output2 = [x.tlwh_to_tlbr(x._tlwh).tolist() + [x.track_id, x.score, x.cls, x.frame_id, x.idx]
for x in activated_stracks if x.first_find]
for x in first_finded if x.first_find]
output = np.asarray(output1+output2, dtype=np.float32)

View File

@ -11,6 +11,7 @@ import matplotlib.pyplot as plt
from sklearn.decomposition import PCA
from utils.annotator import TrackAnnotator
from utils.plotting import colors
from pathlib import Path
def plot_frameID_y2(vts):
@ -88,14 +89,18 @@ def draw_all_trajectories(vts, edgeline, save_dir, filename):
# =============================================================================
# '''1. tracks 5点轨迹'''
# trackpth = save_dir.parent /Path("trajectory")/ Path(f"{file}")
# if not trackpth.exists():
# trackpth.mkdir(parents=True, exist_ok=True)
# for track in vts.tracks:
# if track.cls != 0:
# img = edgeline.copy()
# img = draw5points(track, img)
# pth = save_dir.joinpath(f"{file}_{track.tid}.png")
# cv2.imwrite(pth, img)
# # if track.cls != 0:
# img = edgeline.copy()
# img = draw5points(track, img)
#
# pth = trackpth.joinpath(f"{track.tid}.png")
# cv2.imwrite(str(pth), img)
#
# =============================================================================
'''2. all tracks 中心轨迹'''
img1, img2 = edgeline.copy(), edgeline.copy()