From 5109400a572be830d13ca87689bb06487303e5f3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E5=BA=86=E5=88=9A?= Date: Tue, 6 Aug 2024 20:00:29 +0800 Subject: [PATCH] update for bakeup --- .../contrast_analysis.cpython-39.pyc | Bin 9467 -> 9203 bytes tracking/contrast_analysis.py | 122 ++++---- .../__pycache__/dotracks.cpython-39.pyc | Bin 13178 -> 13661 bytes .../__pycache__/dotracks_back.cpython-39.pyc | Bin 5782 -> 5972 bytes .../__pycache__/dotracks_front.cpython-39.pyc | Bin 4675 -> 4851 bytes .../__pycache__/track_back.cpython-39.pyc | Bin 6232 -> 6232 bytes tracking/dotrack/dotracks.py | 37 ++- tracking/dotrack/dotracks_back.py | 6 + tracking/dotrack/dotracks_front.py | 3 + tracking/dotrack/track_back.py | 3 + tracking/feat_select.py | 282 +++++++++--------- tracking/module_analysis.py | 264 +++++++++------- .../__pycache__/annotator.cpython-39.pyc | Bin 2042 -> 2074 bytes .../__pycache__/drawtracks.cpython-39.pyc | Bin 8968 -> 8876 bytes .../__pycache__/read_data.cpython-39.pyc | Bin 4952 -> 5091 bytes tracking/utils/annotator.py | 4 + tracking/utils/drawtracks.py | 31 +- tracking/utils/read_data.py | 34 ++- tracking/utils/videot.py | 63 ++-- 19 files changed, 497 insertions(+), 352 deletions(-) diff --git a/tracking/__pycache__/contrast_analysis.cpython-39.pyc b/tracking/__pycache__/contrast_analysis.cpython-39.pyc index b5f51c69fac5fe544678989be4a5af7b20b1ede9..4e6fcdbf90faf6116b740422be2540e7252569ff 100644 GIT binary patch delta 3385 zcmbVOYit}>6`nhf-P!f-dUxZu<9L&lHk+o7omca2Nb_h)QbJRSGBlZv_s*`Tp4r{p z87DT3*;F=ZQA3(^3Po*I90?&@p`@zSAksAO2arHQ2*D5L2bBPO(_e|izrYX9xf`#8 zMgOpmbMHO(obR5;+;iq%NB(&@Wh9ev0Y1O^<81NR-pi?#wZFlN3YtI(6>Xx4e3Uea zkFuulG2%oul{92xS`2uS9d}x^7AK)4?(>sc(oDXTnrWr-6~cLnopv%>#>r|~XN9(c z^CEVe)2_9{JWADRL92Dp7>&cEleW+Vj9oNIQ!sYZR+@&fhh}IN#$MV_+i3eV(N@wN z?Vz17>!V$?8}?Sw9@-0IKV3=tV9c4T>8eqY{nhNB65uHDgpgl7_A~G_{vpz`;=e_#HSLR;-a4lB^T-`Nov)~O>Cvx?-r|VbG z&0qL_{X4IM1R(z7lk*F2UR${E^8Bs$>ld%xzIvs8^{qRP+`KUV^Xs>71@o`mSUC4F zs8!j*J0I3>{30ITXN-9x6}B@s;lzW7$+v@&d|mvE1pP{-GX>7DRv@8Nv`V35jJvY} z>kjJD*0}19RL(wSxn6JZvC>C+gTE+uNjCUxWc@Qa)R3#pEQFFb;<8SJ>28u9+)ksq z4kCta>nQpta9uo55ECQ|UzNngw8930{n0n$*zN>bTUBOJOpX{FdWo*4Dg+veTv^=w^dFZUjh5#ZY zR-S|r%PG0~;IiX=JZD>QI&o@AjqL|!Q)6hEMvZHrL@M~VxT>bORon8|cHo4PRrW&p zrHWM!rNWs_cqTlWlB9Vkt!=YS5Y< zs9|D5Auq8PP;80pf#p5&7<&T7e5&D%;(E-gvZqn<5R$_{Le(r&_pAkZe+rio%SF@J zQ55(RlBTol%edr@w!`yjSS$=~rej14ew}^}Xm4iE^IF6z7b`XmWok?eY4V8U4zaI+ zo))*t)iF=UO(;T)Ifhpl;mbxs&}YUUg>1?6^g^ZVF~jwA45s_T;DgK&GCFrJ^QN>8 zeP-w&_fEr*qcJYb_z{EpH{^k8xfFcVzNa>da+pk}A>n?bqYVcmIEx~|sDu%798%$i zs$-0r6d=Qx3HQQeP>$F!l!#i+S!Q`=KFXN@5sIG&zg;A?q(ih$NQ}AL}Wi>9Xg7ko9trMtt&uO0 zlU+eu_l8 zZ}BtT!erLZ`T%-~u&gfvY|M`rMLf`#U=`;xc}Dc^>k;8}&Q}_8ezqv_{YXiyzFk1pgE8cd^Wr1YbC*P7rl@}$GE}pv7wixeX%PwwP)nvsARI+lx)Xg)7JqC4RGepNl zLj`dqiIW6;vl5PNVhU(lRLPpOn37W1p-Bq~&>CgKo^UO< z6kO};CFkdU*LR&fx>PT1L{OYj2swKZA$cFc7Q&7oIU2m*pKIqPFXena?raY}?eD0e zee5ehGmpu#YMsvg}8Y-Oqfb|$o{&Xx$h$dHU?|wt)e)S+wvgwjt zsZ?v2k97jRdk`7kjUc`dag2NyBt*rez&{1ChdhW0v5m0H!A#EGco{UHI$XrFmjz9B z46FPj1eReJaoHPl`&Y-wL+4=`#tx1b%&KQq%Arza@D7nz*fhd45*3u!bnvp#faNwT zh&VKhko+Z%$oLgSFe^paTZpRaItuA}o*cs8nlP&Cv{KOZFj{d3c>lq4!37x^^DH}5 zpmkLz8t*9?c(SW@#j~wpc=N5=!SC0$M6zhpvEb9SYa_fR?g-R}Hq^q-#a1+cFn|nt z9(1Ngqr_|6xX?V!8ZP-WijODb`NtqI3?F*~$)ff6;-l*i#BwQR>Tah($82-2D8Ngk qi}gZoQ6W1j+z1tdfMXj;$Z8tC5376Ct*Rd167N#KpekxYCI11&JxdAz delta 3488 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 diff --git a/tracking/dotrack/__pycache__/dotracks_front.cpython-39.pyc b/tracking/dotrack/__pycache__/dotracks_front.cpython-39.pyc index ddd487d0083fd167729d70c49236d26c50d27916..b734b93e2d54acfb80f6484ea35f50377172a5f5 100644 GIT binary patch delta 534 zcmYjLO=uHQ5Z-y)-S^D?Bms+EC{!C$v-DsQ{E6CvSX&XzL2se3EZL33CZ@c#LSd7O zVxxj!<}L|dylI=Oc=7JR<6Z>uA|5>GQN(#t!3Xord~fFa_}(A?QFcPd$!YXTi*K5b z_MC6b6~v~fbgJYxntJbQWJc_vmcpv`0D9&C?o5qXYK{T40gQ|k#_(9%)pnuDB2Jeg zW$F^NNGRPv`>TWK5bo(-IrpCzC%v9R%Ezn+DGVSmBkPvt+mrA59K+Y9gD;E)PadT# zK9lp*GOLvYO&Q0X?)?})86GSR`82xbQ#d>1^Z3@h4AmjugjL0!@seA&4-~;aiM>un z(j}<*9KY~m6|qK+H^?z7c4B!u4(`dYv6%$zZg(paH{+xgZHH}NU`ebv*1=MxsADLO zcopSmt8}8#4wIzS+&N4vso--lqcayKuf$6o>UiCrBW&9n=7N%(zz_DwDAQP*Bu<`* zGc@`j&*78&?94?)m;`EHO#)dZsL2cXF7H`a)W@=d75tn(1=n!8um~sdQehwZ__NTr sPOGKzmVN9MtF!0DlH^4FT*iYS>NbKPGwyD8wszz)ek}SF>{oI94;}f5lmGw# delta 438 zcmW-dO-my|5Qe8_GCe&>M#rq6fw)0UTn15O@!LcY{5V8BxTgi7iJ8d~j3)G~hp-a` z6^wYZ{(y1!=tXnc^NN3BU~gW;lL($X*lk0-UC-OyMOD9K?=n`=vZ9Ju+pq1ieq%kU zU522D2u+0lfJAGKx8O1oKpW1KQ{@!Os!Lq;ga+!eatxrjh9IS-NNR#haYsvLP3Z;j z;Sup(3m_nEwFv>Vfaz}Zo8rVeW+biRZ*mTk2y_V7BcISUCSdx5{^}$6-x!7^K`YTP zUh!F(dmh6&8MvUPw&4(L(813=yB`1Hv7fwH+VNSnR;!0})AK9tezEEp_>V54W%eb% zhcr=ev2OL5Oehw9u5bMY8hx2p(9MdPby$&Tv<^N~c8X z0H48mJJr7+LFFK}MW9n6$*H7kHR=U+qduw|MVQhCgq{5 o%@1)bF_)U56I_126AcZ<+**mTP~Y3%tv7fMj}ne(>^iab4yw6sKmY&$ diff --git a/tracking/dotrack/__pycache__/track_back.cpython-39.pyc b/tracking/dotrack/__pycache__/track_back.cpython-39.pyc index 4d0685baa8f95211d1bde89ee90fe9e0ba6b3f98..18a245e578436f28bb84e190c95457a89bf7fb5b 100644 GIT binary patch delta 52 zcmca%aKnH%k(ZZ?0SKhR*QZ5n 0.8 + + ''' 第1帧、最后一帧 boxes 四个角点间的距离 ''' + ptd = box2 - box1 + ptd1 = np.linalg.norm((ptd[0], ptd[1])) + ptd2 = np.linalg.norm((ptd[2], ptd[1])) + ptd3 = np.linalg.norm((ptd[0], ptd[3])) + ptd4 = np.linalg.norm((ptd[2], ptd[3])) + condtb = ptd1<50 and ptd2<50 and ptd3<50 and ptd4<50 + + condt = condta and condtb + return condt + + def extract_hand_features(self): assert self.cls == 0, "The class of traj must be HAND!" diff --git a/tracking/dotrack/dotracks_back.py b/tracking/dotrack/dotracks_back.py index bf17b07..c4a44e7 100644 --- a/tracking/dotrack/dotracks_back.py +++ b/tracking/dotrack/dotracks_back.py @@ -50,6 +50,12 @@ class doBackTracks(doTracks): tracks = self.sub_tracks(tracks, static_tracks) + tracks_free = [t for t in tracks if t.frnum>1 and t.is_freemove()] + self.FreeMove.extend(tracks_free) + tracks = self.sub_tracks(tracks, tracks_free) + + + # '''购物框边界外具有运动状态的干扰目标''' # out_trcak = [t for t in tracks if t.is_OutTrack()] # tracks = self.sub_tracks(tracks, out_trcak) diff --git a/tracking/dotrack/dotracks_front.py b/tracking/dotrack/dotracks_front.py index a4c7f54..05624da 100644 --- a/tracking/dotrack/dotracks_front.py +++ b/tracking/dotrack/dotracks_front.py @@ -45,6 +45,9 @@ class doFrontTracks(doTracks): '''剔除静止目标后的 tracks''' tracks = self.sub_tracks(tracks, static_tracks) + tracks_free = [t for t in tracks if t.frnum>1 and t.is_freemove()] + self.FreeMove.extend(tracks_free) + # [self.associate_with_hand(htrack, gtrack) for htrack in hand_tracks for gtrack in tracks] '''轨迹循环归并''' merged_tracks = self.merge_tracks_loop(tracks) diff --git a/tracking/dotrack/track_back.py b/tracking/dotrack/track_back.py index e7533fd..0a0f9b1 100644 --- a/tracking/dotrack/track_back.py +++ b/tracking/dotrack/track_back.py @@ -217,6 +217,9 @@ class backTrack(Track): return condt + + + def is_OutTrack(self): if self.posState <= 1: isout = True diff --git a/tracking/feat_select.py b/tracking/feat_select.py index 8430c79..4646938 100644 --- a/tracking/feat_select.py +++ b/tracking/feat_select.py @@ -2,6 +2,8 @@ """ Created on Sat Jul 27 14:07:25 2024 +现场测试数据,在不同特征组合情况下的精度、召回率分析程序 + @author: ym """ import os.path @@ -13,7 +15,8 @@ sys.path.append(r"D:\DetectTracking") from tracking.utils.read_data import extract_data, read_deletedBarcode_file, read_tracking_output from tracking.dotrack.dotracks import Track -from tracking.contrast_analysis import performance_evaluate, compute_recall_precision, show_recall_prec +from tracking.contrast_analysis import compute_recall_precision, show_recall_prec +from tracking.contrast_analysis import performance_evaluate def compute_similar(feat1, feat2): @@ -25,10 +28,6 @@ def compute_similar(feat1, feat2): return smean - - - - def update_event(datapath): '''一次购物事件,包含 8 个keys''' @@ -47,6 +46,38 @@ def update_event(datapath): event['feats_compose'] = np.empty((0, 256), dtype=np.float64) event['feats_select'] = np.empty((0, 256), dtype=np.float64) + + # '''读取 track.data 文件中的数据''' + # fpath_0_track = os.path.join(datapath, '0_track.data') + # fpath_1_track = os.path.join(datapath, '1_track.data') + # if os.path.exists(fpath_0_track) and os.path.isfile(fpath_0_track): + # _, _, _, _, tracking_boxes, tracking_feat_dict = extract_data(fpath_0_track) + # event['back_tracking_boxes'] = tracking_boxes + # event['back_tracking_feats'] = tracking_feat_dict + + # if os.path.exists(fpath_1_track) and os.path.isfile(fpath_1_track): + # _, _, _, _, tracking_boxes, tracking_feat_dict = extract_data(fpath_1_track) + # event['front_tracking_boxes'] = tracking_boxes + # event['front_tracking_feats'] = tracking_feat_dict + +# ============================================================================= +# '''================1. 直接指定读取,速度快======================================''' +# '''读取 tracking_output.data 文件中的数据''' +# fpath_0_tracking = os.path.join(datapath, '0_tracking_output.data') +# fpath_1_tracking = os.path.join(datapath, '1_tracking_output.data') +# if os.path.exists(fpath_0_tracking) and os.path.isfile(fpath_0_tracking): +# tracking_output_boxes, tracking_output_feats = read_tracking_output(fpath_0_tracking) +# event['back_sole_boxes'] = tracking_output_boxes +# event['back_sole_feats'] = tracking_output_feats +# +# if os.path.exists(fpath_1_tracking) and os.path.isfile(fpath_1_tracking): +# tracking_output_boxes, tracking_output_feats = read_tracking_output(fpath_1_tracking) +# event['front_sole_boxes'] = tracking_output_boxes +# event['front_sole_feats'] = tracking_output_feats +# ============================================================================= + + + '''================2. 遍历方式读取(与以上方式二选一)======================================''' '''读取当前事件的 data 文件''' for filename in os.listdir(datapath): # filename = '1_track.data' @@ -61,8 +92,6 @@ def update_event(datapath): # elif CamerType == '1': # event['front_tracking_boxes'] = tracking_boxes # event['front_tracking_feats'] = tracking_feat_dict - - if os.path.isfile(fpath) and filename.find("tracking_output.data")>0: tracking_output_boxes, tracking_output_feats = read_tracking_output(fpath) @@ -75,7 +104,6 @@ def update_event(datapath): '''事件的特征表征方式选择''' - fs_feats = event['front_sole_feats'] bs_feats = event['back_sole_feats'] @@ -100,50 +128,56 @@ def update_event(datapath): '''4. 从前摄输出轨迹中选取特定轨迹对应的特征''' - ftrboxes = event['front_tracking_boxes'] - ftrfeats = event['front_tracking_feats'] - - condt2 = len(ftrboxes) + len(ftrfeats) == 0 - condt3 = len(ftrfeats) != len(ftrboxes) - if condt2 or condt3: - return event - - bprops = [] - for boxes in ftrboxes: - track = Track(boxes) - bprops.append(max(track.trajdist)) - - index = bprops.index(max(bprops)) - box_select = ftrboxes[index] - tid = int(box_select[0, 4]) - - feat_select = ftrfeats[f"track_{tid}"] - feats_select = np.empty((0, 256), dtype=np.float64) - for fid_bid, feat in feat_select['feats'].items(): - feats_select = np.concatenate((feats_select, feat[None, :]), axis=0) - event['feats_select'] = feats_select +# ============================================================================= +# ftrboxes = event['front_tracking_boxes'] +# ftrfeats = event['front_tracking_feats'] +# +# condt2 = len(ftrboxes) + len(ftrfeats) == 0 +# condt3 = len(ftrfeats) != len(ftrboxes) +# if condt2 or condt3: +# return event +# +# bprops = [] +# for boxes in ftrboxes: +# track = Track(boxes) +# bprops.append(max(track.trajdist)) +# +# index = bprops.index(max(bprops)) +# box_select = ftrboxes[index] +# tid = int(box_select[0, 4]) +# +# feat_select = ftrfeats[f"track_{tid}"] +# feats_select = np.empty((0, 256), dtype=np.float64) +# for fid_bid, feat in feat_select['feats'].items(): +# feats_select = np.concatenate((feats_select, feat[None, :]), axis=0) +# event['feats_select'] = feats_select +# ============================================================================= return event def creatd_deletedBarcode_front(filepath): # filepath = r'\\192.168.1.28\share\测试_202406\0723\0723_1\deletedBarcode.txt' - basepath, _ = os.path.split(filepath) - - MatchList = [] bcdlist = read_deletedBarcode_file(filepath) + MatchList = [] k = 0 for s_list in bcdlist: getout_fold = s_list['SeqDir'].strip() + getout_path = os.path.join(basepath, getout_fold) + + '''取出事件文件夹不存在,跳出循环''' + if not os.path.exists(getout_path) and not os.path.isdir(getout_path): + continue + day, hms = getout_fold.strip('_').split('-') ''' 生成取出事件字典 ''' getout_event = {} getout_event['barcode'] = s_list['Deleted'].strip() - getout_event['path'] = os.path.join(basepath, getout_fold) + getout_event['path'] = getout_path getout_event['feats_compose'] = np.empty((0, 256), dtype=np.float64) getout_event['feats_select'] = np.empty((0, 256), dtype=np.float64) @@ -164,20 +198,21 @@ def creatd_deletedBarcode_front(filepath): infold = pathname.split('_') if len(infold)!=2: continue - + if len(infold[0])<=14 or len(infold[1])<=10: continue + day1, hms1 = infold[0].split('-') - + if day1==day and infold[1]==barcode and int(hms1)=8: + enent_name = event_names[1] + elif len(event_names)==2 and len(event_names[1])==0: + enent_name = event_names[0] + else: + return + '''2. 依次读取 0/1_track.data 中数据,进行仿真''' + illu_tracking, illu_select = [], [] + for filename in os.listdir(eventpath): + # filename = '1_track.data' + if filename.find("track.data") <= 0: continue + fpath = os.path.join(eventpath, filename) + if not os.path.isfile(fpath): continue + + img_tracking, img_select = do_tracking(fpath, savepath, enent_name) + + if img_select is not None: + illu_select.append(img_select) + if img_tracking is not None: + illu_tracking.append(img_tracking) + + '''3. 前、后摄,原始轨迹、本地tracking输出、现场算法轨迹选择前、后,共幅8图''' + if len(illu_select)==2: + Img_s = np.concatenate((illu_select[0], illu_select[1]), axis = 0) + H, W = Img_s.shape[:2] + cv2.line(Img_s, (0, int(H/2)), (int(W), int(H/2)), (128, 255, 128), 2) + elif len(illu_select)==1: + Img_s = illu_select[0] + else: + Img_s = None + + if len(illu_tracking)==2: + Img_t = np.concatenate((illu_tracking[0], illu_tracking[1]), axis = 0) + H, W = Img_t.shape[:2] + cv2.line(Img_t, (0, int(H/2)), (int(W), int(H/2)), (128, 255, 128), 2) + elif len(illu_tracking)==1: + Img_t = illu_tracking[0] + else: + Img_t = None + + + + '''3.1 单独另存保存完好的 8 轨迹图''' + basepath, _ = os.path.split(savepath) + trajpath = os.path.join(basepath, 'trajs') + if not os.path.exists(trajpath): + os.makedirs(trajpath) + traj_path = os.path.join(trajpath, enent_name+'.png') + imgpath_tracking = os.path.join(savepath, enent_name + '_ing.png') + imgpath_select = os.path.join(savepath, enent_name + '_slt.png') + imgpath_ts = os.path.join(savepath, enent_name + '_ts.png') + + if Img_t is not None and Img_s is not None and np.all(Img_s.shape==Img_t.shape): + Img_ts = np.concatenate((Img_t, Img_s), axis = 1) + H, W = Img_ts.shape[:2] + cv2.line(Img_ts, (int(W/2), 0), (int(W/2), int(H)), (0, 0, 255), 4) + cv2.imwrite(imgpath_ts, Img_ts) + cv2.imwrite(traj_path, Img_ts) + else: + if Img_s: cv2.imwrite(imgpath_select, Img_s) + if Img_t: cv2.imwrite(imgpath_tracking, Img_t) + + + + +# warnings.simplefilter("error", category=np.VisibleDeprecationWarning) def main_loop(): - del_barcode_file = r'\\192.168.1.28\share\测试_202406\0723\0723_2\deletedBarcode.txt' - basepath = r'\\192.168.1.28\share\测试_202406\0723\0723_2' # 测试数据文件夹地址 + del_barcode_file = r'\\192.168.1.28\share\测试_202406\0723\0723_3\deletedBarcode.txt' + basepath = r'\\192.168.1.28\share\测试_202406\0723\0723_3' # 测试数据文件夹地址 SavePath = r'D:\contrast\dataset\resultx' # 结果保存地址 - prefix = ["getout_", "input_", "error_"] - + # prefix = ["getout_", "input_", "error_"] '''获取性能测试数据相关路径''' relative_paths = contrast_analysis(del_barcode_file, basepath, SavePath) @@ -349,7 +431,7 @@ def main_loop(): k = 0 for tuple_paths in relative_paths: - '''生成文件夹存储结果图像的文件夹''' + '''1. 生成存储结果图像的文件夹''' namedirs = [] for data_path in tuple_paths: base_name = os.path.basename(data_path).strip().split('_') @@ -358,76 +440,56 @@ def main_loop(): else: name = base_name[0] namedirs.append(name) - sdir = "_".join(namedirs) savepath = os.path.join(SavePath, sdir) + + # if os.path.exists(savepath): + # continue if not os.path.exists(savepath): - os.makedirs(savepath) + os.makedirs(savepath) - for path in tuple_paths: - '''============= 分别指定指定存储、读取对应的文件夹 =============''' - # if sdir.find('094631_6904724022444_6976075000082') < 0: continue - # if path.find('094631_') < 0: continue - - imgs = [] - for filename in os.listdir(path): - # filename = '1_track.data' - fpath = os.path.join(path, filename) - if os.path.isfile(fpath) and filename.find("track.data")>0: - enent_name = '' - - '''构建结果保存文件名前缀''' - for i, name in enumerate(namedirs): - if fpath.find(name)>0: - enent_name = prefix[i] + name - break - spath = os.path.join(savepath, enent_name) - - # abimg = do_tracking(fpath, spath) - # imgs.append(abimg) - try: - abimg = do_tracking(fpath, spath) - imgs.append(abimg) - if len(imgs) == 2: - Img = np.concatenate((imgs[0], imgs[1]), axis = 0) - - H, W = Img.shape[:2] - cv2.line(Img, (0, int(H/2)), (int(W), int(H/2)), (128, 255, 128), 2) - else: - Img = imgs[0] - - imgpath = os.path.join(savepath, enent_name + '_alg.png') - cv2.imwrite(imgpath, Img) - - except Exception as e: - print(f'Error! {fpath}, {e}') - - + '''2. 循环执行操作事件:取出、放入、错误匹配''' + for eventpath in tuple_paths: + try: + tracking_simulate(eventpath, savepath) + except Exception as e: + print(f'Error! {eventpath}, {e}') # k +=1 # if k==1: # break - - def main(): ''' - fpath: data文件地址,该 data 文件包括 Pipeline 各模块输出 - save_dir:需包含二级目录,其中一级目录为轨迹图像; - 二级目录为与data文件对应的序列图像存储地址。 + eventpath: data文件地址,该 data 文件包括 Pipeline 各模块输出 + savepath: 包含二级目录,一级目录为轨迹图像;二级目录为与data文件对应的序列图像存储地址。 ''' + EventPaths = r'\\192.168.1.28\share\测试_202406\0723\0723_2' + SavePath = r'D:\contrast\dataset\result' + k=0 + for pathname in os.listdir(EventPaths): + # pathname = "20240723-094731_6903148242797" + + eventpath = os.path.join(EventPaths, pathname) + savepath = os.path.join(SavePath, pathname) + if not os.path.exists(savepath): + os.makedirs(savepath) + + # tracking_simulate(eventpath, savepath) + try: + tracking_simulate(eventpath, savepath) + except Exception as e: + print(f'Error! {eventpath}, {e}') + + # k += 1 + # if k==10: + # break + - fpath = r'\\192.168.1.28\share\测试_202406\0723\0723_1\20240723-101506_6906839615771\1_track.data' - save_dir = r'D:\contrast\dataset\result\20240723-101506_\images' - - do_tracking(fpath, save_dir) - - -if __name__ == "__main__": - - main_loop() - # main() +if __name__ == "__main__": + # main_loop() + main() # try: # main_loop() # except Exception as e: diff --git a/tracking/utils/__pycache__/annotator.cpython-39.pyc b/tracking/utils/__pycache__/annotator.cpython-39.pyc index 184ef5fbdf19ba6ca030986424eb5f2b3848e1e6..b5eb1c9719ff603aae928218f46e120f82a8703f 100644 GIT binary patch delta 810 zcmZ9J&ubG=5Xax|x80DmT5PhW)q*`Vl^zr?iiZYbr6K__c&V~2c^gSulJ;cs(MX5&-gzC-z!IK9ihn{+{C(rhx^LDLL7j|}LzVl}GedcKV#YBERpZ5_w2bbTq zzU<|v@Xj}g4DKL>H;67Mau*^+17}%)2uf(e3P8n&0 z8Y?0A#ShAd40G0?4o|CzBF~9CVLZcCZb&iOHi~@wfnQ^xG2F0jhqN@`IGhB3L|1B| zmf&gPLR7&c-t2AmbVZCmpKBK(r)uJcUZ@B3soE_;>3r- zv9u{MzWxN%yb|jAFao}c7E#6<#$~PGCk->My|4VChmj)oE5DBGc2Zm|&cQ85-e$WS zHJ)rmm7LBy0tFk2i*w^nlUtACM)Wuy$=fUS8)3ByHK$#T+lLP9d$Bm{cF{FkV zU%v%%vVvmYWkYKM6*+SlKWPm=ZJ2T63aT*jFjBt#$}ihRadGA(Y?*mm8*$X$*^XLu zUzcnu&Yn8t{Brw#(vBV`nOs?JT?reFdQl&CgpN3=*pFgy-a*&79Cg+-$P&Ewa>~pG z@>&jD&)apm(5N2dOiKPM<`A87#SFwF{&DR*b&<(1RD)g^>eKd5Cp2S^koyU*g^SqDG z`})}DXFl4W&=ZN6z>a$_eo|}SPW&t9sXVW@YnDL=ruH74)hY)MRJ7U3(fuz}Mky&o zb|Oj+MQ&}^S<*~347vRy$*vJLrr2oxCy*`5jaL?9er!eU2(3^3*j&O;*crVLLV_>M zNz=m1&o0J&v=ZtFi>jCO zA~lpkDKsKWND@_~pd^Zg6gIY^R17bz?ud&BX=E++2)au4smG8_uBapB*TF9WOR8CQ z8m`)I%Ph%M)@^&iYvHpn9j=)=<0pWJ^frEr{G$$|%Vb+3hc2#`6Yqx6DQ^5V`90M{ zmpFewzD)1!^Pe8_?61rPmjMuiZWP!%WF#}m-e@CJ+(cuRQ`Ipm*fUExN^WGfX3vAD z0&o!E5Ws2jeP*cm0i!gGb*FA(8@Oyao{5`Osk+XBYcH7iGD&79cSExc)?S8Vy-GyA z-J){C#Exm>Q(y_b?U^3|b{OCqSD46pj+gx>=|@-b#6;s zI%j}-9d3%eydFTb)DLh4RL%mxyW>G#N$l1jaOYtFe+Gdo8v;E23kU%8J@9=&I41zE zM<9`BGYOZkC$aztdrR%7a5Yx|+u+)h^*y>j1bKl1>fj}oP@aYj?`+d7h48%%9#yU& zYv~Lr=66Up5qobx=JF^_{> z)3D_jW*c86e+(W&O)@rAeu8g~H+xC0?cz4x12%jwJ^=PDz;_@Z?+v~59PB6>vGrF? zTiX?o(SVEvWIP}f0VxOM>3}>#$)4c@VUIb6$?|XmdF1cmO9Ol{QQdJ|PxoAm;p0wk zYcN%f^|8f&s3Dd81CmGy;|5vVex%nKm!u0*>~lL_*j>_@94`S}1h@+T55nL>6-{&W Xc~jF^H}4mw7ggR62`Vre}XS{OU zXpPn85*3AqMk+!Glw4>js1mhQdZL&1)K(lS^{|&7s~mf&RQ1yN$B*Q|TJ!Da&;R$0 zXZD|ca%z1pfCB+lV3!ztkh%CY@UIlrq!O-Y^13rHbK=6KRPxN}Wa?7#!l{eNagC13 zhmc0k%8z3oGt*q!1K!RRV0W2~88)i3hz=guvkA8E9HQALCn=nLOobeI0+yNq)5 zUH{?4GE5^^am~o&vyLZSELV-Vq)E6~tXWl3gP%Pa12cXFxC_^bP4D|h(3kYNKZ4d< zj{mv`&GX9t@5eZl$96c3*0@ZWZL_;;2<5&($7wij5Fz8IWlJ<%UJ__n6z%`_%# z)s_*DXmW<&lEFGjEagq|9#l^Qd=8KVI0JANphPR7;e$6Abvy){S%c(&OL@~WNX1do zWwTZ;)(mo!wnEd#H8<r)$o2v6YGy9Kw-}a7GBLOfbB|cmvu6>f9?9Z z6$k`?INIxYbnDZK5qFWVc4aKm*CHoTiT)jlq9DB)!RTAy^hU%>hoVs*pOnX7`c8CT zY!MQ<7y-7iI|_uSt$MVMq#W?i=s)`tAMp+ltCmi#fk*+C016BoDV--$(CZ)^8GO3fdAdC0l z_rRV3`~U^?*zm&p&`FwH#Ge?&)L55{I~`@Bt4wyuRF@>WunzDL045^fbd*%eWG69|Vw-$*bk;YcgcMD|O26XzAGAG$R{#J2 diff --git a/tracking/utils/__pycache__/read_data.cpython-39.pyc b/tracking/utils/__pycache__/read_data.cpython-39.pyc index 2c54c25e2f9e415b20f06d9b1852013b01e4be85..4f785aa8cf02eb4efa5082053d7ffd81748a1b9e 100644 GIT binary patch delta 1706 zcmZ8h-EUMy6rVHqbMM~0`_b)p3tNH0N~t9p{Ge2nMj|1~XMl}Rw>!6G>9TF--YPV+ zsi8dhLR>P5A(EPHVhD*beh_&u#>6)sO#F;#R(%lTKj4GWH_zNHXuXp;Gv}O{bME<_ zGiPn^x9wgrk#Gop2M@kK_3OZOuMcit-#M}bj8?3I#VlrDB?X(sn1gGK#hHt%@QgH7^VqrLZe0Szl84OQ)_N8~~+Wb|~ zffnuwr(v)z#Lb>DkiW}1YaP{0=m=*SYH?vSED=|6{qNjW)?Mpp;f1&U6zv;Pm_~2P z$0@>yj$>H^QqAlpbv?+A5c$24)^z@q{KeY0)V3aPoMqMSKe6_ROcZM;#;WtidaRvn zU5>Fn+^bl-Nh77uVZ9=Y_q2^jbQ6L0%TbQ%`us7RFPtLPXL@uJX6nY}J|ML&Ad9)M zjrB$8?w5D$-LOgiZqN7Aq1!J16DUGT2VyL=?H1;rw>1*ifHZmpNOvx3qqupw!w-6Z%-e&7y3Tz>7&!is!0 zF}m~sj1~YbFj~OmV?2-U_@jy>6d6=xSP>6NQxD3EKHsJIAtZUTX-}0a{#-FU&-W^+ z3cIN*86S(btQZ!#u2d1hrXqhzbeeUP1UdOvV)K(O9i{vw1nDQ;~k-F`v?#!!gbg3)TUL=$u)AmI*lg)VS+YJ}V^ zO}0;_rc16LiK1CZS{cNT`tvH(?u&o)9CV9WEw42d z_Ov){6yOc9sdY(}i3Ouqzj1-kl-M+K`d29V;%npNYw3BVKpGIGxXRNs*ws{`ka|$h z)U!0hGoO<$6z;zVO_ljHTOk$T{zLl+`A;qoniYNK0r$=VS&$L*dXDDAgxR+dHPzK= zp2r9~+-~VKkEL6SI_gcDtLLjhWOKU#b%*OMlVcNs{LgQicGUBc!S#mB<7b|0nGtDO zT;B%iy@035GbRZo8omt`NHrKBO|^EfpJai^_bsHo5E=`FV~uX4_lkFDAf?9&@8m&T zcn21)vGu*eJLsMr3x6cb!V9G3%U00>&*FFL{)XN_5(6(Cm<;i z;e-NJsQRIL^P2c3$%1_y_6JC9OT6kH#KljV`fa>2N4^kTy0du6w794K&nx#P{BlL&p^MGHUyBPoW`+ z6z6^mt9m@=CfvL#ywq8EATFfJ8|y_xl|d7TKD$8b$w!)lnu`NDgYz)g?&CB(oJLn< z(IodI4CHS)i2$OwbJeTbyK6t`Cp;;yfF`gccezeo1V)m2v85-rc(Emg79H3r{Oum3 z`g+S8p-jyY5^3B-NCR8qCR(i6B0&!9nt0JakolxP#_le9xrX;bTDaWp6yAEQt^CnkeppQ?Zd0n%Z^ zMhNbb1`22>CzSyA27$dTJ_{}nX4~e>3|*d^nQ80QE0=0 and cls==0: @@ -51,6 +53,8 @@ class TrackAnnotator(Annotator): """ 绘制选定 track 的轨迹 """ + if track.size==0: return + x, y = int((track[0]+track[2])/2), int((track[1]+track[3])/2) cv2.circle(self.im, (x, y), 6, color, 2) diff --git a/tracking/utils/drawtracks.py b/tracking/utils/drawtracks.py index 5ddfeaf..f6600d7 100644 --- a/tracking/utils/drawtracks.py +++ b/tracking/utils/drawtracks.py @@ -94,19 +94,19 @@ def draw_all_trajectories(vts, edgeline, save_dir, file, draw5p=False): img1 = drawTrack(vts.tracks, img1) img2 = drawTrack(vts.Residual, img2) - img = np.concatenate((img1, img2), axis = 1) - H, W = img.shape[:2] - cv2.line(img, (int(W/2), 0), (int(W/2), H), (128, 255, 128), 2) + imgcat = np.concatenate((img1, img2), axis = 1) + H, W = imgcat.shape[:2] + cv2.line(imgcat, (int(W/2), 0), (int(W/2), H), (128, 255, 128), 2) # imgpth = save_dir.joinpath(f"{file}_show.png") # cv2.imwrite(str(imgpth), img) if not draw5p: - return img + return imgcat ''' tracks 5点轨迹''' - trackpth = save_dir / Path("trajectory") / Path(f"{file}") + trackpth = save_dir / Path("trajectory") if not trackpth.exists(): trackpth.mkdir(parents=True, exist_ok=True) for track in vts.tracks: @@ -114,19 +114,20 @@ def draw_all_trajectories(vts, edgeline, save_dir, file, draw5p=False): img = edgeline.copy() img = draw5points(track, img) - pth = trackpth.joinpath(f"{track.tid}.png") + pth = trackpth.joinpath(f"{file}_{track.tid}.png") cv2.imwrite(str(pth), img) - for track in vts.merged_tracks: - # if track.cls != 0: - img = edgeline.copy() - img = draw5points(track, img) + # for track in vts.Residual: + # # if track.cls != 0: + # img = edgeline.copy() + # img = draw5points(track, img) - pth = trackpth.joinpath(f"{track.tid}_.png") - cv2.imwrite(str(pth), img) + # pth = trackpth.joinpath(f"{file}_{track.tid}_.png") + # cv2.imwrite(str(pth), img) + + return imgcat + - - # ============================================================================= # '''3. moving tracks 中心轨迹''' # filename2 = f"{file}_show_r.png" @@ -306,7 +307,7 @@ def draw5points(track, img): '''=============== 最小轨迹长度索引 ====================''' - if track.imgBorder: + if track.isBorder: idx = 0 else: idx = trajlens.index(min(trajlens)) diff --git a/tracking/utils/read_data.py b/tracking/utils/read_data.py index 6877fd3..5bda6b0 100644 --- a/tracking/utils/read_data.py +++ b/tracking/utils/read_data.py @@ -30,6 +30,8 @@ def find_samebox_in_array(arr, target): return i return -1 +import warnings + def extract_data(datapath): bboxes, ffeats = [], [] @@ -47,6 +49,17 @@ def extract_data(datapath): if line.find("CameraId")>=0: if len(boxes): bboxes.append(np.array(boxes)) if len(feats): ffeats.append(np.array(feats)) + + # with warnings.catch_warnings(record=True) as w: + # if len(boxes): bboxes.append(np.array(boxes)) + # if len(feats): ffeats.append(np.array(feats)) + # if w: + # print(f"捕获到 {len(w)} 个警告:") + # for warning in w: + # print(f"警告类型: {warning.category}") + # print(f"警告消息: {warning.message}") + # print(f"警告发生的地方: {warning.filename}:{warning.lineno}") + if len(tboxes): trackerboxes = np.concatenate((trackerboxes, np.array(tboxes))) if len(tfeats): @@ -56,16 +69,20 @@ def extract_data(datapath): if line.find("box:") >= 0 and line.find("output_box:") < 0: box = line[line.find("box:") + 4:].strip() + # if len(box)==6: boxes.append(str_to_float_arr(box)) if line.find("feat:") >= 0: feat = line[line.find("feat:") + 5:].strip() + # if len(feat)==256: feats.append(str_to_float_arr(feat)) if line.find("output_box:") >= 0: box = str_to_float_arr(line[line.find("output_box:") + 11:].strip()) tboxes.append(box) # 去掉'output_box:'并去除可能的空白字符 index = find_samebox_in_array(boxes, box) + + assert(len(boxes)==len(feats)), f"{datapath}, {datapath}, len(boxes)!=len(feats)" if index >= 0: # feat_f = str_to_float_arr(input_feats[index]) feat_f = feats[index] @@ -120,7 +137,7 @@ def extract_data(datapath): tracking_feat_dict[f"track_{tid}"]= {"feats": {}} tracking_feat_dict[f"track_{tid}"]["feats"].update({f"{fid}_{bid}": tracker_feat_dict[f"frame_{fid}"]["feats"][bid]}) except Exception as e: - print(f'Path: {datapath}, Error: {e}') + print(f'Path: {datapath}, tracking_feat_dict can not be structured correcttly, Error: {e}') return bboxes, ffeats, trackerboxes, tracker_feat_dict, trackingboxes, tracking_feat_dict @@ -142,6 +159,8 @@ def read_tracking_output(filepath): boxes.append(data) if data.size == 256: feats.append(data) + + assert(len(feats)==len(boxes)), f"{filepath}, len(feats)!=len(boxes)" return np.array(boxes), np.array(feats) @@ -166,16 +185,9 @@ def read_deletedBarcode_file(filePth): dict, barcode_list, similarity_list = {}, [], [] continue - # print(line) - try: - label = line.split(':')[0] - value = line.split(':')[1] - except Exception as e: - print(f'Error: {e}') - - - - + if line.find(':')<0: continue + label = line.split(':')[0] + value = line.split(':')[1] if label == 'SeqDir': dict['SeqDir'] = value diff --git a/tracking/utils/videot.py b/tracking/utils/videot.py index 3591722..a16b387 100644 --- a/tracking/utils/videot.py +++ b/tracking/utils/videot.py @@ -14,30 +14,38 @@ import cv2 # import sys # from scipy.spatial.distance import cdist - -def video2imgs(videopath): -# ============================================================================= -# videopath:视频文件地址,在该地址的 "/file_imgs/" 文件加下存储视频帧图像 -# ============================================================================= - - path, filename = os.path.split(videopath) - file, ext = os.path.splitext(filename) - - savepath = os.path.join(path, "{}_imgs".format(file)) - if not os.path.exists(savepath): - os.makedirs(savepath) - - cap = cv2.VideoCapture(videopath) +VideoFormat = ['.mp4', '.avi'] +def video2imgs(videopath, savepath): k = 0 - while True: - ret, frame = cap.read() - if not ret: - break - - k += 1 - cv2.imwrite(os.path.join(savepath, "{}.png".format(k)), frame) + have = False + for filename in os.listdir(videopath): + file, ext = os.path.splitext(filename) + if ext not in VideoFormat: + continue + basename = os.path.basename(videopath) + imgbase = basename + '_' + file + imgdir = os.path.join(savepath, imgbase) + if not os.path.exists(imgdir): + os.mkdir(imgdir) + video = os.path.join(videopath, filename) + cap = cv2.VideoCapture(video) + i = 0 + while True: + ret, frame = cap.read() + if not ret: + break + imgp = os.path.join(imgdir, file+f"_{i}.png") + i += 1 + cv2.imwrite(imgp, frame) + cap.release() + + print(filename + f" haved resolved") + + k+=1 + if k==1000: + break def videosave(bboxes, videopath="100_1688009697927.mp4"): @@ -84,4 +92,15 @@ def videosave(bboxes, videopath="100_1688009697927.mp4"): break vid_writer.release() - cap.release() \ No newline at end of file + cap.release() + +def main(): + videopath = r'C:\Users\ym\Desktop' + savepath = r'C:\Users\ym\Desktop' + video2imgs(videopath, savepath) + + + +if __name__ == '__main__': + main() + \ No newline at end of file