Exemplo n.º 1
0
    def test_check_recognize_tracker_not_mergeable_new_face(self, mock_save):
        def fake_img_save(arg1, arg2):
            return True

        mock_save.side_effect = fake_img_save
        matcher = FakeMatcher()
        embs = np.eye(12)
        labels = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]
        matcher.build(embs, labels)
        # total 12 tracker
        zero = np.zeros(12)
        trackers = {}
        for i in range(12):
            vec = zero.copy()
            vec[i] = 1
            tracker = create_tracker([vec] * 6)
            trackers[i] = tracker

        vec = np.zeros(12)
        vec[1] = 1
        vec[2] = 1
        vec[3] = 2
        vec[4] = 3
        new_tracker = create_tracker([vec] * 6)

        tracker_list = TrackersList()
        tracker_list.trackers = {1: new_tracker}
        tracker_list.current_trackers_history.trackers = trackers
        tracker_list.current_trackers_history.history_matcher = matcher
        tracker_list.current_trackers_history.labels = labels
        tracker_list.check_recognize_tracker(matcher, Mock(), 1)
Exemplo n.º 2
0
    def test_check_recognize_tracker_mergeable(self, mock_save):
        def fake_img_save(arg1, arg2):
            return True

        mock_save.side_effect = fake_img_save
        matcher = HistoryMatcher()
        # embs = np.eye(12)
        labels = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]
        # total 12 tracker
        zero = np.zeros(12)
        trackers = {}
        for i in range(12):
            vec = zero.copy()
            vec[i] = 1
            tracker = create_tracker([vec] * 30)
            tracker.name = 'TCH-VVT-' + str(i)
            trackers['TCH-VVT-' + str(i)] = tracker

        matcher.from_trackers_rebuild_matcher(trackers)

        vec = np.zeros(12)
        vec[1] = 1
        new_tracker = create_tracker([vec] * 30)

        tracker_list = TrackersList()
        tracker_list.trackers = {1: new_tracker}
        tracker_list.current_trackers_history.trackers = trackers
        tracker_list.current_trackers_history.history_matcher = matcher
        tracker_list.current_trackers_history.labels = labels
        result = tracker_list.check_recognize_tracker(matcher, Mock(), 1)
        self.assertTrue(result)
        self.assertEqual('TCH-VVT-1', tracker_list.trackers[1].name)
Exemplo n.º 3
0
    def test_check_recognize_tracker_detecting_name(self):
        '''
        What?

        input:
        matcher
        track_id
        rabbit_mq
        :return:
        '''
        matcher = FakeMatcher()
        embs = np.eye(12)
        labels = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]
        matcher.build(embs, labels)
        # total 12 tracker
        zero = np.zeros(12)
        trackers = {}
        for i in range(12):
            vec = zero.copy()
            vec[i] = 1
            tracker = create_tracker([vec] * 40)
            tracker.name = 'NOT_DETECTING'
            trackers[i] = tracker
        tracker_list = TrackersList()
        tracker_list.trackers = trackers
        result = tracker_list.check_recognize_tracker(Mock(), Mock(), 0)
        self.assertEqual(-1, result)
Exemplo n.º 4
0
    def test_check_recognize_tracker_not_mergeable_old_face(self, mock_save):
        def fake_img_save(arg1, arg2):
            return True

        mock_save.side_effect = fake_img_save
        matcher = FakeMatcher()
        embs = np.eye(12)
        labels = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]
        matcher.build(embs, labels)
        # total 12 tracker
        zero = np.zeros(12)
        trackers = {}
        for i in range(12):
            vec = zero.copy()
            vec[i] = 1
            tracker = create_tracker([vec] * 30)
            tracker.name = 'TCH-VVT-' + str(i)
            trackers[i] = tracker

        vec = np.zeros(12)
        vec[1] = 1
        vec[2] = 1
        vec[3] = 2
        vec[4] = 3
        new_tracker = create_tracker([vec] * 30)

        history_matcher = HistoryMatcher()
        history_matcher.from_trackers_rebuild_matcher(trackers)

        tracker_list = TrackersList()
        tracker_list.trackers = {1: new_tracker}
        tracker_list.current_trackers_history.trackers = trackers
        tracker_list.current_trackers_history.history_matcher = history_matcher
        tracker_list.current_trackers_history.labels = labels
        recognizer_matcher = FakeMatcher()
        recog_embs = np.vstack((vec for _ in range(12)))
        recognizer_matcher.build(recog_embs, ['13'] * 12)
        tracker_list.check_recognize_tracker(recognizer_matcher, Mock(), 1)
