Example #1
0
def track_specific_image(video_name,
                         object_image,
                         ssim_thresh=0.7,
                         class_name=None):
    """
    This function tracks to find a provided object from the video and track it.
    """
    video_stream = cv2.VideoCapture(video_name)
    tracker = Tracker()
    found = False
    Deleted = False
    object_image = cv2.imread(object_image)
    if class_name is None:
        predictions = detect(yolo, object_image, classes)
        _, names = get_boxes(predictions)
        if len(names) != 0:
            class_name = names[0]
    while cv2.waitKey(1) < 0:
        has_frame, current_frame = video_stream.read()
        if has_frame:
            start_time = time.perf_counter()
            current_frame = cv2.rotate(current_frame, cv2.ROTATE_90_CLOCKWISE)
            predictions = detect(yolo, current_frame, classes)
            boxes, names = get_boxes(predictions)
            tracker.update(boxes, names)
            if not found:
                class_name, found = tracker.find_matching_object(
                    current_frame, object_image, 1, ssim_thresh, class_name)
            if found and not Deleted:
                box = tracker.registered_ids[class_name]
                del tracker.registered_ids[class_name]
                del tracker.disappeared[class_name]
                del tracker.colors[class_name]
                tracker.registered_ids['Target found!'] = box
                tracker.disappeared['Target found!'] = 0
                tracker.colors['Target found!'] = [0, 0, 255]
                Deleted = True
            for label in tracker.registered_ids:
                x, y, w, h = tracker.registered_ids[label]
                c = tracker.colors[label]
                cv2.rectangle(current_frame, (int(x - w / 2), int(y - h / 2)),
                              (int(x + w / 2), int(y + h / 2)), c, 2)
                cv2.putText(current_frame, label, (x, y - 2),
                            cv2.FONT_HERSHEY_SIMPLEX, 0.75, c, 2)

            time_spent = time.perf_counter() - start_time
            label = 'Current FPS is: %.2f' % (1 / time_spent)
            cv2.putText(current_frame, label, (0, 15),
                        cv2.FONT_HERSHEY_SIMPLEX, 0.75, (0, 255, 0), 2)
            cv2.imshow("", current_frame)
        else:
            print('End of the video reached!')
            cv2.waitKey(100)
            break