Как получить больше кадров в секунду при печати и сохранении изображений с помощью matplotlib - PullRequest
0 голосов
/ 15 июня 2019

Приведенный ниже код просматривает каталог аудиофайлов (~ 50 КБ), преобразует их в изображения спектрограмм и сохраняет каждый из них в одном каталоге верхнего уровня.

def plot_and_save(denoised_data, f_name):
    fig, ax = plt.subplots()

    i = 0
    # Add this line to show plots else ignore warnings
    # plt.ion()

    ax.imshow(denoised_data)

    ax.get_xaxis().set_visible(False)
    ax.get_yaxis().set_visible(False)
    fig.set_size_inches(10, 10)
    fig.savefig(
        f"{f_name}" + "_{:04d}.png".format(i),
        dpi=80,
        bbox_inches="tight",
        quality=95,
        pad_inches=0.0)

    ax.draw_artist(ax.xaxis)
    ax.draw_artist(ax.yaxis)

    i += 1


def standardize_and_plot(sampling_rate, file_path_image):
    logger.info(f"All files will be resampled to {sampling_rate}Hz")

    output_image_folder = "PreProcessed_image/"

    for dirs, subdirs, files in os.walk(file_path_image):
        for i, file in enumerate(files):
            if file.endswith(('.wav', '.WAV')):
                logger.info(f"Pre-Processing file: {file}")
                data, sr = librosa.core.load(
                    os.path.join(dirs, file), sr=sampling_rate, res_type='kaiser_fast')
                target_path = os.path.join(output_image_folder, dirs)

                pcen_S = apply_per_channel_energy_norm(data, sr)

                denoised_data = wavelet_denoising(pcen_S)

                work_dir = os.getcwd()

                if not os.path.exists(target_path):
                    os.makedirs(target_path)

                os.chdir(target_path)

                f_name, _ = os.path.splitext(os.path.basename(file))

                plot_and_save(denoised_data, f_name)

                os.chdir(work_dir)

if __name__ == '__main__':
    chunkSize = 3
    sampling_rate = 44100
    file_path_audio = 'Recordings'
    file_path_audio = "data/"
    output_audio_folder = "PreProcessed_audio/"

    file_path_image = os.path.join(output_audio_folder, file_path_audio)

    standardize_and_plot(sampling_rate, file_path_image)

Как мне оптимизировать метод plot_and_save ()? Сохранение этих изображений на диске занимает много времени (около 2-3 кадров в секунду). Я использую Google Colab для этой цели.

Примерно через полчаса сохранения этих изображений происходит сбой colab, сообщающий об использовании всей оперативной памяти. Есть ли способ узнать, где утечка памяти? Или есть способ ускорить процесс построения и сохранения?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...