コード例 #1
0
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
コード例 #2
0
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()
コード例 #3
0
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()
コード例 #4
0
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()