for bakeup

This commit is contained in:
王庆刚
2024-07-29 18:56:35 +08:00
parent 16543107f3
commit 27d57b21d4
15 changed files with 650 additions and 96 deletions

View File

@ -211,59 +211,45 @@ def do_tracking(fpath, savedir):
'''
# fpath = r'D:\contrast\dataset\1_to_n\709\20240709-102758_6971558612189\1_track.data'
# savedir = r'D:\contrast\dataset\result\20240709-102843_6958770005357_6971558612189\error_6971558612189'
'''1.1 构造 0/1_tracking_output.data 文件地址,读取文件数据'''
imgpath, dfname = os.path.split(fpath)
CamerType = dfname.split('_')[0]
bboxes, ffeats, trackerboxes, tracker_feat_dict, trackingboxes, tracking_feat_dict = extract_data(fpath)
tracking_output_path = os.path.join(imgpath, CamerType + '_tracking_output.data')
if not os.path.isfile(fpath):
print(f"Can't find {dfname} file!")
return
if not os.path.isfile(tracking_output_path):
print(f"Can't find {CamerType}_tracking_output.data file!")
return
if not os.path.isfile(tracking_output_path): return
bboxes, ffeats, trackerboxes, tracker_feat_dict, trackingboxes, tracking_feat_dict = extract_data(fpath)
tracking_output_boxes, _ = read_tracking_output(tracking_output_path)
'''存储画框后的 img'''
'''1.2 分别构造 2 个文件夹,(1) 存储画框后的图像; (2) 运动轨迹对应的 boxes子图'''
save_dir, basename = os.path.split(savedir)
if not os.path.exists(savedir):
os.makedirs(savedir)
'''存储轨迹对应的 boxes子图'''
os.makedirs(savedir)
subimg_dir = os.path.join(save_dir, basename.split('_')[0] + '_subimgs')
if not os.path.exists(subimg_dir):
os.makedirs(subimg_dir)
''' 读取 fpath 中 track.data 文件对应的图像 '''
'''1.3 读取 fpath 中 track.data 文件对应的图像 imgs '''
imgs = read_imgs(imgpath, CamerType)
''' 在 imgs 上画框并保存,如果 trackerboxes 的帧数和 imgs 数不匹配,返回原图'''
imgs_dw = draw_tracking_boxes(imgs, trackerboxes)
if len(imgs_dw)==0:
imgs_dw = [img for img in imgs]
print(f"fpath: {imgpath}, savedir: {savedir}。Tracker输出的图像数和 imgs 中图像数不相等,无法一一匹配并画框")
for i in range(len(imgs_dw)):
img_savepath = os.path.join(savedir, CamerType + "_" + f"{i}.png")
# img = imgs_dw[i]
cv2.imwrite(img_savepath, imgs_dw[i])
if not isinstance(savedir, Path):
savedir = Path(savedir)
save_dir = savedir.parent
'''2. 执行轨迹分析, 保存轨迹分析前后的对比图示'''
traj_graphic = basename + '_' + CamerType
if CamerType == '1':
vts = doFrontTracks(trackerboxes, tracker_feat_dict)
vts.classify()
plt = plot_frameID_y2(vts)
ftpath = save_dir.joinpath(f"{traj_graphic}_front_y2.png")
plt.savefig(str(ftpath))
# ftpath = os.path.join(save_dir, f"{traj_graphic}_front_y2.png")
# plt.savefig(ftpath)
plt.close()
elif CamerType == '0':
vts = doBackTracks(trackerboxes, tracker_feat_dict)
@ -272,28 +258,13 @@ def do_tracking(fpath, savedir):
edgeline = cv2.imread("./shopcart/cart_tempt/edgeline.png")
img = draw_all_trajectories(vts, edgeline, save_dir, traj_graphic)
imgpth = save_dir.joinpath(f"{traj_graphic}_show.png")
cv2.imwrite(str(imgpth), img)
# imgpth = os.path.join(save_dir, f"{traj_graphic}_.png")
# cv2.imwrite(str(imgpth), img)
else:
print("Please check data file!")
for track in vts.Residual:
for *xyxy, tid, conf, cls, fid, bid in track.boxes:
img = imgs[int(fid-1)]
x1, y1, x2, y2 = int(xyxy[0]/2), int(xyxy[1]/2), int(xyxy[2]/2), int(xyxy[3]/2)
subimg = img[y1:y2, x1:x2]
subimg_path = os.path.join(subimg_dir, f'{CamerType}_{int(tid)}_{int(fid-1)}_{int(bid)}.png' )
cv2.imwrite(subimg_path, subimg)
'''================== 现场测试的 tracking() 算法输出 =================='''
'''3 tracking() 算法输出后多轨迹选择问题分析'''
if CamerType == '1':
aline = cv2.imread("./shopcart/cart_tempt/board_ftmp_line.png")
elif CamerType == '0':
@ -320,16 +291,54 @@ def do_tracking(fpath, savedir):
abH, abW = abimg.shape[:2]
cv2.line(abimg, (int(abW/2), 0), (int(abW/2), abH), (128, 255, 128), 2)
algpath = save_dir.joinpath(f"{traj_graphic}_Alg.png")
cv2.imwrite(str(algpath), abimg)
return
# algpath = os.path.join(save_dir, f"{traj_graphic}_alg.png")
# cv2.imwrite(str(algpath), abimg)
'''4. 画框后的图像和子图保存若imgs数与tracker中fid数不匹配只保存原图不保存子图'''
'''4.1 imgs数 < trackerboxes 的 max(fid),返回原图'''
if len(imgs) < np.max(trackerboxes[:,7]):
for i in range(len(imgs)):
img_savepath = os.path.join(savedir, CamerType + "_" + f"{i}.png")
cv2.imwrite(img_savepath, imgs[i])
print(f"fpath: {fpath}, len(imgs) = {len(imgs)} < Tracker max(fid) = {int(np.max(trackerboxes[:,7]))}, 无法匹配画框")
return
'''4.2 在 imgs 上画框并保存'''
imgs_dw = draw_tracking_boxes(imgs, trackerboxes)
for fid, img in imgs_dw:
img_savepath = os.path.join(savedir, CamerType + "_fid_" + f"{fid}.png")
cv2.imwrite(img_savepath, img)
# =============================================================================
# '''4.3.1 保存轨迹分析对应的子图'''
# for track in vts.Residual:
# for *xyxy, tid, conf, cls, fid, bid in track.boxes:
# img = imgs[int(fid-1)]
# x1, y1, x2, y2 = int(xyxy[0]/2), int(xyxy[1]/2), int(xyxy[2]/2), int(xyxy[3]/2)
# subimg = img[y1:y2, x1:x2]
#
# subimg_path = os.path.join(subimg_dir, f'{CamerType}_tid{int(tid)}_{int(fid-1)}_{int(bid)}.png' )
# cv2.imwrite(subimg_path, subimg)
# =============================================================================
'''4.3.2 保存轨迹选择对应的子图'''
for track in tracking_output_boxes:
for *xyxy, tid, conf, cls, fid, bid in track:
img = imgs[int(fid-1)]
x1, y1, x2, y2 = int(xyxy[0]/2), int(xyxy[1]/2), int(xyxy[2]/2), int(xyxy[3]/2)
subimg = img[y1:y2, x1:x2]
subimg_path = os.path.join(subimg_dir, f'{CamerType}_tid{int(tid)}_{int(fid-1)}_{int(bid)}.png' )
cv2.imwrite(subimg_path, subimg)
return abimg
def main_loop():
del_barcode_file = r'\\192.168.1.28\share\测试_202406\deletedBarcode\bad\deletedBarcode_0719_4.txt'
basepath = r'\\192.168.1.28\share\测试_202406\0719\719_4' # 测试数据文件夹地址
SavePath = r'D:\contrast\dataset\result' # 结果保存地址
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' # 测试数据文件夹地址
SavePath = r'D:\contrast\dataset\resultx' # 结果保存地址
prefix = ["getout_", "input_", "error_"]
@ -354,11 +363,16 @@ def main_loop():
savepath = os.path.join(SavePath, sdir)
if not os.path.exists(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 = ''
@ -368,35 +382,56 @@ def main_loop():
enent_name = prefix[i] + name
break
spath = os.path.join(savepath, enent_name)
do_tracking(fpath, spath)
k +=1
if k==1:
break
# 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}')
# k +=1
# if k==1:
# break
def main():
'''
fpath: data文件包括 Pipeline 各模块输出
fpath: data文件地址,该 data 文件包括 Pipeline 各模块输出
save_dir需包含二级目录其中一级目录为轨迹图像
二级目录为与data文件对应的序列图像存储地址。
'''
fpath = r'\\192.168.1.28\share\测试_202406\0719\719_4\20240719-164209_\0_track.data'
save_dir = r'D:\contrast\dataset\result\20240719-164209_6971284204320_6902890247777\getout'
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__":
try:
# main()
main_loop()
except Exception as e:
print(f'Error: {e}')
main_loop()
# main()
# try:
# main_loop()
# except Exception as e:
# print(f'Error: {e}')