From b657be729bbd5b5eaea30395d6b84bb0707d0c2c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E5=BA=86=E5=88=9A?= Date: Mon, 24 Feb 2025 18:56:54 +0800 Subject: [PATCH] update one2n.py --- __pycache__/track_reid.cpython-39.pyc | Bin 16286 -> 16300 bytes contrast/__pycache__/genfeats.cpython-39.pyc | Bin 4327 -> 4405 bytes .../__pycache__/inference.cpython-39.pyc | Bin 12152 -> 12098 bytes contrast/feat_extract/inference.py | 9 +- contrast/genfeats.py | 29 +++--- contrast/one2n_contrast.py | 35 ++++--- contrast/one2one_contrast.py | 86 ++++++++++-------- contrast/onsite_contrast_pr.py | 34 ++++--- .../utils/__pycache__/event.cpython-39.pyc | Bin 12477 -> 12650 bytes contrast/utils/event.py | 34 ++++--- pipeline.py | 17 ++-- .../event_time_specify.cpython-39.pyc | Bin 0 -> 6855 bytes realtime/draw_traj.py | 86 ++++++++++++++++++ realtime/event_time_specify.py | 3 +- realtime/full_realtime.py | 3 +- realtime/time_devide.py | 50 ++++++++-- .../__pycache__/dotracks_back.cpython-39.pyc | Bin 6963 -> 6965 bytes .../__pycache__/dotracks_front.cpython-39.pyc | Bin 5679 -> 5681 bytes tracking/dotrack/dotracks_back.py | 4 +- tracking/dotrack/dotracks_front.py | 4 +- .../__pycache__/read_data.cpython-39.pyc | Bin 15843 -> 15930 bytes tracking/utils/read_data.py | 8 +- 22 files changed, 279 insertions(+), 123 deletions(-) create mode 100644 realtime/__pycache__/event_time_specify.cpython-39.pyc create mode 100644 realtime/draw_traj.py diff --git a/__pycache__/track_reid.cpython-39.pyc b/__pycache__/track_reid.cpython-39.pyc index a0d5b2d3f7eb2af1dc85748b7adc6b6858df9ebd..6407f77cf8c3b40c67573da0ced4ece46b74c96f 100644 GIT binary patch delta 333 zcmbPNzowoyk(ZZ?0SI2LoS4qEkynDB@z-QE{vC`CoA2{WGBSRe{8PZ0F=Vo>pp8t8 z#say83=8BJGSq66DAZ`wXl4mFGeN{AcM6*GG8b{w7^g6lGEM-pCZ82d~&X#w(L=iumeosBx{4u2HvPC^4>)sZp0?C^5(~X=a+hR%8I-FECxmz{pUe z3=~P394tDQ@y6zlqRC8xx0sU)N^h~|mF5;y7Rdm^YICYYD>LJf$*-lIn3;IkHtWe0 GC<6e))MvZ^ delta 329 zcmZ2eKd+uQk(ZZ?0R&Xq(pfh0O7Jtjo2V)G_< zi^ww8OfdjJ3c diff --git a/contrast/__pycache__/genfeats.cpython-39.pyc b/contrast/__pycache__/genfeats.cpython-39.pyc index a63d7a877918a34440d2944e64b1654200759256..fea7d7dc45be8ed417c92e662f1cbb90f2d55422 100644 GIT binary patch delta 1180 zcmYjQ&2Jk;6n`_j_I`MGy>V>ENsHuI>4$+PPJ&Prid2M4K|%pq)KJS&wDvmbril}e z$0&_v$-#$m01>f89HK~Tsn=3I!~sqSaYJxJs(j%9q^JG?+<3cKh#k%Qz4v?X&CYu> z^JMzllIfVH4){HN@4@CDUzvX=Ni9&6$A>Q<*OVg9=$k@J;d~WmcYy+M;G|D{$tAwb zX($O8kSZL}wXC1ubW08sA~7I!>L-0Awvz&op}r~HDz}LANssr#-N95o&t_jtZ`}C73-{5+f62^e|<|??7 z3^Md30&RO9x?fj-#N!r9VTQ&4s<8F|H)#3kP4I1QigX`KSUX#%v;LT$;Z~@L3@$b< z>@Y3H2ZTW9v5-Pr*vMu@mXB>^w#G#^7}Ih&w8MzWp)WVm^MRzDf74a65W6POHPQJ= zSVDKz%OKK-8e$GnN6aIp5GN3g%Yc<>u8EbMjVmh%T^Pad+Qi`x|F2~g+RHNV$s>9< zNx&}q*c_QWrIP-yG_Vg)KN>f|J5*uuh$F)=Ap1#mOR zvO9i~h%!5QSGob^Y|kSAda?M;HT@n@SacoOrB97Z!LO<3gIS|U&IE56_iBp^LuF%o z*WvRo4rQ;+m)JB$4z;WM&DI|GcH69kc6q9%csrYKJN$M{-Do*H(%4KCsa$P0cik3a z7otC$izunlblH6HiaC8{5$#&Cu~+q)e6)usLdM0qL*lZzI36wB1uolTt(q}X);IX# zLU7-_wz7gjkXB`x*f=brqog!T43siaiHzDsYR7(^7*wZ4YDfkt${ATje>|u`D%2*= zO2M4fGNUKMuA?Z+Y%UmBi{!`PH|x1~UPlTa3EpO(VBaZ+EfP{e2Bcf!fDZ>Xg3l>t zDY8p3iyE@B06_$eZm|n^2J%YJ3C^WoE-%bh)}031b=>;tqx*k7`tJ0zFHb-IqV8;O zuQ!}-YyHpfKYH@;_+TdZF#XK+QRqRbx?FGV-}V|_bPjdb;TX#6QG2?hm~w(CQ6(yh zVY0RFb$NHF?l^Z^uE)CUMpU4L1^$vQo%tD!u8jh)VbL(KkvJuGGobcN<|Xv7B8p+6 k-P_r_%dP}V_C>NBIQDt_zkbDQV#eq88_K)7rdlfb2enxrcK`qY delta 1093 zcmY*YTW=dh6h3Em>|O80USDd*xhW1MYDy_K&Zof!EI@T#sGY$HCb*KA+Y56ty-BoRPzBO5n^{#5F%f@6MG5V5lIyGpQxMsOo`aEpp8Ur; zCo9mt#z7YL@j-~-7ZG|ha!eRXr>YaGcnC+lPXSlp4prh8KP|S+=U9d^C|B8H&s+eN zCdDGm6WW9YLWgjSFu4HK9809AIg_L26qQZwVbQVwX-}pC``CT%C$57!z<mUionZP~it_GTl;5{dbVRlT*7hH2nGmJtF6 diff --git a/contrast/feat_extract/__pycache__/inference.cpython-39.pyc b/contrast/feat_extract/__pycache__/inference.cpython-39.pyc index d37e16741354ee12c403ca3f3e72e094aa7d9089..dfc7104efd6fd915ba35d596413afbb6025d0105 100644 GIT binary patch delta 2270 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 M{;jY;f9XH+ABcEg@c;k- diff --git a/contrast/feat_extract/inference.py b/contrast/feat_extract/inference.py index 5c75ed8..ab5c7b9 100644 --- a/contrast/feat_extract/inference.py +++ b/contrast/feat_extract/inference.py @@ -72,10 +72,11 @@ class FeatsInterface: new_img.paste(img, (paste_x, paste_y)) patch = self.transform(new_img) - if str(self.device) != "cpu": - patch = patch.to(device=self.device).half() - else: - patch = patch.to(device=self.device) + patch = patch.to(device=self.device) + # if str(self.device) != "cpu": + # patch = patch.to(device=self.device).half() + # else: + # patch = patch.to(device=self.device) patches.append(patch) if (i + 1) % self.batch_size == 0: diff --git a/contrast/genfeats.py b/contrast/genfeats.py index 8c4a6f6..e11bd6c 100644 --- a/contrast/genfeats.py +++ b/contrast/genfeats.py @@ -120,8 +120,7 @@ def stdfeat_infer(imgPath, featPath, bcdSet=None): # imgPath = r"\\192.168.1.28\share\测试_202406\contrast\std_barcodes" # featPath = r"\\192.168.1.28\share\测试_202406\contrast\std_features" - stdBarcodeDict = {} - stdBarcodeDict_ft16 = {} + Encoder = FeatsInterface(conf) @@ -167,23 +166,21 @@ def stdfeat_infer(imgPath, featPath, bcdSet=None): # uint8, 两种策略,1) 精度损失小, 2) 计算复杂度小 # feature_uint8, _ = ft16_to_uint8(feature_ft16) feature_uint8 = (feature_ft16*128).astype(np.int8) + + '''================ 保存单个barcode特征 ================''' + ##================== float32 + stdbDict["barcode"] = barcode + stdbDict["imgpaths"] = imgpaths + stdbDict["feats_ft32"] = feature_ft32 + stdbDict["feats_ft16"] = feature_ft16 + stdbDict["feats_uint8"] = feature_uint8 + + with open(featpath, 'wb') as f: + pickle.dump(stdbDict, f) except Exception as e: print(f"Error accured at: {filename}, with Exception is: {e}") - - '''================ 保存单个barcode特征 ================''' - ##================== float32 - stdbDict["barcode"] = barcode - stdbDict["imgpaths"] = imgpaths - stdbDict["feats_ft32"] = feature_ft32 - stdbDict["feats_ft16"] = feature_ft16 - stdbDict["feats_uint8"] = feature_uint8 - - with open(featpath, 'wb') as f: - pickle.dump(stdbDict, f) - - stdBarcodeDict[barcode] = feature - stdBarcodeDict_ft16[barcode] = feature_ft16 + t2 = time.time() print(f"Barcode: {barcode}, need time: {t2-t1:.1f} secs") diff --git a/contrast/one2n_contrast.py b/contrast/one2n_contrast.py index fdc6789..ccaf64a 100644 --- a/contrast/one2n_contrast.py +++ b/contrast/one2n_contrast.py @@ -24,7 +24,7 @@ def init_eventdict(sourcePath, stype="data"): # bname = r"20241126-135911-bdf91cf9-3e9a-426d-94e8-ddf92238e175_6923555210479" source_path = os.path.join(sourcePath, bname) - if stype=="data": + if stype=="data" or stype=="realtime": pickpath = os.path.join(eventDataPath, f"{bname}.pickle") if not os.path.isdir(source_path) or os.path.isfile(pickpath): continue @@ -32,7 +32,12 @@ def init_eventdict(sourcePath, stype="data"): pickpath = os.path.join(eventDataPath, bname) if not os.path.isfile(source_path) or os.path.isfile(pickpath): continue - + + evt = os.path.splitext(os.path.split(pickpath)[-1])[0].split('_') + cont = len(evt)>=2 and evt[-1].isdigit() and len(evt[-1])>=10 + if not cont: + continue + try: event = ShoppingEvent(source_path, stype) @@ -46,10 +51,10 @@ def init_eventdict(sourcePath, stype="data"): # if k==1: # break - errfile = os.path.join(resultPath, 'error_events.txt') - with open(errfile, 'a', encoding='utf-8') as f: - for line in errEvents: - f.write(line + '\n') + # errfile = os.path.join(resultPath, 'error_events.txt') + # with open(errfile, 'a', encoding='utf-8') as f: + # for line in errEvents: + # f.write(line + '\n') def read_eventdict(eventDataPath): evtDict = {} @@ -236,14 +241,22 @@ def one2n_pr(evtDicts, pattern=1): def main(): '''1. 生成事件字典并保存至 eventDataPath, 只需运行一次 ''' - init_eventdict(eventSourcePath, stype="data") + init_eventdict(eventSourcePath, stype="source") # 'source', 'data', 'realtime' + + + # for pfile in os.listdir(eventDataPath): + # evt = os.path.splitext(pfile)[0].split('_') + # cont = len(evt)>=2 and evt[-1].isdigit() and len(evt[-1])>=10 + # if not cont: + # continue + '''2. 读取事件字典 ''' evtDicts = read_eventdict(eventDataPath) '''3. 1:n 比对事件评估 ''' - fpevents = one2n_pr(evtDicts, pattern=1) + fpevents = one2n_pr(evtDicts, pattern=2) fpErrFile = str(Path(resultPath).joinpath("one2n_fp_Error.txt")) with open(fpErrFile, "w") as file: @@ -253,10 +266,10 @@ def main(): if __name__ == '__main__': - eventSourcePath = r"\\192.168.1.28\share\测试视频数据以及日志\海外展厅测试数据\比对数据" - resultPath = r"\\192.168.1.28\share\测试视频数据以及日志\海外展厅测试数据\testing" + eventSourcePath = r"\\192.168.1.28\share\测试视频数据以及日志\全实时测试\result_V12\ShoppingDict_pkfile" + resultPath = r"\\192.168.1.28\share\测试视频数据以及日志\全实时测试\testing" - eventDataPath = os.path.join(resultPath, "evtobjs") + eventDataPath = os.path.join(resultPath, "evtobjs_data") if not os.path.exists(eventDataPath): os.makedirs(eventDataPath) diff --git a/contrast/one2one_contrast.py b/contrast/one2one_contrast.py index db02389..b90b8b8 100644 --- a/contrast/one2one_contrast.py +++ b/contrast/one2one_contrast.py @@ -418,8 +418,7 @@ def one2one_simi(evtList, evtDict, stdDict): '''================ float32、16、int8 精度比较与存储 =============''' # data_precision_compare(stdfeat, evtfeat, mergePairs[i], save=True) - - + return rltdata @@ -520,12 +519,12 @@ def gen_eventdict(sourcePath, saveimg=True): pickpath = os.path.join(eventDataPath, f"{bname}.pickle") if os.path.isfile(pickpath): continue - # event = ShoppingEvent(source_path, stype="data") + # event = ShoppingEvent(source_path, stype=source_type) # with open(pickpath, 'wb') as f: # pickle.dump(event, f) try: - event = ShoppingEvent(source_path, stype="source") + event = ShoppingEvent(source_path, stype=source_type) # save_data(event, resultPath) with open(pickpath, 'wb') as f: @@ -541,38 +540,35 @@ def gen_eventdict(sourcePath, saveimg=True): errfile = os.path.join(resultPath, 'error_events.txt') - with open(errfile, 'w', encoding='utf-8') as f: - for line in errEvents: - f.write(line + '\n') + # with open(errfile, 'w', encoding='utf-8') as f: + # for line in errEvents: + # f.write(line + '\n') def init_std_evt_dict(): '''==== 0. 生成事件列表和对应的 Barcodes列表 ===========''' bcdList, event_spath = [], [] - for evtpath in eventSourcePath: - for evtname in os.listdir(evtpath): - bname, ext = os.path.splitext(evtname) - - ## 处理事件的两种情况:文件夹 和 Yolo-Resnet-Tracker 的输出 - fpath = os.path.join(evtpath, evtname) - if os.path.isfile(fpath) and (ext==".pkl" or ext==".pickle"): - evt = bname.split('_') - elif os.path.isdir(fpath): - evt = evtname.split('_') - else: - continue - - - if len(evt)>=2 and evt[-1].isdigit() and len(evt[-1])>=10: - bcdList.append(evt[-1]) - event_spath.append(os.path.join(evtpath, evtname)) + for evtname in os.listdir(eventSourcePath): + bname, ext = os.path.splitext(evtname) + + ## 处理事件的两种情况:文件夹 和 Yolo-Resnet-Tracker 的输出 + fpath = os.path.join(eventSourcePath, evtname) + if os.path.isfile(fpath) and (ext==".pkl" or ext==".pickle"): + evt = bname.split('_') + elif os.path.isdir(fpath): + evt = evtname.split('_') + else: + continue + + if len(evt)>=2 and evt[-1].isdigit() and len(evt[-1])>=10: + bcdList.append(evt[-1]) + event_spath.append(fpath) '''==== 1. 生成标准特征集, 只需运行一次, 在 genfeats.py 中实现 ===========''' bcdSet = set(bcdList) gen_bcd_features(stdSamplePath, stdBarcodePath, stdFeaturePath, bcdSet) print("stdFeats have generated and saved!") - - + '''==== 2. 生成事件字典, 只需运行一次 ===============''' gen_eventdict(event_spath) print("eventList have generated and saved!") @@ -584,7 +580,7 @@ def test_one2one(): '''1:1性能评估''' # 1. 只需运行一次,生成事件字典和相应的标准特征库字典 - init_std_evt_dict() + # init_std_evt_dict() # 2. 基于事件barcode集和标准库barcode交集构造事件集合 evtList, evtDict, stdDict = build_std_evt_dict() @@ -598,7 +594,7 @@ def test_one2SN(): '''1:SN性能评估''' # 1. 只需运行一次,生成事件字典和相应的标准特征库字典 - init_std_evt_dict() + # init_std_evt_dict() # 2. 事件barcode集和标准库barcode求交集 evtList, evtDict, stdDict = build_std_evt_dict() @@ -612,7 +608,7 @@ if __name__ == '__main__': (1) stdSamplePath: 用于生成比对标准特征集的原始图像地址 (2) stdBarcodePath: 比对标准特征集原始图像地址的pickle文件存储,{barcode: [imgpath1, imgpath1, ...]} (3) stdFeaturePath: 比对标准特征集特征存储地址 - (4) eventSourcePath: 事件地址 + (4) eventSourcePath: 事件地址, 包含data文件的文件夹或 Yolo-Resnet-Tracker输出的Pickle文件父文件夹 (5) resultPath: 结果存储地址 (6) eventDataPath: 用于1:1比对的购物事件存储地址,在resultPath下 (7) similPath: 1:1比对结果存储地址(事件级),在resultPath下 @@ -622,19 +618,33 @@ if __name__ == '__main__': # stdBarcodePath = r"D:\exhibition\dataset\bcdpath" # stdFeaturePath = r"\\192.168.1.28\share\数据\已完成数据\比对数据\barcode\all_totalBarocde\features_json\v11_barcode_11592" - # eventSourcePath = [r'D:\exhibition\images\20241202'] - # eventSourcePath = [r"\\192.168.1.28\share\测试视频数据以及日志\各模块测试记录\展厅测试\1129_展厅模型v801测试组测试"] + # eventSourcePath = r'D:\exhibition\images\20241202' + # eventSourcePath = r"\\192.168.1.28\share\测试视频数据以及日志\各模块测试记录\展厅测试\1129_展厅模型v801测试组测试" + # stdSamplePath = r"\\192.168.1.28\share\数据\已完成数据\展厅数据\v2.0_abroad\比对数据\all_base_二筛" + # stdBarcodePath = r"\\192.168.1.28\share\测试视频数据以及日志\海外展厅测试数据\比对测试数据20250121_testing\bcdpath" + # stdFeaturePath = r"\\192.168.1.28\share\测试视频数据以及日志\海外展厅测试数据\比对测试数据20250121_testing\stdfeats" - stdSamplePath = r"\\192.168.1.28\share\数据\已完成数据\展厅数据\v2.0_abroad\比对数据\all_base_二筛" - stdBarcodePath = r"\\192.168.1.28\share\测试视频数据以及日志\海外展厅测试数据\testing\bcdpath" - stdFeaturePath = r"\\192.168.1.28\share\测试视频数据以及日志\海外展厅测试数据\testing\stdfeats" + stdSamplePath = r"\\192.168.1.28\share\数据\已完成数据\比对数据\barcode\all_totalBarocde\totalBarcode" + stdBarcodePath = r"\\192.168.1.28\share\测试视频数据以及日志\全实时测试\testing\bcdpath" + stdFeaturePath = r"\\192.168.1.28\share\测试视频数据以及日志\全实时测试\testing\stdfeats" + + if not os.path.exists(stdBarcodePath): + os.makedirs(stdBarcodePath) + if not os.path.exists(stdFeaturePath): + os.makedirs(stdFeaturePath) - eventSourcePath = [r"\\192.168.1.28\share\测试视频数据以及日志\海外展厅测试数据\比对数据"] + ''' + source_type: + "source": eventSourcePath 为 Yolo-Resnet-Tracker 输出的 pickle 文件 + "data": eventSourcePath 为 包含 data 文件的文件夹 + ''' + source_type = 'realtime' # 'source', 'data', 'realtime' + eventSourcePath = r"\\192.168.1.28\share\测试视频数据以及日志\全实时测试\V12\2025-2-21\比对\video" - resultPath = r"\\192.168.1.28\share\测试视频数据以及日志\海外展厅测试数据\testing\evtobjs" - eventDataPath = os.path.join(resultPath, "evtobjs") - similPath = os.path.join(resultPath, "simidata") + resultPath = r"\\192.168.1.28\share\测试视频数据以及日志\全实时测试\testing" + eventDataPath = os.path.join(resultPath, "evtobjs_data") + similPath = os.path.join(resultPath, "simidata_data") if not os.path.exists(eventDataPath): os.makedirs(eventDataPath) if not os.path.exists(similPath): diff --git a/contrast/onsite_contrast_pr.py b/contrast/onsite_contrast_pr.py index f774d4f..e6e727d 100644 --- a/contrast/onsite_contrast_pr.py +++ b/contrast/onsite_contrast_pr.py @@ -1,8 +1,13 @@ + # -*- coding: utf-8 -*- """ Created on Wed Sep 11 11:57:30 2024 - 永辉现场试验输出数据的 1:1 性能评估 - 适用于202410前数据保存版本的,需调用 OneToOneCompare.txt + contrast_pr: + 直接利用测试数据中的 data 文件进行 1:1、1:SN、1:n 性能评估 + + test_compare: + 永辉现场试验输出数据的 1:1 性能评估 + 适用于202410前数据保存版本的,需调用 OneToOneCompare.txt @author: ym """ import os @@ -147,6 +152,7 @@ def contrast_pr(paths): errorFile_one2one, errorFile_one2SN, errorFile_one2n = [], [], [] + errorFile = [] for path in evtpaths: barcode = path.stem.split('_')[-1] datapath = path.joinpath('process.data') @@ -167,6 +173,10 @@ def contrast_pr(paths): one2SN = SimiDict['one2SN'] one2n = SimiDict['one2n'] + if len(one2one)+len(one2SN)+len(one2n) == 0: + errorFile.append(path.stem) + + '''================== 0. 1:1 ===================''' barcodes, similars = [], [] for dt in one2one: @@ -176,6 +186,8 @@ def contrast_pr(paths): continue barcodes.append(dt['barcode']) similars.append(dt['similar']) + + if len(barcodes)==len(similars) and len(barcodes)!=0: ## 扫A放A, 扫A放B场景 simAA = [similars[i] for i in range(len(barcodes)) if barcodes[i]==barcode] @@ -466,15 +478,15 @@ def contrast_pr(paths): plt.show() - fpsnErrFile = str(paths.joinpath("one2SN_Error.txt")) - with open(fpsnErrFile, "w") as file: - for item in fp_events: - file.write(item + "\n") + # fpsnErrFile = str(paths.joinpath("one2SN_Error.txt")) + # with open(fpsnErrFile, "w") as file: + # for item in fp_events: + # file.write(item + "\n") - fpErrFile = str(paths.joinpath("one2n_Error.txt")) - with open(fpErrFile, "w") as file: - for item in fpevents: - file.write(item + "\n") + # fpErrFile = str(paths.joinpath("one2n_Error.txt")) + # with open(fpErrFile, "w") as file: + # for item in fpevents: + # file.write(item + "\n") @@ -495,7 +507,7 @@ def contrast_pr(paths): if __name__ == "__main__": - evtpaths = r"\\192.168.1.28\share\测试视频数据以及日志\算法全流程测试\202412\images" + evtpaths = r"\\192.168.1.28\share\测试视频数据以及日志\全实时测试\V12\2025-2-21\比对\video" contrast_pr(evtpaths) diff --git a/contrast/utils/__pycache__/event.cpython-39.pyc b/contrast/utils/__pycache__/event.cpython-39.pyc index 4627a1a0b19c5f30f7191daa3ccce5697fd9461e..f5d9da14afb54b5ac93021622a4c6e14d663762f 100644 GIT binary patch delta 1301 zcmY+CU2GIp6vyYx&hAcUcV}mJ>Bshi*4?e?CbgPss!jlUoxmKXc}+mG#>1aereEjus%K;qQmlZa+aP9 zvd-O z8njLK4L>Zx6>BefwLP91i3#E{-H!;PPA<=K+p?M;g~EB=TNDvi9*0WyJmn>LrY&fJ z>Pa`=Am0>b-Dzkw^2|y~mK?RmkvdKj}Mus#T09x{?TxslO36FLL&ZU_ z9T}&A5g-881Cu}!cn5HRcY(9ODqsV!5zv7};C;XZHUXP~DMr*g2lI^F()Z{@+Itqx zTHrkJ5pV(c0QeaA5cmZ66u1an0uBL}<&C~awv7^B(XH%j6sIA++r4D!k&sOe+qQ0# zNfG``j#&Ixx1VjB(md+$9E-;zdW(*l#lD(j1<$V@Bib!b_Ftug!7BsTb$Ut8L%yav_C3&o{fv(GyLXHjv?Sq>`&Q-{L5O@f-oPpQVe^;e%iGj%F`)t~{tYrG+7n}0O+xj_^DlgXM+$JJ@O#z8)_ zje4Xula~>8NXFP<8S~xjJSE=Yh3XGrIZ`)zHb!n%luU+4CPw|&@PcswcqH7~~4`jd@a2Di%5B7oyAiz2B zAuz!{FbSr>dGG;@~KzYtB~dbBC*k=E5D`g0aYwyKuM>>`8ez+@BvXYZTl7 zKZ2K-F3q|>Avg&h1iye^!7ZRhDt6x===}`-1ed@~^>Ae;z3aCsuZVRTZ(&(?@e@Mm zz0P@M``^0N_}CzQuXc^SO{?nG*r!>XhB^)h@Am!HIb4uobHloY0L wb85qVSBmfRNO+(&qW2Kk4sv*vO{zWKuQqI|^a=hV!YZ2m>86IZ#k5WO2TKAhbpQYW diff --git a/contrast/utils/event.py b/contrast/utils/event.py index 4cb7367..34c83a0 100644 --- a/contrast/utils/event.py +++ b/contrast/utils/event.py @@ -17,6 +17,12 @@ from tracking.utils.drawtracks import drawTrack from tracking.utils.read_data import extract_data, read_tracking_output, read_similar from tracking.utils.read_data import extract_data_realtime, read_tracking_output_realtime + +# import platform +# import pathlib +# plt = platform.system() + + IMG_FORMAT = ['.bmp', '.jpg', '.jpeg', '.png'] VID_FORMAT = ['.mp4', '.avi'] @@ -166,7 +172,9 @@ class ShoppingEvent: return kdata, outdata - def from_source_pkl(self, eventpath): + def from_source_pkl(self, eventpath): + # if plt == 'Windows': + # pathlib.PosixPath = pathlib.WindowsPath with open(eventpath, 'rb') as f: ShoppingDict = pickle.load(f) @@ -202,10 +210,10 @@ class ShoppingEvent: self.front_trackingfeats = frontdata[5] '''===========对应于 0/1_tracking_output.data =============================''' - self.back_boxes = back_outdata - self.back_feats = back_outdata - self.front_boxes = front_outdata - self.front_feats = front_outdata + self.back_boxes = back_outdata[0] + self.back_feats = back_outdata[1] + self.front_boxes = front_outdata[0] + self.front_feats = front_outdata[1] def from_datafile(self, eventpath): @@ -296,13 +304,13 @@ class ShoppingEvent: self.front_feats = tracking_output_feats def from_realtime_datafile(self, eventpath): - # evtList = self.evtname.split('_') - # if len(evtList)>=2 and len(evtList[-1])>=10 and evtList[-1].isdigit(): - # self.barcode = evtList[-1] - # if len(evtList)==3 and evtList[-1]== evtList[-2]: - # self.evtType = 'input' - # else: - # self.evtType = 'other' + evtList = self.evtname.split('_') + if len(evtList)>=2 and len(evtList[-1])>=10 and evtList[-1].isdigit(): + self.barcode = evtList[-1] + if len(evtList)==3 and evtList[-1]== evtList[-2]: + self.evtType = 'input' + else: + self.evtType = 'other' '''================ path of video =============''' for vidname in os.listdir(eventpath): @@ -330,7 +338,7 @@ class ShoppingEvent: if not os.path.isfile(datapath): continue CamerType = dataname.split('_')[0] '''========== 0/1_track.data ==========''' - if dataname.find("_track.data")>0: + if dataname.find("_tracker.data")>0: trackerboxes, trackerfeats = extract_data_realtime(datapath) if CamerType == '0': self.back_trackerboxes = trackerboxes diff --git a/pipeline.py b/pipeline.py index 7a7d3c9..68e61dd 100644 --- a/pipeline.py +++ b/pipeline.py @@ -136,7 +136,7 @@ def pipeline( bname = os.path.basename(vpath[0]) if not isinstance(vpath, list): CameraEvent["videoPath"] = vpath - bname = os.path.basename(vpath) + bname = os.path.basename(vpath).split('.')[0] if bname.split('_')[0] == "0" or bname.find('back')>=0: CameraEvent["cameraType"] = "back" if bname.split('_')[0] == "1" or bname.find('front')>=0: @@ -264,19 +264,18 @@ def pipeline( def main(): ''' 函数:pipeline(),遍历事件文件夹,选择类型 image 或 video, - ''' - + ''' parmDict = {} - evtdir = r"\\192.168.1.28\share\测试视频数据以及日志\算法全流程测试\202412\images" + evtdir = r"\\192.168.1.28\share\测试视频数据以及日志\全实时测试\V12\2025-2-21\比对\video" parmDict["SourceType"] = "video" # video, image - parmDict["savepath"] = r"\\192.168.1.28\share\测试视频数据以及日志\算法全流程测试\202412\result" + parmDict["savepath"] = r"\\192.168.1.28\share\测试视频数据以及日志\全实时测试\result_V12" parmDict["weights"] = r'D:\DetectTracking\ckpts\best_cls10_0906.pt' evtdir = Path(evtdir) k, errEvents = 0, [] for item in evtdir.iterdir(): if item.is_dir(): - # item = evtdir/Path("20241209-160201-b97f7a0e-7322-4375-9f17-c475500097e9_6926265317292") + item = evtdir/Path("20250221-160936-893_6942506204855_6942506204855") parmDict["eventpath"] = item # pipeline(**parmDict) @@ -284,9 +283,9 @@ def main(): pipeline(**parmDict) except Exception as e: errEvents.append(str(item)) - # k+=1 - # if k==100: - # break + k+=1 + if k==1: + break errfile = os.path.join(parmDict["savepath"], f'error_events.txt') with open(errfile, 'w', encoding='utf-8') as f: diff --git a/realtime/__pycache__/event_time_specify.cpython-39.pyc b/realtime/__pycache__/event_time_specify.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..4035f43dd65d1bc1abb474e72b38523c2935f4cb GIT binary patch literal 6855 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 literal 0 HcmV?d00001 diff --git a/realtime/draw_traj.py b/realtime/draw_traj.py new file mode 100644 index 0000000..7158e4a --- /dev/null +++ b/realtime/draw_traj.py @@ -0,0 +1,86 @@ +# -*- coding: utf-8 -*- +""" +Created on Fri Feb 21 14:28:59 2025 + +@author: ym +""" + +import os +import numpy as np +from pathlib import Path + +import sys +sys.path.append(r"D:\DetectTracking") +from contrast.utils.event import ShoppingEvent +from tracking.utils.read_data import read_weight_sensor, extract_data_realtime, read_tracking_output_realtime +from tracking.utils.read_data import read_process + + + +def read_tracker_data(filepath): + pass + + +def read_tracking_output_data(filepath): + pass + + +def read_process_data(filepath): + path + + + + + + + + + +def main(): + evtPaths = r"\\192.168.1.28\share\测试视频数据以及日志\全实时测试\V12\2025-2-21\persist" + evtPaths = Path(evtPaths) + + for evtpath in evtPaths.iterdir(): + + ## 1. 读取重力数据 + if evtpath.name.find("Weight")>=0 and evtpath.name.find(".txt")>0: + weight_data = read_weight_sensor(evtpath) + + if not evtpath.is_dir(): + continue + + ## 2. 读取事件data数据 + for fpath in evtpath.iterdir(): + + fname = fpath.name + if fname.find("tracker.data"): + pass + + if fname.find("tracking_output.data"): + pass + + + if fname.find("process.data") >=0: + pass + + + fpath = str(fpath) + + + + + + + + + + + + + + + pass + + +if __name__ == "__main__": + main() \ No newline at end of file diff --git a/realtime/event_time_specify.py b/realtime/event_time_specify.py index b0f1568..662bebb 100644 --- a/realtime/event_time_specify.py +++ b/realtime/event_time_specify.py @@ -9,11 +9,10 @@ import numpy as np # from matplotlib.pylab import mpl # mpl.use('Qt5Agg') import matplotlib.pyplot as plt -from move_detect import MoveDetect import sys sys.path.append(r"D:\DetectTracking") - +from move_detect import MoveDetect # from tracking.utils.read_data import extract_data, read_deletedBarcode_file, read_tracking_output, read_weight_timeConsuming from tracking.utils.read_data import read_weight_timeConsuming diff --git a/realtime/full_realtime.py b/realtime/full_realtime.py index 018a1c5..ec5ef99 100644 --- a/realtime/full_realtime.py +++ b/realtime/full_realtime.py @@ -9,9 +9,10 @@ import sys import numpy as np import matplotlib.pyplot as plt from datetime import datetime -from contrast.utils.event import ShoppingEvent sys.path.append(r"D:\DetectTracking") + +from contrast.utils.event import ShoppingEvent from tracking.utils.read_data import read_weight_sensor, extract_data_realtime, read_tracking_output_realtime from tracking.utils.read_data import read_process diff --git a/realtime/time_devide.py b/realtime/time_devide.py index fa8f45b..2daaed9 100644 --- a/realtime/time_devide.py +++ b/realtime/time_devide.py @@ -13,10 +13,14 @@ from pathlib import Path import glob import numpy as np import copy - import matplotlib.pyplot as plt +from collections import OrderedDict + +from event_time_specify import devide_motion_state #, state_measure + +import sys +sys.path.append(r"D:\DetectTracking") from imgs_inference import run_yolo -from event_time_specify import devide_motion_state#, state_measure from tracking.utils.read_data import read_weight_sensor # IMG_FORMATS = 'bmp', 'dng', 'jpeg', 'jpg', 'mpo', 'png', 'tif', 'tiff', 'webp', 'pfm' # include image suffixes @@ -400,8 +404,8 @@ def splitevent(imgpath, MotionSlice): def runyolo(): - eventdirs = r"\\192.168.1.28\share\realtime\eventdata" - savedir = r"\\192.168.1.28\share\realtime\result" + eventdirs = r"\\192.168.1.28\share\个人文件\wqg\realtime\eventdata" + savedir = r"\\192.168.1.28\share\个人文件\wqg\realtime\result" k = 0 for edir in os.listdir(eventdirs): @@ -419,12 +423,40 @@ def run_tracking(trackboxes, MotionSlice): pass - +def read_wsensor(filepath): + WeightDict = OrderedDict() + with open(filepath, 'r', encoding='utf-8') as f: + lines = f.readlines() + clean_lines = [line.strip().replace("'", '').replace('"', '') for line in lines] + for i, line in enumerate(clean_lines): + line = line.strip() + + line = line.strip() + + if line.find(':') < 0: continue + # if line.find("Weight") >= 0: + # label = "Weight" + # continue + + + keyword = line.split(':')[0] + value = line.split(':')[1] + + # if label == "Weight": + if len(keyword) and len(value): + vdata = [float(s) for s in value.split(',') if len(s)] + WeightDict[keyword] = vdata[-1] + + + weights = [(float(t), w) for t, w in WeightDict.items()] + weights = np.array(weights).astype(np.int64) + + return weights def show_seri(): datapath = r"\\192.168.1.28\share\个人文件\wqg\realtime\eventdata\1731316835560" - savedir = r"D:\DetectTracking\realtime\1" + savedir = r"\\192.168.1.28\share\个人文件\wqg\realtime\1" imgdir = datapath.split('\\')[-2] + "_" + datapath.split('\\')[-1] @@ -450,7 +482,7 @@ def show_seri(): '''===============读取重力信号数据===================''' seneorfile = os.path.join(datapath, 'sensor.txt') - weights = read_weight_sensor(seneorfile) + weights = read_wsensor(seneorfile) # weights = [(float(t), w) for t, w in WeightDict.items()] # weights = np.array(weights) @@ -471,10 +503,8 @@ def show_seri(): def main(): # runyolo() - show_seri() - - + if __name__ == '__main__': main() diff --git a/tracking/dotrack/__pycache__/dotracks_back.cpython-39.pyc b/tracking/dotrack/__pycache__/dotracks_back.cpython-39.pyc index c920469d02e604a94aeea59c0984818f2168bafb..7a9a101d1c8704270c3c3a9039b598fa1c3f3462 100644 GIT binary patch delta 319 zcmdmNw$+R`k(ZZ?0SGpEO-Se8$Xmuzd8674|^Xf4=P4?ndXLQ_L z#Cw*RgFP)LKe5EjWU{NEKcma$se(4l99}>JG#QJ0Cf^j1kq7{Bn2H#I)JrxXQRE9G z{EGZ1^NLDxM}hFD;tt{*V{A3EW_3D}eZ}lf9%~ F0sw|$b0f_5g7@85QnLV5lFpc0}@3(K*F!c zZ!*8Aq-_L9AOJ)J0*PDfV55wUZgHmOmFA`vC6=TXg@9yTK(ZWZsfi_}MXAL_!631i z$*H2+KnG0}H5LFVy2T2TFTTZ?S>(R?ifB6{qyOX>aR+gb@wb?ZOLL1%fhL z_sN^Z7cja{4w1;`t_KNlgNTO7=Ol8`_+pb|BokGfK++B%!W=|YfCxhn(F7uzK}5^s Thmr~0VBaW!_%4%uq+S95s}@vc diff --git a/tracking/dotrack/__pycache__/dotracks_front.cpython-39.pyc b/tracking/dotrack/__pycache__/dotracks_front.cpython-39.pyc index 35b16cb8db6a9957f651d97adff5076c6901dc60..bacadfecf41131ee7e5ddcfcc2306a2d19a13f85 100644 GIT binary patch delta 36 qcmZ3lvr&gPk(ZZ?0SMZ?CZv~d`6lUQCq(m?yk`IyP5bvs3im-)(C_`Nusk0rE&=GtHwUhQ=XPB9 z6G9VR7JMmOj}#Cp5Ml^z927t4K;B8O1Vhpqq<7I9!SY>QNY|r9fZT&Tf>4dH9bpT? zRt`++H-~h?B=_RXeF!@c?nhXTP!Nf%451t00lL353A^%FOApT%J6tvnJL$S`DUB?q zB|>(TZ%|w_IzL$)=|-K3r=aUWbQkBq0wQsGD%qRfYZekWZ>nEQm_|YPY%t8eVJMLl zfskIhw%mYZ{_XOe^EHJkUx^7NjrhA>W=$K+K9Vp8n4}y1`j9rQ4VA1$@F7$ptf4MiT!w#-Sik)cGN_J)=9|{~=pe&bqShJ^h)YaY-#Mtc(FER|5;yN@mxhYH-e)%&m{{-A>hw z78RCp+k_?So1H1;Gfs68Uqi;%a#?@Im+`7)9Trp0_zwf;i#seC$G9uQrGbTuadD?t zW?lRNr@!G-n&Z<=Fi5AGLoG8di^bF&b=*-gH!9~gMHQB8z;t8+he53vw2WCvgi9;t zax1yqz|9bD#y%U2e|nC`%F%@X#NtBDuXA`GGa9N===5x2j9;Gyhy? zj*e(`J(K58OiF2?@#iK_JbC@h*~!OWpS*CE+g-c()U}I`{P*bF|9k(*sZ--s zku_@puOV5f&LYup>|#1gZ$vu5MmwtwI7;8D4#EHF z7u99(I-RNxHyn7#nssEQj5KcN1&B|FD)D1<4)XrBCo0CW7(2)S?WpO2kLc-|*u1{E zF1+Cv33--osBH>j7DP8?Qn#ij2TT$bE$eKptFwl$B`q0C&(bWImJA#QV$Z-hOjwBB zwBq;~>mK_y3vpnyHiC&@PTf%Tq;As7wHI=tAuq_;Y^In)H??77y1Sr`rRcz+r_7e9 zQbdMugVoPMl?m(8}f1<{Z(E|?sl(uyRU%%@iT3;gr-Y@pxN z+_msb=|ugVOS60@b5EDEZjR1T9;G+xW2+Wu5*=RjUQx(cxi_m>@rfFqu3WmOVNK2a z+%qqKU+NJn8vE`>Jcp1&cm&}T2L>w&Ima?R zXyYw~h`i(bp1i;z?jf4Fm!$4ar&WVIkJG0)Y!^59N9de+*)FI-5%bM^n-f9f?d6{c zcxPvBDrX|xmvHVygfj?d5nkrN+@eSD&;%>mgFzU@VXSh!x>vd zXlP{yUd^9g`4vdw?Hr?{&1v{6z21CGI)~P;(futkh|<5e?B*D3?S?1lV5?Gbj4vK^ zFW;^YYpbe;4JB^dxM_zHBu~-vt>v(We%#stUDOu4!*d+nP=sgc+E^_dq5ZKqZ!sUn zH29R(wXKhw#KliJD0b$;Z-HL?Fd%a`KHb&`pXdM4#=isb92A)h@CS2Z{HjifjwAcS zX+1?A=Cn{pJ;*-ipxEPX^lJ#m319|C;po&O7Ja z({t|m-E;e8?3b6EA*a)Bq95zE=t$RR&M&MUiPvywXl%z;$;O0!RgOyB_+aEkB`T47 z)}5#_SY*$Yqx@H9X-Ko13-8`j3v zsD`^hvmIa;z%u~l07jA^9qhy2e8z ztRO70+ab+n#$fgY-1E3Hf zNbVQ%xMjBH`Nq1QXLS(iqiehB3%#*)J*J-BXra012%p@b(EL+Z4&drnh z@>2h?{pPqe&c(R7G)kP6Ppiz)E#${cc>h!rwOeI@y<71lNt7Qzx5-cCfmI{%@3!h9 zIpwQ&!w#`QsdIZ2b!1e-b!-Y95NmmQ7@=rVS@CItP0cmilG+U2s%pwabm`bb#Pt-Y zHmo%_iRoB@H@gu(wL`{4It<>a6N-<3CqJgl9FAZa&(Jr?dPojwq_483{wy8n(F&?F zAr56B0c8N11#=da(vaDbfilbj%0bnZY?N)rCzJD)y{K>nXXsMK3FB&r6OUNIF``&f zMdPF3lwk8`UhLfTuZ3e^f#{HUn1s8uQG9|FSCtm0X3(0-@GB5|hRs`C)rU?e7piWo zo{AT$x348Nc~Je>`Y2tg+m{HeYBMX!s3Uu80&Q#ZWMh~ONXAO=C18H}>V)znRH z*K96d-3Q%CFF18_Qjz;%hO)LS<=t63f-WULs4cYo7sH6ZVM_w?#;*cs0EYlxqoAWI zqX|I3BbNHMFlLQ_OB$c0AUUw2P2=$PNJNg}GoU_4q0hL>r>VGnH?CnNt9<#ewiss= z!;z&oI~>%dszG8!UjXSmz(oK8@H(k#ELjI<7ry}jv}A0=FB#2iJc=$Se{cK&aqMzz zBH#EU=osm2p5@*G-?z!v%>h(L_?AJ62V3@_1o^5(Y=~3i5&OnIbwX(?nTU##Wye#y zMK^vK7O^IIKw{|^f)pg4Ks)LrQlP>;jog8i5<~lDN^-3FZOhpQT|TnPU|{%9>iH8Yr z_JVYi%mj-z%76U@?FPncaPu^%7tp-3E@$}D!2qrKz{+>QFdMc diff --git a/tracking/utils/read_data.py b/tracking/utils/read_data.py index bbcd2da..80a8ed0 100644 --- a/tracking/utils/read_data.py +++ b/tracking/utils/read_data.py @@ -321,6 +321,8 @@ def read_process(filePath): def read_similar(filePath): + '''1:n时 Dict['type']字段提取和非全实时不一致,无 "=" 字符 ''' + SimiDict = {} SimiDict['one2one'] = [] SimiDict['one2SN'] = [] @@ -386,7 +388,7 @@ def read_similar(filePath): Dict['event'] = label Dict['barcode'] = bcd Dict['similar'] = float(value.split(',')[0]) - Dict['type'] = value.split('=')[-1] + Dict['type'] = value.split(',')[1] one2n_list.append(Dict) if len(one2one_list): SimiDict['one2one'] = one2one_list @@ -403,8 +405,6 @@ def read_weight_sensor(filepath): for i, line in enumerate(clean_lines): line = line.strip() - line = line.strip() - if line.find(':') < 0: continue if line.find("Weight") >= 0: label = "Weight" @@ -415,7 +415,7 @@ def read_weight_sensor(filepath): value = line.split(':')[1] if label == "Weight": - vdata = [float(s) for s in value.split(',') if len(s)] + vdata = [float(s) for s in value.split(',') if len(s) and s.isdigit()] WeightDict[keyword] = vdata[-1]