def predict(args):
    assets = AssetManager(args.base_dir)
    storage = PredictionStorage(
        assets.create_prediction_storage(args.model, args.data_name))

    # Change path of args.model manually
    network = SpeechEnhancementNetwork.load(
        assets.get_model_cache_path(args.model))

    with open(assets.get_normalization_cache_path(args.model),
              'rb') as normalization_fd:
        video_normalizer = pickle.load(normalization_fd)

    try:

        video_normalizer.normalize(extract_frames("data"))

        predicted_speech_spectrograms = network.predict(
            extract_audio()[1], extract_frames("data"))

        predicted_speech_signal = data_processor.reconstruct_speech_signal(
            extract_audio()[0], predicted_speech_spectrograms, 30)

        predicted_speech_signal.save_to_wav_file("enhanced.wav")

    except Exception:
        logging.exception("failed to predict %s. skipping" % "test")
Ejemplo n.º 2
0
def predict(args):
    assets = AssetManager(args.base_dir)
    storage = PredictionStorage(
        assets.create_prediction_storage(args.model, args.data_name)
    )
    network = SpeechEnhancementNetwork.load(assets.get_model_cache_path(args.model))

    with open(
        assets.get_normalization_cache_path(args.model), "rb"
    ) as normalization_fd:
        video_normalizer = pickle.load(normalization_fd)

    samples = load_preprocessed_blob(assets.get_preprocessed_blob_path(args.data_name))
    for sample in samples:
        try:
            print(
                "predicting (%s, %s)..."
                % (sample.video_file_path, sample.noise_file_path)
            )

            video_normalizer.normalize(sample.video_samples)

            loss = network.evaluate(
                sample.mixed_spectrograms,
                sample.video_samples,
                sample.speech_spectrograms,
            )
            print("loss: %f" % loss)

            predicted_speech_spectrograms = network.predict(
                sample.mixed_spectrograms, sample.video_samples
            )

            predicted_speech_signal = data_processor.reconstruct_speech_signal(
                sample.mixed_signal,
                predicted_speech_spectrograms,
                sample.video_frame_rate,
            )

            storage.save_prediction(sample, predicted_speech_signal)

        except Exception:
            logging.exception("failed to predict %s. skipping" % sample.video_file_path)
    def predict(self, predict_queue, play_queue, lock):

        with lock:
            print("*Start Predict*\n")

        counter = 0
        while True:

            video_data, mixed_signal, mixed_spectrograms, video_slice_number, audio_slice_number = predict_queue.get(
            )

            # Spectrogram Test
            # self.collect_frames_for_saving(mixed_signal, self.save_original, object_flag=False)
            # after_spectrograms = reconstruct_speech_signal(mixed_signal, mixed_spectrograms, self.fps)
            # self.collect_frames_for_saving(after_spectrograms, self.save_signal, object_flag=True)

            counter += 1
            try:

                predicted_speech_spectrograms = self.network.predict(
                    mixed_spectrograms, video_data)
                predicted_speech_signal = reconstruct_speech_signal(
                    mixed_signal, predicted_speech_spectrograms, self.fps)

                self.collect_frames_for_saving(predicted_speech_signal,
                                               self.save_predicted,
                                               object_flag=True)

                play_queue.put((predicted_speech_signal, video_slice_number,
                                audio_slice_number))

                if (video_slice_number == 0 and predict_queue.empty()) or\
                        (audio_slice_number == 0 and predict_queue.empty()):
                    with lock:
                        print("*Predict queue is empty*\n")
                        print("Predict: " + str(counter))
                    predict_queue.close()
                    break

            except Exception:
                logging.exception("Failed to predict")