def test_get_face_rate(self, ): # Arrange max_process = 4 batch_data: BatchData = batch_data_loader_service.load_batch(0) logger.info("Got batch data.") stopwatch = Stopwatch() stopwatch.start() num_videos = 1 # batch_data.size() for i in range(num_videos): logger.info(f"Getting {i}th video.") vid_path = batch_data.get_candidate_file_path(i) fil = video_service.process_all_video_frames( vid_path, face_recog_service.get_face_data, max_process) stopwatch.stop() for fi in fil: landmarks = fi['face_info_landmarks'] frame_index = fi['frame_index'] file_path = fi['file_path'] for ndx, land in enumerate(landmarks): face_image = land['face_image'] image_service.show_image(face_image, 'test') par_path = os.path.join(config.TRASH_PATH, f"{file_path.stem}") os.makedirs(par_path, exist_ok=True) image_path = os.path.join(par_path, f"{frame_index}_{ndx}.png") logger.info(f"Writing to {image_path}.") image_converted = cv2.cvtColor(face_image, cv2.COLOR_BGR2RGB) cv2.imwrite(image_path, image_converted) logger.info(stopwatch)
def test_get_face(self): # Arrange # Batch 8, video 0 has fake batch_data: BatchData = batch_data_loader_service.load_batch(0) vid_path = batch_data.get_candidate_file_path(0) # Act image, _, _ = video_service.get_single_image_from_vid(vid_path, 150) image_service.show_image(image) height, width, _ = image.shape # Act face_infos = face_recog_service.get_face_infos(image, height, width) for fi in face_infos: title = f"Found {len(face_infos)} face(s)." face_image, _, _, _, _ = fi image_service.show_image(face_image, title) face_lines_image = face_recog_service.add_face_lines(face_image) image_service.show_image(face_lines_image) # Assert assert (len(face_infos) > 0)
def test_mtcn_get_tiny_faces(self): # Arrange batch_data: BatchData = batch_data_loader_service.load_batch(0) root_path = Path(config.SMALL_HEAD_OUTPUT_PATH) output_path = Path(os.path.join(config.TINY_IMAGE_PATH)) # Act face_recog_mtcnn_service.find_tiny_faces(root_path, output_path)
def test_batch_load(self): # Arrange # Act batch_data = batch_data_loader_service.load_batch(0) logger.info(batch_data.df_metadata.head(20)) # Assert assert (batch_data.__len__() > 0)
def test_get_video_info(self): # Arrange bad_data = batch_data_loader_service.load_batch(0) path_file = bad_data.get_candidate_file_path(1) logger.info(path_file) v_cap = cv2.VideoCapture(str(path_file))
def test_display_audio_chart(self): # Arrange batch_data: BatchData = batch_data_loader_service.load_batch(8) vid_path: Path = batch_data.get_candidate_file_path(0) clip, sample_rate = audio_service.get_audio_clip_from_video( vid_path=vid_path, start_milli=1000, end_milli=5000) # Act audio_service.display_chart(clip, sample_rate)
def test_show_frame(self): # Arrange batch_data: BatchData = batch_data_loader_service.load_batch(8) vid_path: Path = batch_data.get_candidate_file_path(0) index = 100 # Act image, _, _ = video_service.get_single_image_from_vid(vid_path, index) show_image(image, f"Image {index}: {vid_path.name}")
def test_get_differences(self): # Arrange batch_data: BatchData = batch_data_loader_service.load_batch(0) # Act diffs = face_recog_service.get_face_diffs(batch_data, max_diffs=6000) mean = float(sum(d['ssim'] for d in diffs)) / len(diffs) # Assert logger.info(f"diffs found: {len(diffs)}; Mean: {mean}")
def test_load(self): # Arrange batch_data = batch_data_loader_service.load_batch(0) bdr: BatchDataRow = batch_data.__getitem__(0) # Act blazeBright = BlazeBrightSideDataSet(bdr.video_path) # Assert assert(blazeBright is not None)
def test_get_file(self): # Arrange batch_data = batch_data_loader_service.load_batch(0) # Act file_path = batch_data.get_candidate_file_path(0) logger.info(file_path) # Assert assert (os.path.exists(file_path))
def test_get_audio_file(self): # Arrange batch_data: BatchData = batch_data_loader_service.load_batch(8) vid_path: Path = batch_data.get_candidate_file_path(0) start_millis = 1000 end_millis = 5000 # Act clip, sample_rate = audio_service.get_audio_clip_from_video( vid_path=vid_path, start_milli=start_millis, end_milli=end_millis) logger.info(f"Sample rate: {sample_rate}")
def test_get_subframe_images(self): # Arrange batch_data = batch_data_loader_service.load_batch(0) bdr: BatchDataRow = batch_data.__getitem__(0) blazeBright = BlazeBrightSideDataSet(bdr.video_path) # Act images = blazeBright.get_subframe_images_info(0) # Assert assert(len(images) == 3) image_service.show_image(images[0]) image_service.show_image(images[1]) image_service.show_image(images[2])
def test_mtcnn_get_many_face_recog_expanded(self): # Arrange batch_data: BatchData = batch_data_loader_service.load_batch(0) output_path = Path(config.TRASH_PATH) expand_frame = True # output_path = Path(config.TINY_IMAGE_PATH) # expand_frame = False stopwatch = Stopwatch() stopwatch.start() result = face_recog_mtcnn_service.get_faces(batch_data, output_path, expand_frame) stopwatch.stop() logger.info(f"Elapsed time: {stopwatch}") # Assert logger.info(result)
def test_dataset_and_loader(self): # Arrange batch_data = batch_data_loader_service.load_batch(0) batch_row_index = 2 vid_path = batch_data.get_candidate_file_path(batch_row_index) # Act blaze_dataset = BlazeDataSet(vid_path, max_process=10) # batch_path = config.get_train_batch_path(2) # vid_path = Path(batch_path, "ambabjrwbt.mp4") # vid_path = Path(batch_path, "aimzesksew.mp4") # vid_path = Path(batch_path, "aejroilouc.mp4") # blaze_dataset = BlazeDataSet(vid_path=vid_path, max_process=1) if len(blaze_dataset.originals) == 0: raise Exception("Not enough files to process.") blaze_dataloader = DataLoader(blaze_dataset, batch_size=60, shuffle=False, num_workers=0) blazeface = BlazeFace() # Act all_video_detections = blazeface_detection.batch_detect( blaze_dataloader, blazeface) merged_vid_detections = blaze_dataset.merge_sub_frame_detections( all_video_detections) output_folder_path = Path(config.SMALL_HEAD_OUTPUT_PATH) output_folder_path.mkdir(exist_ok=True) blazeface_detection.save_cropped_blazeface_image( merged_vid_detections, blaze_dataset, output_folder_path) batch_data.add_face_detections(batch_row_index, merged_vid_detections) output_file_path = Path(output_folder_path, 'metadata.pkl') batch_data.persist(output_file_path)
def pick_image(batch_index: int, video_index: int, frame_index: int): batch_data: BatchData = batch_data_loader_service.load_batch(batch_index) vid_path: Path = batch_data.get_candidate_file_path(video_index) return video_service.get_single_image_from_vid(vid_path, frame_index)