modify at output data format

This commit is contained in:
王庆刚
2024-12-10 19:01:54 +08:00
parent 1e6c5deee4
commit afd033b965
15 changed files with 545 additions and 290 deletions

View File

@ -5,6 +5,7 @@ Created on Tue Nov 26 17:35:05 2024
@author: ym
"""
import os
import pickle
import numpy as np
from pathlib import Path
@ -15,9 +16,9 @@ from tracking.utils.read_data import extract_data, read_tracking_output, read_si
IMG_FORMAT = ['.bmp', '.jpg', '.jpeg', '.png']
VID_FORMAT = ['.mp4', '.avi']
class Event:
class ShoppingEvent:
def __init__(self, eventpath, stype="data"):
'''stype: str, 'video', 'image', 'data', '''
'''stype: str, 'pickle', 'data', '''
self.eventpath = eventpath
self.evtname = str(Path(eventpath).stem)
@ -35,37 +36,115 @@ class Event:
self.one2n = None
'''=========== 0/1_track.data ============================='''
self.back_yolobboxes = np.empty((0, 6), dtype=np.float64)
self.back_yolofeats = np.empty((0, 256), dtype=np.float64)
self.back_trackerboxes = np.empty((0, 9), dtype=np.float64)
self.back_trackerfeats = np.empty((0, 256), dtype=np.float64)
self.back_trackingboxes = np.empty((0, 9), dtype=np.float64)
self.back_trackingfeats = np.empty((0, 256), dtype=np.float64)
self.back_yolobboxes = []
self.back_yolofeats = []
self.back_trackerboxes = np.empty((0, 9), dtype=np.float64) ##和类doTracks兼容
self.back_trackerfeats = {}
self.back_trackingboxes = []
self.back_trackingfeats = []
self.front_yolobboxes = np.empty((0, 6), dtype=np.float64)
self.front_yolofeats = np.empty((0, 256), dtype=np.float64)
self.front_trackerboxes = np.empty((0, 9), dtype=np.float64)
self.front_trackerfeats = np.empty((0, 256), dtype=np.float64)
self.front_trackingboxes = np.empty((0, 9), dtype=np.float64)
self.front_trackingfeats = np.empty((0, 256), dtype=np.float64)
self.front_yolobboxes = []
self.front_yolofeats = []
self.front_trackerboxes = np.empty((0, 9), dtype=np.float64) ##和类doTracks兼容
self.front_trackerfeats = {}
self.front_trackingboxes = []
self.front_trackingfeats = []
'''=========== 0/1_tracking_output.data ==================='''
self.back_boxes = np.empty((0, 9), dtype=np.float64)
self.front_boxes = np.empty((0, 9), dtype=np.float64)
self.back_feats = np.empty((0, 256), dtype=np.float64)
self.front_feats = np.empty((0, 256), dtype=np.float64)
self.feats_compose = np.empty((0, 256), dtype=np.float64)
self.feats_select = np.empty((0, 256), dtype=np.float64)
self.back_boxes = []
self.back_feats = []
self.front_boxes = []
self.front_feats = []
if stype=="data":
self.from_datafile(eventpath)
if stype=="pickle":
self.from_pklfile(eventpath)
self.feats_select = []
self.feats_compose = np.empty((0, 256), dtype=np.float64)
self.select_feats()
self.compose_feats()
# if stype=="image":
# self.from_image(eventpath)
def kerndata(self, ShoppingDict, camtype="backCamera"):
'''
camtype: str, "backCamera" or "frontCamera"
'''
yoloboxes, resfeats = [], []
trackerboxes = np.empty((0, 9), dtype=np.float64)
trackefeats = {}
trackingboxes, trackingfeats = [], []
frameDictList = ShoppingDict[camtype]["yoloResnetTracker"]
for frameDict in frameDictList:
yoloboxes.append(frameDict["bboxes"])
if stype=="video":
self.from_video(eventpath)
tboxes = frameDict["tboxes"]
trackefeats.update(frameDict["feats"])
trackerboxes = np.concatenate((trackerboxes, np.array(tboxes)), axis=0)
Residual = ShoppingDict[camtype]["tracking"].Residual
for track in Residual:
trackingboxes.append(track.boxes)
trackingfeats.append(track.features)
kdata = (yoloboxes, resfeats, trackerboxes, trackefeats, trackingboxes, trackingfeats)
tracking_out_boxes, tracking_out_feats = [], []
Confirmed = ShoppingDict[camtype]["tracking"].Confirmed
for track in Confirmed:
tracking_out_boxes.append(track.boxes)
tracking_out_feats.append(track.features)
outdata = (tracking_out_boxes, tracking_out_feats)
return kdata, outdata
def from_pklfile(self, eventpath):
if stype=="image":
self.from_image(eventpath)
with open(eventpath, 'rb') as f:
ShoppingDict = pickle.load(f)
self.eventpath = ShoppingDict["eventPath"]
self.evtname = ShoppingDict["eventName"]
self.barcode = ShoppingDict["barcode"]
'''=========== path of image and video =========== '''
self.back_videopath = ShoppingDict["backCamera"]["videoPath"]
self.front_videopath = ShoppingDict["frontCamera"]["videoPath"]
self.back_imgpaths = ShoppingDict["backCamera"]["imagePaths"]
self.front_imgpaths = ShoppingDict["frontCamera"]["imagePaths"]
'''===========对应于 0/1_track.data ============================='''
backdata, back_outdata = self.kerndata(ShoppingDict, "backCamera")
frontdata, front_outdata = self.kerndata(ShoppingDict, "frontCamera")
self.back_yolobboxes = backdata[0]
self.back_yolofeats = backdata[1]
self.back_trackerboxes = backdata[2]
self.back_trackerfeats = [3]
self.back_trackingboxes = [4]
self.back_trackingfeats = [5]
self.front_yolobboxes = frontdata[0]
self.front_yolofeats = frontdata[1]
self.front_trackerboxes = frontdata[2]
self.front_trackerfeats = frontdata[3]
self.front_trackingboxes = frontdata[4]
self.front_trackingfeats = frontdata[5]
'''===========对应于 0/1_tracking_output.data ============================='''
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):
evtList = self.evtname.split('_')
if len(evtList)>=2 and len(evtList[-1])>=10 and evtList[-1].isdigit():
@ -127,21 +206,21 @@ class Event:
'''========== 0/1_track.data =========='''
if dataname.find("_track.data")>0:
bboxes, ffeats, trackerboxes, tracker_feat_dict, trackingboxes, tracking_feat_dict = extract_data(datapath)
bboxes, ffeats, trackerboxes, trackerfeats, trackingboxes, trackingfeats = extract_data(datapath)
if CamerType == '0':
self.back_yolobboxes = bboxes
self.back_yolofeats = ffeats
self.back_trackerboxes = trackerboxes
self.back_trackerfeats = tracker_feat_dict
self.back_trackerfeats = trackerfeats
self.back_trackingboxes = trackingboxes
self.back_trackingfeats = tracking_feat_dict
self.back_trackingfeats = trackingfeats
if CamerType == '1':
self.front_yolobboxes = bboxes
self.front_yolofeats = ffeats
self.front_trackerboxes = trackerboxes
self.front_trackerfeats = tracker_feat_dict
self.front_trackerfeats = trackerfeats
self.front_trackingboxes = trackingboxes
self.front_trackingfeats = tracking_feat_dict
self.front_trackingfeats = trackingfeats
'''========== 0/1_tracking_output.data =========='''
if dataname.find("_tracking_output.data")>0:
@ -152,26 +231,37 @@ class Event:
elif CamerType == '1':
self.front_boxes = tracking_output_boxes
self.front_feats = tracking_output_feats
self.select_feat()
self.compose_feats()
def compose_feats(self):
'''事件的特征集成'''
feats_compose = np.empty((0, 256), dtype=np.float64)
if len(self.front_feats):
feats_compose = np.concatenate((feats_compose, self.front_feats), axis=0)
for feat in self.front_feats:
feats_compose = np.concatenate((feats_compose, feat), axis=0)
if len(self.back_feats):
feats_compose = np.concatenate((feats_compose, self.back_feats), axis=0)
for feat in self.back_feats:
feats_compose = np.concatenate((feats_compose, feat), axis=0)
self.feats_compose = feats_compose
def select_feats(self):
'''事件的特征选择'''
self.feats_select = []
if len(self.front_feats):
self.feats_select = self.front_feats
else:
elif len(self.back_feats):
self.feats_select = self.back_feats
def main():
pklpath = r"D:\DetectTracking\evtresult\images2\ShoppingDict.pkl"
evt = ShoppingEvent(pklpath, stype='pickle')
if __name__ == "__main__":
main()