This commit is contained in:
王庆刚
2024-11-08 08:52:56 +08:00
parent 5ecc1285d4
commit c47894ddc0
11 changed files with 562 additions and 644 deletions

View File

@ -285,6 +285,38 @@ def boxing_img(det, img, line_width=3):
return imgx
def array2list(bboxes):
track_fids = np.unique(bboxes[:, 7].astype(int))
track_fids.sort()
lboxes = []
for f_id in track_fids:
# print(f"The ID is: {t_id}")
idx = np.where(bboxes[:, 7] == f_id)[0]
box = bboxes[idx, :]
lboxes.append(box)
assert len(set(box[:, 4])) == len(box), "Please check!!!"
return lboxes
def get_subimgs(imgs, tracks, scale=2):
bboxes = []
if len(tracks):
bboxes = array2list(tracks)
subimgs = []
for i, boxes in enumerate(bboxes):
fid = int(boxes[0, 7])
for *xyxy, tid, conf, cls, fid, bid in boxes:
pt2 = [p/scale for p in xyxy]
x1, y1, x2, y2 = (int(pt2[0]), int(pt2[1])), (int(pt2[2]), int(pt2[3]))
subimgs.append((int(fid), int(bid), imgs[fid-1][y1:y2, x1:x2]))
return subimgs
def draw_tracking_boxes(imgs, tracks, scale=2):
'''需要确保 imgs 覆盖tracks中的帧ID数
tracks: [x1, y1, x2, y2, track_id, score, cls, frame_index, box_index]
@ -295,27 +327,15 @@ def draw_tracking_boxes(imgs, tracks, scale=2):
'''
def array2list(bboxes):
track_fids = np.unique(bboxes[:, 7].astype(int))
track_fids.sort()
lboxes = []
for f_id in track_fids:
# print(f"The ID is: {t_id}")
idx = np.where(bboxes[:, 7] == f_id)[0]
box = bboxes[idx, :]
lboxes.append(box)
assert len(set(box[:, 4])) == len(box), "Please check!!!"
return lboxes
bboxes = array2list(tracks)
bboxes = []
if len(tracks):
bboxes = array2list(tracks)
# if len(bboxes)!=len(imgs):
# return False, imgs
subimgs = []
annimgs = []
for i, boxes in enumerate(bboxes):
fid = int(boxes[0, 7])
annotator = Annotator(imgs[fid-1].copy())
@ -331,11 +351,11 @@ def draw_tracking_boxes(imgs, tracks, scale=2):
pt2 = [p/scale for p in xyxy]
annotator.box_label(pt2, label, color=color)
img = annotator.result()
subimgs.append((fid, img))
annimgs.append((int(fid), img))
return subimgs
return annimgs

View File