Exemplo n.º 5
0
 def test_check_recognize_tracker_detecting_name_less_element(self):
     matcher = FakeMatcher()
     embs = np.eye(12)
     labels = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]
     matcher.build(embs, labels)
     # total 12 tracker
     zero = np.zeros(12)
     trackers = {}
     for i in range(12):
         vec = zero.copy()
         vec[i] = 1
         tracker = create_tracker([vec] * 2)
         trackers[i] = tracker
     tracker_list = TrackersList()
     tracker_list.trackers = trackers
     result = tracker_list.check_recognize_tracker(matcher, Mock(), 1)
     self.assertTrue(result)
Exemplo n.º 6
0
 def test_check_recognize_tracker_detecting_name_bad_track(self):
     matcher = FakeMatcher()
     embs = np.eye(12)
     labels = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]
     matcher.build(embs, labels)
     # total 12 tracker
     zero = np.zeros(12)
     trackers = {}
     for i in range(12):
         vec = zero.copy()
         vec[i] = 1
         tracker = create_tracker([vec] * 40)
         trackers[i] = tracker
     tracker_list = TrackersList()
     tracker_list.trackers = trackers
     result = tracker_list.check_recognize_tracker(Mock(), Mock(), 1)
     self.assertEqual(-1, result)
     self.assertEqual('BAD-TRACK', tracker_list.trackers[1].name)
Exemplo n.º 7
0
def simulate_tracking(root_folder):
    Config.Track.FACE_TRACK_IMAGES_OUT = True
    Config.Track.SEND_FIRST_STEP_RECOG_API = False
    Config.Track.MIN_MATCH_DISTACE_OUT = True
    Config.Track.CURRENT_EXTRACR_TIMER = 5

    # Load Face Extractor
    face_rec_graph = FaceGraph()
    face_rec_graph_coeff = FaceGraph()
    face_extractor = FacenetExtractor(
        face_rec_graph, model_path=Config.FACENET_DIR)
    coeff_extractor = FacenetExtractor(
        face_rec_graph_coeff, model_path=Config.COEFF_DIR)

    # Create empty KDTreeMatcher
    matcher = FaissMatcher()
    matcher._match_case = 'TCH'

    # Preprocessor
    preprocessor = Preprocessor()

    # Fake rabbit mq

    rabbit_mq = FakeMQ()

    # Clean up for
    clear_tracking_folder()
    if Config.Matcher.CLEAR_SESSION:
        clear_session_folder()

    # Setup result list
    list_of_trackers = TrackersList()
    track_results = TrackerResultsDict()
    predict_dict = {}
    confirmed_ids_dict = {}

    sim_detections = gen_images_with_time(root_folder)
    for detection in sim_detections:
        frame = create_fake_frame(detection)
        sleep(0.05)
        trackers_return_dict, predict_trackers_dict = \
            list_of_trackers.check_delete_trackers(matcher, rabbit_mq)
        track_results.update_two_dict(trackers_return_dict)
        predict_dict.update(predict_trackers_dict)
        confirmed_ids_dict = list_of_trackers.trackers_history.confirm_id(
            confirmed_ids_dict)
        list_of_trackers.trackers_history.check_time(matcher)
        list_of_trackers.update_dlib_trackers(frame)
        facial_quality = 1
        # Crop face for features extraction

        origin_bb = detection[2]
        display_face, padded_bbox = CropperUtils.crop_display_face(
            frame, origin_bb)
        cropped_face = CropperUtils.crop_face(frame, origin_bb)

        bbox_str = '_'.join(np.array(origin_bb, dtype=np.unicode).tolist())
        # Calculate embedding
        preprocessed_image = preprocessor.process(cropped_face)
        emb_array, _ = face_extractor.extract_features(preprocessed_image)
        _, coeff = coeff_extractor.extract_features(preprocessed_image)
        if coeff < 0.15:
            img_path = '../data/notenoughcoeff/{}_{}_{}.jpg'.format(
                detection, bbox_str, coeff)
            cv2.imwrite(img_path, cv2.cvtColor(display_face, cv2.COLOR_BGR2RGB))
            facial_quality = -1
        else:
            with open('../data/coeff_log.txt', 'a') as f:
                f.write('{}_{}_{}, coeff: {}\n'.format(bbox_str, detection[0],
                                                       padded_bbox, coeff))

        matched_fid = list_of_trackers.matching_face_with_trackers(
            frame, detection[0], origin_bb, emb_array, facial_quality)
        if facial_quality == -1 or coeff < 0.15:
            continue

        list_of_trackers.update_trackers_list(
            matched_fid, time.time(), origin_bb, display_face, emb_array, 0,
            'VVT', 1, detection[0], padded_bbox, matcher, rabbit_mq)

        list_of_trackers.check_recognize_tracker(matcher, rabbit_mq,
                                                 matched_fid)

    sleep(6)
    list_of_trackers.check_delete_trackers(matcher, rabbit_mq)