# read config if True: configs = [] with open('../config.txt', 'r') as f: configs = f.readlines() configs = [txt_config.strip('\n') for txt_config in configs] Config.DEMO_FOR = configs[0] Config.Rabbit.IP_ADDRESS = configs[1] face_rec_graph = FaceGraph() face_extractor = FacenetExtractor(face_rec_graph, model_path=Config.FACENET_DIR) detector = MTCNNDetector(face_rec_graph) preprocessor = Preprocessor() matcher = FaissMatcher() matcher._match_case = 'TCH' matcher.build(Config.REG_IMAGE_FACE_DICT_FILE) rb = RabbitMQ() frame_readers = dict() register_command = dict() # {session_id: [[register_name, video_path]]} removed_sessions = Queue() sent_msg_queue = Queue() start_time = time.time() while True: # if time.time() - start_time >= 10.0: # try: # while True: # rm_id = removed_sessions.get(False) # frame_readers.pop(rm_id, None)
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)