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