From 661489120b60d7413e1473d5b7d82f03b5c19c10 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E5=BA=86=E5=88=9A?= Date: Thu, 2 Jan 2025 18:23:16 +0800 Subject: [PATCH] 20240102 --- contrast/feat_extract/config.py | 2 +- contrast/one2one_contrast.py | 111 ++++++++++++------ pipeline.py | 7 +- .../__pycache__/read_data.cpython-39.pyc | Bin 15814 -> 15843 bytes tracking/utils/read_data.py | 3 +- 5 files changed, 83 insertions(+), 40 deletions(-) diff --git a/contrast/feat_extract/config.py b/contrast/feat_extract/config.py index 463ec75..f0cc387 100644 --- a/contrast/feat_extract/config.py +++ b/contrast/feat_extract/config.py @@ -61,7 +61,7 @@ class Config: test_val = "D:/比对/cl" # test_val = "./data/test_data_100" - test_model = "checkpoints/best_resnet18_v11.pth" + test_model = "checkpoints/best_resnet18_v12.pth" # test_model = "checkpoints/zhanting_res_801.pth" diff --git a/contrast/one2one_contrast.py b/contrast/one2one_contrast.py index 3ee7eb9..f2b2ba3 100644 --- a/contrast/one2one_contrast.py +++ b/contrast/one2one_contrast.py @@ -194,6 +194,9 @@ def simi_calc(event, stdfeat): if len(evtfeat)==0 or len(stdfeat)==0: return None, None, None + evtfeat /= np.linalg.norm(evtfeat, axis=1)[:, None] + stdfeat /= np.linalg.norm(stdfeat, axis=1)[:, None] + matrix = 1 - cdist(evtfeat, stdfeat, 'cosine') matrix[matrix < 0] = 0 @@ -212,19 +215,19 @@ def build_std_evt_dict(): eventDataPath: Event对象地址 ''' - # stdBarcode = [p.stem for p in Path(stdFeaturePath).iterdir() if p.is_file() and p.suffix=='.json'] + stdBarcode = [p.stem for p in Path(stdFeaturePath).iterdir() if p.is_file() and (p.suffix=='.json' or p.suffix=='.pickle')] '''*********** USearch ***********''' - stdFeaturePath = r"D:\contrast\stdlib\v11_test.json" - stdBarcode = [] - stdlib = {} - with open(stdFeaturePath, 'r', encoding='utf-8') as f: - data = json.load(f) - for dic in data['total']: - barcode = dic['key'] - feature = np.array(dic['value']) - stdBarcode.append(barcode) - stdlib[barcode] = feature + # stdFeaturePath = r"D:\contrast\stdlib\v11_test.json" + # stdBarcode = [] + # stdlib = {} + # with open(stdFeaturePath, 'r', encoding='utf-8') as f: + # data = json.load(f) + # for dic in data['total']: + # barcode = dic['key'] + # feature = np.array(dic['value']) + # stdBarcode.append(barcode) + # stdlib[barcode] = feature '''======1. 购物事件列表,该列表中的 Barcode 存在于标准的 stdBarcode 内 ===''' evtList = [(p.stem, p.stem.split('_')[-1]) for p in Path(eventDataPath).iterdir() @@ -237,18 +240,31 @@ def build_std_evt_dict(): barcodes = set([bcd for _, bcd in evtList]) '''======2. 构建用于比对的标准特征字典 =============''' - # stdDict = {} - # for barcode in barcodes: - # stdpath = os.path.join(stdFeaturePath, barcode+'.json') - # with open(stdpath, 'r', encoding='utf-8') as f: - # stddata = json.load(f) - # feat = np.array(stddata["value"]) - # stdDict[barcode] = feat + stdDict = {} + for stdfile in os.listdir(stdFeaturePath): + barcode, ext = os.path.splitext(stdfile) + if barcode not in barcodes: + continue + stdpath = os.path.join(stdFeaturePath, stdfile) + + if ext == ".json": + with open(stdpath, 'r', encoding='utf-8') as f: + stddata = json.load(f) + feat = np.array(stddata["value"]) + stdDict[barcode] = feat + if ext == ".pickle": + with open(stdpath, 'rb') as f: + stddata = pickle.load(f) + feat = stddata["feats_ft32"] + stdDict[barcode] = feat + + + '''*********** USearch ***********''' - stdDict = {} - for barcode in barcodes: - stdDict[barcode] = stdlib[barcode] + # stdDict = {} + # for barcode in barcodes: + # stdDict[barcode] = stdlib[barcode] '''======3. 构建用于比对的操作事件字典 =============''' evtDict = {} @@ -390,7 +406,7 @@ def one2one_simi(evtList, evtDict, stdDict): evtname, stdbcd, label = mergePairs[i] event = evtDict[evtname] if len(event.feats_compose)==0: continue - + stdfeat = stdDict[stdbcd] # float32 simi_mean, simi_max, simi_mfeat = simi_calc(event, stdfeat) @@ -402,7 +418,6 @@ def one2one_simi(evtList, evtDict, stdDict): '''================ float32、16、int8 精度比较与存储 =============''' # data_precision_compare(stdfeat, evtfeat, mergePairs[i], save=True) - return rltdata @@ -488,14 +503,28 @@ def gen_eventdict(sourcePath, saveimg=True): for source_path in sourcePath: evtpath, bname = os.path.split(source_path) - # bname = r"20241126-135911-bdf91cf9-3e9a-426d-94e8-ddf92238e175_6923555210479" - source_path = os.path.join(evtpath, bname) + ## 兼容事件的两种情况:文件夹 和 Yolo-Resnet-Tracker 的输出 + if os.path.isfile(source_path): + bname, ext = os.path.splitext(bname) + evt = bname.split("_") + + evt = bname.split('_') + condt = len(evt)>=2 and evt[-1].isdigit() and len(evt[-1])>=10 + if not condt: continue + # bname = r"20241126-135911-bdf91cf9-3e9a-426d-94e8-ddf92238e175_6923555210479" + # source_path = os.path.join(evtpath, bname) + + # 如果已完成事件生成,则不执行 pickpath = os.path.join(eventDataPath, f"{bname}.pickle") if os.path.isfile(pickpath): continue + # event = ShoppingEvent(source_path, stype="data") + # with open(pickpath, 'wb') as f: + # pickle.dump(event, f) + try: - event = ShoppingEvent(source_path, stype="data") + event = ShoppingEvent(source_path, stype="source") # save_data(event, resultPath) with open(pickpath, 'wb') as f: @@ -521,9 +550,18 @@ def init_std_evt_dict(): bcdList, event_spath = [], [] for evtpath in eventSourcePath: for evtname in os.listdir(evtpath): - evt = evtname.split('_') - dirpath = os.path.join(evtpath, evtname) - if os.path.isfile(dirpath): continue + 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)) @@ -579,15 +617,20 @@ if __name__ == '__main__': (7) similPath: 1:1比对结果存储地址(事件级),在resultPath下 ''' - stdSamplePath = r"\\192.168.1.28\share\数据\已完成数据\展厅数据\v1.0\比对数据\整理\zhantingBase" - stdBarcodePath = r"D:\exhibition\dataset\bcdpath" - stdFeaturePath = r"\\192.168.1.28\share\数据\已完成数据\比对数据\barcode\all_totalBarocde\features_json\v11_barcode_11592" + # stdSamplePath = r"\\192.168.1.28\share\数据\已完成数据\展厅数据\v1.0\比对数据\整理\zhantingBase" + # 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"\\192.168.1.28\share\测试视频数据以及日志\算法全流程测试\202412\images"] - resultPath = r"\\192.168.1.28\share\测试视频数据以及日志\算法全流程测试\202412\result" + + stdSamplePath = r"\\192.168.1.28\share\数据\已完成数据\比对数据\barcode\all_totalBarocde\totalBarcode" + stdBarcodePath = r"D:\全实时\source_data\bcdpath" + stdFeaturePath = r"D:\全实时\source_data\stdfeats" + + eventSourcePath = [r"D:\全实时\result\pipeline\pipeline"] + resultPath = r"D:\全实时\result\pipeline" eventDataPath = os.path.join(resultPath, "evtobjs") diff --git a/pipeline.py b/pipeline.py index cf9adad..4cbafa3 100644 --- a/pipeline.py +++ b/pipeline.py @@ -254,11 +254,10 @@ def main(): ''' 函数:pipeline(),遍历事件文件夹,选择类型 image 或 video, ''' - evtdir = r"D:\全实时\source_data\2024122416" - evtdir = Path(evtdir) - + evtdir = r"\\192.168.1.28\share\测试视频数据以及日志\算法全流程测试\202412\images" + evtdir = Path(evtdir) parmDict = {} - parmDict["savepath"] = r"D:\全实时\result\pipeline" + parmDict["savepath"] = r"D:\contrast\202412测试" parmDict["SourceType"] = "video" # video, image parmDict["stdfeat_path"] = None diff --git a/tracking/utils/__pycache__/read_data.cpython-39.pyc b/tracking/utils/__pycache__/read_data.cpython-39.pyc index b60e5fe21555f527f9065399e77a129ea2f53c51..f9eace9b7f7f84ebaffab3fe03c96891357ada99 100644 GIT binary patch delta 3394 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 lT*4dr5mFD>m4heCYSc3IxLT#wsm0: continue if line.endswith(','): line = line[:-1]