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)
예제 #3
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)
예제 #5
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))
예제 #6
0
    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}")
예제 #9
0
  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))
예제 #11
0
    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}")
예제 #12
0
  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])
예제 #13
0
    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)
예제 #14
0
    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)
예제 #15
0
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)