pipeline.py 等更新

This commit is contained in:
王庆刚
2025-01-21 18:22:56 +08:00
parent bfe7bc0fd5
commit 64248b1557
15 changed files with 106 additions and 77 deletions

View File

@ -92,9 +92,9 @@ def simi_calc(event, o2nevt, typee=None):
feat2 = o2nevt.front_feats
'''自定义事件特征选择'''
if typee==3:
feat1 = event.feats_compose
feat2 = o2nevt.feats_compose
if typee==3 and len(event.feats_compose) and len(o2nevt.feats_compose):
feat1 = [event.feats_compose]
feat2 = [o2nevt.feats_compose]
if len(feat1) and len(feat2):
@ -109,15 +109,18 @@ def one2n_pr(evtDicts, pattern=1):
'''
pattern:
1: process.data 中记录的相似度
2: 根据 process.data 中标记的 type 选择特征计算
3: 以其它方式选择特征计算
2: 根据 process.data 中标记的 type 选择特征计算相似度
3: 以其它方式选择特征计算相似度
'''
tpevents, fnevents, fpevents, tnevents = [], [], [], []
tpsimi, fnsimi, tnsimi, fpsimi = [], [], [], []
errorFile_one2n = []
one2nFile, errorFile_one2n = [], []
for evtname, event in evtDicts.items():
evt_names, evt_barcodes, evt_similars, evt_types = [], [], [], []
if len(event.barcode)==0:
continue
for ndict in event.one2n:
nname = ndict["event"]
@ -149,6 +152,13 @@ def one2n_pr(evtDicts, pattern=1):
continue
evt_similars.append(simival)
## process.data的oneTon的各项中均不包括当前事件的barcode
if event.barcode not in evt_barcodes:
errorFile_one2n.append(evtname)
continue
else:
one2nFile.append(evtname)
if len(evt_names)==len(evt_barcodes) and len(evt_barcodes)==len(evt_similars) \
and len(evt_similars)==len(evt_types) and len(evt_names)>0:
@ -166,7 +176,7 @@ def one2n_pr(evtDicts, pattern=1):
elif bcd!=event.barcode and simi!=maxsim:
tnsimi.append(simi)
tnevents.append(evtname)
elif bcd!=event.barcode and simi==maxsim and event.barcode in evt_barcodes:
elif bcd!=event.barcode and simi==maxsim:
fpsimi.append(simi)
fpevents.append(evtname)
else:
@ -187,7 +197,7 @@ def one2n_pr(evtDicts, pattern=1):
TN = sum(np.array(tnsimi) < th)
PPrecise.append(TP/(TP+FP+1e-6))
PRecall.append(TP/(len(tpsimi)+len(fnsimi)+1e-6))
PRecall.append(TP/(len(one2nFile)+1e-6))
NPrecise.append(TN/(TN+FN+1e-6))
NRecall.append(TN/(len(tnsimi)+len(fpsimi)+1e-6))
@ -202,23 +212,23 @@ def one2n_pr(evtDicts, pattern=1):
ax.set_ylim([0, 1])
ax.grid(True)
ax.set_title('1:n Precise & Recall')
ax.set_xlabel(f"Event Num: {len(tpsimi)+len(fnsimi)}")
ax.set_xlabel(f"Event Num: {len(one2nFile)}")
ax.legend()
plt.show()
## ============================= 1:n 直方图'''
fig, axes = plt.subplots(2, 2)
axes[0, 0].hist(tpsimi, bins=60, range=(-0.2, 1), edgecolor='black')
axes[0, 0].set_xlim([-0.2, 1])
axes[0, 0].set_title('TP')
axes[0, 0].set_title(f'TP: {len(tpsimi)}')
axes[0, 1].hist(fpsimi, bins=60, range=(-0.2, 1), edgecolor='black')
axes[0, 1].set_xlim([-0.2, 1])
axes[0, 1].set_title('FP')
axes[0, 1].set_title(f'FP: {len(fpsimi)}')
axes[1, 0].hist(tnsimi, bins=60, range=(-0.2, 1), edgecolor='black')
axes[1, 0].set_xlim([-0.2, 1])
axes[1, 0].set_title('TN')
axes[1, 0].set_title(f'TN: {len(tnsimi)}')
axes[1, 1].hist(fnsimi, bins=60, range=(-0.2, 1), edgecolor='black')
axes[1, 1].set_xlim([-0.2, 1])
axes[1, 1].set_title('FN')
axes[1, 1].set_title(f'FN: {len(fnsimi)}')
plt.show()
return fpevents
@ -226,14 +236,14 @@ def one2n_pr(evtDicts, pattern=1):
def main():
'''1. 生成事件字典并保存至 eventDataPath, 只需运行一次 '''
init_eventdict(eventSourcePath, stype="source")
init_eventdict(eventSourcePath, stype="data")
'''2. 读取事件字典 '''
evtDicts = read_eventdict(eventDataPath)
'''3. 1:n 比对事件评估 '''
fpevents = one2n_pr(evtDicts, pattern=3)
fpevents = one2n_pr(evtDicts, pattern=1)
fpErrFile = str(Path(resultPath).joinpath("one2n_fp_Error.txt"))
with open(fpErrFile, "w") as file:
@ -243,15 +253,16 @@ def main():
if __name__ == '__main__':
eventSourcePath = r"\\192.168.1.28\share\测试视频数据以及日志\算法全流程测试\202412\result\ShoppingDict_pkfile"
resultPath = r"\\192.168.1.28\share\测试视频数据以及日志\算法全流程测试\202412\result\contrast"
eventSourcePath = r"\\192.168.1.28\share\测试视频数据以及日志\海外展厅测试数据\比对数据"
resultPath = r"\\192.168.1.28\share\测试视频数据以及日志\海外展厅测试数据\testing"
eventDataPath = os.path.join(resultPath, "evtobjs")
similPath = os.path.join(resultPath, "simidata")
if not os.path.exists(eventDataPath):
os.makedirs(eventDataPath)
if not os.path.exists(similPath):
os.makedirs(similPath)
# similPath = os.path.join(resultPath, "simidata")
# if not os.path.exists(similPath):
# os.makedirs(similPath)
main()