def main(): # load config cfg.merge_from_file(args.config) # create model model = ModelBuilder() # load model checkpoint = torch.load(args.snapshot, map_location=torch.device('cpu')) model.load_state_dict(checkpoint) for param in model.parameters(): param.requires_grad = False
def main(): # Initialize ecci sdk and connect to the broker in edge-cloud ecci_client = Client() mqtt_thread = threading.Thread(target=ecci_client.initialize) mqtt_thread.start() ecci_client.wait_for_ready() print('edge start --------') # load config cfg.merge_from_file(args.config) cfg.CUDA = torch.cuda.is_available() and cfg.CUDA device = torch.device('cuda' if cfg.CUDA else 'cpu') # create model model = ModelBuilder() # load model checkpoint = torch.load(args.snapshot) model.load_state_dict(checkpoint) for param in model.parameters(): param.requires_grad = False model.eval().to(device) #multiprocessing manager = mp.Manager() resQueue = manager.Queue() multiProcess = [] label = [] probs = [] for i in range(10): multiProcess.append(build_multitracker(model, label, probs, resQueue)) multiProcess[i].start() first_frame = True image_files = sorted(glob.glob('./test/image/*.JPEG')) for f, image_file in enumerate(image_files): frame = cv2.imread(image_file) if first_frame: # keyframe need to be uploaded to cloud print('first frame') key_frame = frame payload = {"type": "data", "contents": {"frame": frame}} print("####################", payload) ecci_client.publish(payload, "cloud") cloud_data = ecci_client.get_sub_data_payload_queue().get() print("###########recieve data from cloud", cloud_data) bbox = cloud_data["bbox"] label = cloud_data["label"] probs = cloud_data["probs"] num_process = len(bbox) t_detect_start = time.time() for i in range(num_process): init_rect = [ bbox[i][0], bbox[i][1], bbox[i][2] - bbox[i][0], bbox[i][3] - bbox[i][1] ] multiProcess[i].init(frame, init_rect, label[i], probs[i]) cv2.rectangle(frame, (int(bbox[i][0]), int(bbox[i][1])), (int(bbox[i][2]), int(bbox[i][3])), (0, 0, 255), 3) cv2.putText(frame, '%s: %.3f' % (label[i], probs[i]), (bbox[i][0], bbox[i][1] - 15), cv2.FONT_HERSHEY_PLAIN, 1.0, (0, 0, 255), thickness=1) t_detect_end = time.time() print("detect fps : ", 1 / (t_detect_end - t_detect_start)) first_frame = False index = 1 elif index % 10 == 0: if is_key(key_frame, frame) or index % 20 == 0: # keyframe need to be uploaded to cloud ##### outputs, time ###### print('key frame') key_frame = frame payload = {"type": "data", "contents": {"frame": frame}} print("####################", payload) ecci_client.publish(payload, "cloud") cloud_data = ecci_client.get_sub_data_payload_queue().get() print("###########recieve data from cloud", cloud_data) bbox = cloud_data["bbox"] label = cloud_data["label"] probs = cloud_data["probs"] num_process = len(bbox) t_detect_start = time.time() for i in range(num_process): init_rect = [ bbox[i][0], bbox[i][1], bbox[i][2] - bbox[i][0], bbox[i][3] - bbox[i][1] ] multiProcess[i].init(frame, init_rect, label[i], probs[i]) cv2.rectangle(frame, (int(bbox[i][0]), int(bbox[i][1])), (int(bbox[i][2]), int(bbox[i][3])), (0, 0, 255), 3) cv2.putText(frame, '%s: %.3f' % (label[i], probs[i]), (bbox[i][0], bbox[i][1] - 15), cv2.FONT_HERSHEY_PLAIN, 1.0, (0, 0, 255), thickness=1) t_detect_end = time.time() print("detect fps : ", 1 / (t_detect_end - t_detect_start)) index = 1 else: print('non-key frame') t_track_start = time.time() for i in range(num_process): multiProcess[i].track(frame) t_track_end = time.time() print("track fps : ", 1 / (t_track_end - t_track_start)) for i in range(num_process): resDict = resQueue.get() print(resDict) bbox = list(map(int, resDict['bbox'])) cv2.rectangle(frame, (bbox[0], bbox[1]), (bbox[0] + bbox[2], bbox[1] + bbox[3]), (0, 255, 0), 3) cv2.putText(frame, '%s: %.3f' % (label[i], probs[i]), (bbox[0], bbox[1] - 15), cv2.FONT_HERSHEY_PLAIN, 1.0, (0, 255, 0), thickness=1) index += 1 else: print('non-key frame') t_track_start = time.time() for i in range(num_process): multiProcess[i].track(frame) t_track_end = time.time() print("track fps : ", 1 / (t_track_end - t_track_start)) for i in range(num_process): resDict = resQueue.get() print(resDict) bbox = list(map(int, resDict['bbox'])) cv2.rectangle(frame, (bbox[0], bbox[1]), (bbox[0] + bbox[2], bbox[1] + bbox[3]), (0, 255, 0), 3) cv2.putText(frame, '%s: %.3f' % (label[i], probs[i]), (bbox[0], bbox[1] - 15), cv2.FONT_HERSHEY_PLAIN, 1.0, (0, 255, 0), thickness=1) index += 1 cv2.imwrite('./test/output/%s.jpg' % f, frame) for i in range(10): multiProcess.append(build_multitracker(model, label, probs, resQueue)) multiProcess[i].join()
def main(): # Initialize ecci sdk and connect to the broker in edge-cloud ecci_client = Client() mqtt_thread = threading.Thread(target=ecci_client.initialize) mqtt_thread.start() ecci_client.wait_for_ready() print('edge start --------') # load config cfg.merge_from_file(args.config) cfg.CUDA = torch.cuda.is_available() and cfg.CUDA device = torch.device('cuda' if cfg.CUDA else 'cpu') # create model model = ModelBuilder() # load model checkpoint = torch.load(args.snapshot) model.load_state_dict(checkpoint) for param in model.parameters(): param.requires_grad = False model.eval().to(device) #multiprocessing manager = mp.Manager() resQueue = manager.Queue() multiProcess = [] # VID dataloader dataset = ImagenetDataset(args.dataset, is_val=True) true_case_stat, all_gb_boxes = group_annotation_by_class(dataset) for f in range(len(dataset)): frame, first_frame = dataset.get_image(f) if first_frame: # keyframe need to be uploaded to cloud print('first frame upload to cloud') # close the last multiprocessing for i in range(len(multiProcess)): multiProcess[i].join() # send frame to cloud payload = {"type":"data","contents":{"frame":frame}} print("####################",payload) ecci_client.publish(payload, "cloud") # get rect from cloud cloud_data = ecci_client.get_sub_data_payload_queue().get() print("###########recieve data from cloud",cloud_data) bbox= cloud_data["bbox"] label = cloud_data["label"] probs = cloud_data["probs"] # wirte txt for i in range(len(bbox)): write_txt(dataset, f, bbox[i], label[i], probs[i]) # # start multiprocessing multiProcess = [] for i in range(len(bbox)): multiProcess.append(build_multitracker(model,label[i],probs[i],resQueue)) for i in range(len(multiProcess)): init_rect = [bbox[i][0],bbox[i][1],bbox[i][2]-bbox[i][0],bbox[i][3]-bbox[i][1]] multiProcess[i].init(frame, init_rect) multiProcess[i].start() key_frame = frame first_frame = False index = 1 # elif is_key(key_frame, frame): elif index % 5== 0: if is_key(key_frame, frame) or index % 15 ==0 : # keyframe need to be uploaded to cloud ##### outputs, time ###### print('key frame upload to cloud') # close the last multiprocessing for i in range(len(multiProcess)): multiProcess[i].join() # send frame to cloud payload = {"type":"data","contents":{"frame":frame}} print("####################",payload) ecci_client.publish(payload, "cloud") # get rect from cloud cloud_data = ecci_client.get_sub_data_payload_queue().get() print("###########recieve data from cloud",cloud_data) bbox= cloud_data["bbox"] label = cloud_data["label"] probs = cloud_data["probs"] # wirte txt for i in range(len(bbox)): write_txt(dataset, f, bbox[i], label[i], probs[i]) # # start multiprocessing multiProcess = [] for i in range(len(bbox)): multiProcess.append(build_multitracker(model,label[i],probs[i],resQueue)) for i in range(len(multiProcess)): init_rect = [bbox[i][0],bbox[i][1],bbox[i][2]-bbox[i][0],bbox[i][3]-bbox[i][1]] multiProcess[i].init(frame, init_rect) multiProcess[i].start() key_frame = frame index = 1 else: print('track locally') for i in range(len(multiProcess)): multiProcess[i].track(frame) for i in range(len(multiProcess)): resDict = resQueue.get() resDict['bbox'] = [resDict['bbox'][0],resDict['bbox'][1],resDict['bbox'][0]+resDict['bbox'][2],resDict['bbox'][1]+resDict['bbox'][3]] write_txt(dataset, f, resDict['bbox'], resDict['label'], resDict['probs']-0.1) index += 1 else: print('track locally') for i in range(len(multiProcess)): multiProcess[i].track(frame) t= time.time() for i in range(len(multiProcess)): resDict = resQueue.get() resDict['bbox'] = [resDict['bbox'][0],resDict['bbox'][1],resDict['bbox'][0]+resDict['bbox'][2],resDict['bbox'][1]+resDict['bbox'][3]] write_txt(dataset, f, resDict['bbox'], resDict['label'], resDict['probs']-0.1) print(time.time()-t) index +=1 map_compute()
def main(): # Initialize ecci sdk and connect to the broker in edge-cloud ecci_client = Client() mqtt_thread = threading.Thread(target=ecci_client.initialize) mqtt_thread.start() ecci_client.wait_for_ready() print('edge start --------') # load config cfg.merge_from_file(args.config) cfg.CUDA = torch.cuda.is_available() and cfg.CUDA device = torch.device('cuda' if cfg.CUDA else 'cpu') # create model model = ModelBuilder() # load model checkpoint = torch.load(args.snapshot) model.load_state_dict(checkpoint) for param in model.parameters(): param.requires_grad = False model.eval().to(device) #multiprocessing manager = mp.Manager() resQueue = manager.Queue() multiProcess = [] label = [] probs = [] for i in range(10): multiProcess.append(build_multitracker(model, label, probs, resQueue)) multiProcess[i].start() first_frame = True filename = "./demo/video.avi" camera = cv2.VideoCapture(filename) fourcc = cv2.VideoWriter_fourcc('M', 'P', '4', '2') demo_out = cv2.VideoWriter('./demo/output/video.avi', fourcc, 25, (640, 368)) while camera.isOpened(): ret, frame = camera.read() if ret == True: print(frame.shape) if first_frame: # keyframe need to be uploaded to cloud print('first frame') key_frame = frame # communication payload = {"type": "data", "contents": {"frame": frame}} print("####################", payload) ecci_client.publish(payload, "cloud") cloud_data = ecci_client.get_sub_data_payload_queue().get() print("###########recieve data from cloud", cloud_data) bbox = cloud_data["bbox"] label = cloud_data["label"] probs = cloud_data["probs"] num_process = len(bbox) t_detect_start = time.time() for i in range(num_process): cv2.rectangle(frame, (int(bbox[i][0]), int(bbox[i][1])), (int(bbox[i][2]), int(bbox[i][3])), (0, 0, 255), 3) cv2.putText(frame, '%s: %.3f' % (label[i], probs[i]), (bbox[i][0], bbox[i][1] - 15), cv2.FONT_HERSHEY_PLAIN, 1.0, (0, 0, 255), thickness=1) init_rect = [ bbox[i][0], bbox[i][1], bbox[i][2] - bbox[i][0], bbox[i][3] - bbox[i][1] ] multiProcess[i].init(frame, init_rect, label[i], probs[i]) t_detect_end = time.time() print("detect fps : ", 1 / (t_detect_end - t_detect_start)) first_frame = False index = 1 elif index % 5 == 0: if is_key(key_frame, frame) or index % 10 == 0: # keyframe need to be uploaded to cloud ##### outputs, time ###### print('key frame') key_frame = frame # communication payload = {"type": "data", "contents": {"frame": frame}} print("####################", payload) ecci_client.publish(payload, "cloud") cloud_data = ecci_client.get_sub_data_payload_queue().get() print("###########recieve data from cloud", cloud_data) bbox = cloud_data["bbox"] label = cloud_data["label"] probs = cloud_data["probs"] num_process = len(bbox) t_detect_start = time.time() for i in range(num_process): cv2.rectangle(frame, (int(bbox[i][0]), int(bbox[i][1])), (int(bbox[i][2]), int(bbox[i][3])), (0, 0, 255), 3) cv2.putText(frame, '%s: %.3f' % (label[i], probs[i]), (bbox[i][0], bbox[i][1] - 15), cv2.FONT_HERSHEY_PLAIN, 1.0, (0, 0, 255), thickness=1) init_rect = [ bbox[i][0], bbox[i][1], bbox[i][2] - bbox[i][0], bbox[i][3] - bbox[i][1] ] multiProcess[i].init(frame, init_rect, label[i], probs[i]) t_detect_end = time.time() print("detect fps : ", 1 / (t_detect_end - t_detect_start)) index = 1 else: print('non-key frame') t_track_start = time.time() for i in range(num_process): multiProcess[i].track(frame) t_track_end = time.time() print("track fps : ", 1 / (t_track_end - t_track_start)) for i in range(num_process): resDict = resQueue.get() print(resDict) bbox = list(map(int, resDict['bbox'])) cv2.rectangle(frame, (bbox[0], bbox[1]), (bbox[0] + bbox[2], bbox[1] + bbox[3]), (0, 255, 0), 3) cv2.putText(frame, '%s: %.3f' % (label[i], probs[i]), (bbox[0], bbox[1] - 15), cv2.FONT_HERSHEY_PLAIN, 1.0, (0, 255, 0), thickness=1) index += 1 else: print('non-key frame') t_track_start = time.time() for i in range(num_process): multiProcess[i].track(frame) t_track_end = time.time() print("track fps : ", 1 / (t_track_end - t_track_start)) for i in range(num_process): resDict = resQueue.get() print(resDict) bbox = list(map(int, resDict['bbox'])) cv2.rectangle(frame, (bbox[0], bbox[1]), (bbox[0] + bbox[2], bbox[1] + bbox[3]), (0, 255, 0), 3) cv2.putText(frame, '%s: %.3f' % (label[i], probs[i]), (bbox[0], bbox[1] - 15), cv2.FONT_HERSHEY_PLAIN, 1.0, (0, 255, 0), thickness=1) index += 1 print("writing") demo_out.write(frame) else: break camera.release() demo_out.release() cv2.destroyAllWindows()