@ -37,6 +37,9 @@ def find_samebox_in_array(arr, target):
def extract_data(datapath):
'''
0/1_track.data 数据读取
'''
bboxes, ffeats = [], []
trackerboxes = np.empty((0, 9), dtype=np.float64)
@ -147,8 +150,15 @@ def extract_data(datapath):
return bboxes, ffeats, trackerboxes, tracker_feat_dict, trackingboxes, tracking_feat_dict
def read_tracking_output(filepath):
'''
0/1_tracking_output.data 数据读取
'''
boxes = []
feats = []
if not os.path.isfile(filepath):
return np.array(boxes), np.array(feats)
with open(filepath, 'r', encoding='utf-8') as file:
for line in file:
line = line.strip() # 去除行尾的换行符和可能的空白字符
@ -176,7 +186,6 @@ def read_deletedBarcode_file(filePath):
split_flag, all_list = False, []
dict, barcode_list, similarity_list = {}, [], []
clean_lines = [line.strip().replace("'", '').replace('"', '') for line in lines]
for i, line in enumerate(clean_lines):
@ -199,6 +208,7 @@ def read_deletedBarcode_file(filePath):
if label == 'SeqDir':
dict['SeqDir'] = value
dict['filetype'] = "deletedBarcode"
if label == 'Deleted':
dict['Deleted'] = value
if label == 'List':
@ -259,15 +269,19 @@ def read_returnGoods_file(filePath):
if label == 'SeqDir':
dict['SeqDir'] = value
dict['Deleted'] = value.split('_')[-1]
dict['filetype'] = "returnGoods"
if label == 'List':
split_flag = True
continue
if split_flag:
bcd = label.split('_')[-1]
# event_list.append(label + '_' + bcd)
event_list.append(label)
barcode_list.append(label.split('_')[-1])
barcode_list.append(bcd)
similarity_list.append(value.split(',')[0])
type_list.append(value.split('=')[-1])
if len(barcode_list): dict['barcode'] = barcode_list
if len(similarity_list): dict['similarity'] = similarity_list
if len(event_list): dict['event'] = event_list
@ -279,33 +293,51 @@ def read_returnGoods_file(filePath):
# =============================================================================
# def read_seneor(filepath):
# WeightDict = OrderedDict()
# with open(filepath, 'r', encoding='utf-8') as f:
# lines = f.readlines()
# for i, line in enumerate(lines):
# line = line.strip()
#
# keyword = line.split(':')[0]
# value = line.split(':')[1]
#
# vdata = [float(s) for s in value.split(',') if len(s)]
#
# WeightDict[keyword] = vdata[-1]
#
# return WeightDict
# =============================================================================
def read_one2one_simi(filePath):
def read_seneor(filepath):
WeightDict = OrderedDict()
with open(filepath, 'r', encoding='utf-8') as f:
SimiDict = {}
with open(filePath, 'r', encoding='utf-8') as f:
lines = f.readlines()
flag = False
for i, line in enumerate(lines):
line = line.strip()
if line.find('barcode:')<0 and not flag:
continue
if line.find('barcode:')==0 :
flag = True
continue
keyword = line.split(':')[0]
value = line.split(':')[1]
vdata = [float(s) for s in value.split(',') if len(s)]
WeightDict[keyword] = vdata[-1]
return WeightDict
# if line.endswith(','):
# line = line[:-1]
if flag:
barcode = line.split(',')[0].strip()
value = line.split(',')[1].split(':')[1].strip()
SimiDict[barcode] = float(value)
if flag and not line:
flag = False
return SimiDict
def read_weight_timeConsuming(filePth):
@ -362,15 +394,14 @@ def plot_sensor_curve(WeightDict, SensorDict, ProcessTimeDict):
nw = len(wdata)
assert(nw) >= 8, "The num of weight data is less than 8!"
i1, i2 = 0, 7
while i2 < nw:
data = wdata[i1:(i2+1)]
max(data) - min(data)
if i2<7:
i1 = 0
else:
i1 = i2-windth
# i1, i2 = 0, 7
# while i2 < nw:
# data = wdata[i1:(i2+1)]
# max(data) - min(data)
# if i2<7:
# i1 = 0
# else:
# i1 = i2-windth
min_t = min(wtime + stime)
wtime = [t-min_t for t in wtime]
@ -405,15 +436,12 @@ def plot_sensor_curve(WeightDict, SensorDict, ProcessTimeDict):
def main(file_path):
def test_process(file_path):
WeightDict, SensorDict, ProcessTimeDict = read_weight_timeConsuming(file_path)
plot_sensor_curve(WeightDict, SensorDict, ProcessTimeDict)
if __name__ == "__main__":
def main():
files_path = r'\\192.168.1.28\share\测试_202406\0814\0814\20240814-102227-62264578-a720-4eb9-b95e-cb8be009aa98_null'
k = 0
for filename in os.listdir(files_path):
@ -424,42 +452,21 @@ if __name__ == "__main__":
extract_data(file_path)
if os.path.isfile(file_path) and filename.find("process.data")>=0:
main(file_path)
test_process(file_path)
k += 1
if k == 1:
break
# print("Done")
def main1():
fpath = r'\\192.168.1.28\share\测试_202406\1101\images\20241101-140456-44dc75b5-c406-4cb2-8317-c4660bb727a3_6922130101355_6922130101355\process.data'
simidct = read_one2one_simi(fpath)
print(simidct)
if __name__ == "__main__":
# main()
main1()