Как убрать лишние звуки из аудио python
Перейти к содержимому

Как убрать лишние звуки из аудио python

  • автор:

Есть ли библиотека обработки wav файлов?

Здравствуйте, если вы зашли сюда. то вполне возможно вы встречались со следующей проблемой.

Когда необходимо убрать шумы, а также нормализовать аудиофайл (формат .wav), а также убрать пустые пробелы в аудиозаписи.
Знаю, что уйма библиотек для редактирования именно видеофайлов, но изначально оно не задумывалось для обработки только аудио.

В моём случае необходимо обработать только аудио, причём в автоматическом режиме. ИИ, к сожалению, не пойдёт, тк сейчас не имею возможности как-нибудь обучать и т.д.

Таким образом, возможно вы встречались с данной задачей и благополучно решили её, поделитесь своим опытом =)

P.S> обыскал всё, но пока не нашёл то, что мне нужно.

94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
Ответы с готовыми решениями:

Есть ли библиотека для обработки звука??
Здраствуйте, нужна бесплатная библиотека для обработки звука, что можете посоветовать?

Библиотека bass, амплитуда сигнала (wav)
Здравствуйте, в силу некоторых причин у меня появилась задача написать программу которая бы.

Подскажите модуль для обработки Wav в RAW
Нужно определиться с модулем Pyton для выполнения следующих операций с wav-файлами: 1. свести.

Запись звука в WAV файл на Python. Библиотека sounddevice, playsound
Здравствуйте, программисты. Буду благодарен вашей помощи. Недавно начал изучать язык python и.

Удаление фрагментов аудио из файла по образцу

Есть задача удалить из аудио-дорожки видео файла некоторые фрагменты по образцу. Например, щелчки, хлопки, цоканье и т.п.

То есть берутся образцы звуков на вычищение и входные файлы (видео с аудио-дорожкой или просто аудио), на выходе — файлы, очищенные от звуков, подобных заданным сэмплам.

Возможно, тут понадобится machine learning, и на первом этапе будут на входе только звуковые сэмплы, чтобы получить некую модель, а на втором этапе эта модель будет применяться для очистки файлов.

В найденных фрагментах — либо просто заглушать в ноль всё аудио (на либо вычленять только сам звук, подходящий по характеристикам, оставляя все остальные звуки как есть. В принципе, первое проще, и этого достаточно. Второе — уже совсем в идеале.

Буду использовать Kotlin или Python, в зависимости от того, для какой платформы найдутся подходящие библиотеки.

Можете подсказать, какие библиотеки можно использовать для решения такой задачи?

P.S.:
Если вдруг уже существует какой-нибудь простой инструмент, который может делать это (выбрать фрагменты и удалить подобные в пачке файлов), было бы интересно узнать.

�� Подобається Сподобалось 0

До обраного В обраному 0

Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter

32 коментарі

Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter
Victor Gubin Programmer 02.01.2021 08:13

Gstreamer и Tensorflow. Но придется модель обучать. 2. Сразу вангую — переходи на C++ сильно проще будет с API и т.д.

Victor Gubin Programmer 02.01.2021 09:05

TF — это C++ с возможностью дергать ее из python (binding frontend) в том числе, что для разного рода маркетологов намного удобнее потому что для них программирование не профильная деятельность. C++ надмножество C, любые C библиотеки легко используются из C++ без дополнительных телодвижений, в чем и заключается очень большое преимущество. Впрочем если вы найдёте хорошие bindings к Java/Scala или к python (а они есть) то дерзайте.

Victor Gubin Programmer 03.01.2021 02:30

Старые версии не застал. Сейчас документация ± ok как и инпутами. Примеры прямо на сайте. Блазер только раздражает, почему они не делают цмейк как все — я хз.

Второе — это очень сложно делать даже руками. Невероятно сложно

Włodzimierz Rożkow інфлюенсер в t.me/full_of_hatred 27.12.2020 22:49
Dmytro Hrebeniuk Mobile Software Enginner в Self-Employment 27.12.2020 13:24

У вас задача: найти фрагмент в дорожке и вырезать из таймлайна или подавить этот звук но при этом оставить фоновый?

Если вариант 1, то с помощью нейронов не сложно делать:
* Формируете dataset со звуками
* Разделяете аудио на фреймы
* Перегоняете через фреймы STFT
* Обучаете классификатор
* Определяете какой типа звука находится в этом коротком фрейме
* Вырезаете
* Profit

Если вариант 2 то это все намного сложнее, но варианты решения используя те же GAN тоже есть.
* Формируете dataset — с подавленными звуками и с обычными
* Разделяете аудио на фреймы
* Перегоняете через фреймы STFT
* создаете pipeline для обучения и подбираете какую-то удачную архитектуру для GAN
* обучаете
* перегоняете аудио фреймы обратно через Inverse STFT(еще надо проблемы с фазой решить)
* Profit

Victor Musienkо Senior Engineer в Noibu.com 02.01.2021 03:25
Victor Musienkо Senior Engineer в Noibu.com 02.01.2021 08:10

Ну кто вас знает, мб вы боги ML

Полно разных тулзов в инете. Я удалял звук дрона, который висел передо мной, чтобы оставался только мой голос. Но результат далеко не идеальный будет

Звук дрона имеет чётко выраженный характер волны, если быть точным, 4 волн. Со всей вытекающей спектралкой. То есть идеально не будет, поскольку он глушит сам сенсор, превышая его амплитуду восприятия. Но можно попробовать поймать волновые составляющие голоса, и по сути оставить только их.

А реально с дрона писать звук — дохлый номер, для этого надо ему присобачить микрофон на проводе, ну или сделать очень направленный с суперкардиоидой — но придётся пободаться подвеску делать, хотя результат может того стоить.

Хороший результат может дать использование микрофонной матрицы. Хотя как по мне, лучше решать вопрос в лоб, и в место дрона с 4 винтами летать вертолётом с одним несущим винтом — и тогда не иметь столь сильных помех, снизив обороты. Но и тогда нужен хороший сенсор звука и запись в формат, позволяющий брать весь размах амплитуды.

Paul Loyanich CTO в CoreDev 27.12.2020 12:30

летать вертолётом с одним несущим винтом

такой не сможет зависнуть.

Полно разных тулзов в инете.

Прекрасный ответ, я уж думал как без таких советчиков обошлось, неужто подводное членистоногое на каменной возвышенности извергло сигнал звуковой частоты в высокой части спектра с выраженным резонансным пиком

Звук дрона — это равномерный фоновый шум, это другой случай. А я хочу удалять короткие звуки, отличающиеся неким всплеском.

Инструментов нет, ни простых, ни сложных. Причина в природе самого сигнала и помехи. Они живут на одних частотах. А значит либо нужно опознавать сам сигнал и перевоспроизводить его заново генератором, либо мириться с примитивной спектральной чисткой.

Типичный способ избавиться от шипящих шумов — эхо. Грубо говоря, переотражение с АЧХ-сдвигом. Это то, что тебе сделает редактор. А уж как писать скрипт под редактор, который тебе понравился — RTFM.

Пойми, кроме сэмпла нужен ещё и критерий, по которому этот сэмпл считается на что-то похожим. Потому что это твой мозг умеет опознавать эти сэмплы, зная примерно возможный их источник. А компьютеру сие неведомо, и он не сможет убрать, скажем, пердёж, с твоей пафосной речуги. Потому что пердёж пердежу рознь, настолько что можно симфонию сложить.

Я примерно понимаю цель: почистить от шумов и распознать. Но фокус в том, что для выделения сигнала от шума, как раз и требуется распознать сигнал. Не шум. Именно это делаешь ты, когда пытаешься что-то расслышать. Не веришь — попробуй распознать от шума разговор на малознакомом тебе языке. Шансов ноль.

Если нужно распознавать разговор, сделай на эквалайзере повышение частот именно там, где имеет место резонанс в человеческом ухе. Поидее алгоритмы распознавания (качественные) и сами должны это делать, но ради эксперимента попробуй. Не забывай перевести звук в формат с плавающей точкой, либо же уменьшить громкость — иначе тебе после преобразования не хватит запаса амплитуды и ты получишь ещё помех.

Общий смысл такой: сперва добейся. Сделай в редакторе то что тебе требуется, и когда будешь доволен качеством — ищи фильтры, которые из командной строки могут сделать требуемый тебе эффект. Но всегда помни, что распознавать будешь не ты, а программа, поэтому не верь себе на слух, давай итог правки на тест распознавателю.

Не идеальны — не то слово. Но можно подобрать параметры при которых искажения оставшегося звука будут не особо критичны. Я и предлагаю ТС взять редактор, сначала сделать руками, а уже потом написать скрипт или под сам редактор, или под программу автоматизации — которая будет вызываться из батника, а батник будет по очереди подменять одну и ту же ссылку на файлы по списку, после чего запускать прогу, которая будет давить нужные кнопки, в идеале, горячие клавиши.

Это тоже вполне нормальный вариант. Знать бы только какой редактор и какой плагин брать.

Разбираемся, как подавить шум в речи с помощью глубокого обучения и OpenVINO

Данная статья будет полезна студентам и тем, кто хочет разобраться с тем, как происходит шумоподавление речи (Speech Denoising) с помощью глубокого обучения. На Хабре уже были статьи по данной тематике несколько лет назад (раз, два), но нашей целью является желание дать несколько более глубокое понимание процесса работы со звуком.

Картинка со звуком

Задача шумоподавления с помощью глубокого обучения и OpenVINO попала в руки к студентам ITlab – учебно-исследовательской лаборатории Университета Лобачевского при поддержке компании Intel. Студенты, начиная со 2 курса, под руководством преподавателей работают над интересными инженерными и научными проектами. Создание высокопроизводительного программного обеспечения требует применения специальных инструментов разработчика и технологий параллельного исполнения кода, и в рамках проектов лаборатории студенты с ними знакомятся. Данная статья является результатом работы студентов Вихрева Ивана, Рустамова Азера, Зайцевой Ксении, Кима Никиты, Бурдукова Михаила, Филатова Андрея.

Что есть звук в компьютере

Подавление фонового шума речи беспокоит людей уже очень давно, а с приходом дистанционной работы и обучения значимость проблемы возникла многократно. Разговаривать через интернет приходится все больше, и аудиосообщения встроены во все популярные мессенджеры. Как бы банально не звучало, но хороший, чистый звук человек воспринимает лучше. Однако хороший микрофон стоит денег, да и звукоизоляция в среднестатистической квартире оставляет желать лучшего, и мы слышим всё — от работы кулеров в ноутбуке и заканчивая дрелью надоедливого соседа (шум дрели у преподавателя особо мешает восприятию материала).

Как получить чистый звук, не покупая студийный микрофон и не обивая всю квартиру звукоизолирующими материалами? Над этим вопросом люди думают ещё с конца прошлого века. Решением стали программы, оцифровывающие и редактирующие входящий из микрофона звук.

Lizemijn Libgott / Vice.com

Записанный звук состоит из множества звуковых волн, одновременно попадающих на датчик микрофона в некоторый промежуток времени, в результате чего мы получаем длинный вектор из чисел — это амплитуды (громкость) сигнала в течение небольшого времени. Частота сигнала проводного телефона 8kHz, это значит что мы за секунду 8000 раз измеряем амплитуду (громкость) суммарного сигнала, звуковые карты как правило используют частоту 44.1 или 48kHz.

На этой картинке 3 секунды звука или график на 120 тысяч значений. При таком сильном сжатии по оси X кажется, что мы закрасили площадь под графиком.

Воспроизвести аудиофайл в Python можно с помощью библиотек soundfile и sounddevice.

import sounddevice as sd import soundfile as sf path_wav = 'test_wav.wav' data, fs = sf.read(path_wav) sd.play(data, fs) status = sd.wait()

Запись данных с микрофона тоже происходит очень просто — посмотрите и запустите record.py.

Кстати, важная для нас информация. Наша последовательность является суммой множества звуковых волн, и мы можем вычислить какие волны приняли участи в нашей сумме. Теоретически, любой сложный звук может быть разложен на последовательность простейших гармонических сигналов разных частот, каждый из которых представляет собой правильную синусоиду и может быть описан числовыми параметрами (а вы говорили, что матан не нужен). Исследования по данной тематике входят в область цифровой обработки сигналов, на хабре есть информация об открытом курсе «Основы цифровой обработки сигналов».

Справа мы видим спектр - вклад каждой из волн в частотное разложение. Схема с сайта nuancesprog.ru

Чтобы делать с аудио сложные вещи, такие как распознавание человека по голосу, перевод речи речи в текст или удаление шума с помощью глубокого обучения, нам понадобится вычислить вклад различных частот в аудиопоследовательность — спектр. Спектр можно представить в виде спектрограммы — изображения, показывающего зависимость амплитуды сигнала во времени на различных частотах. Один столбец в спектрограмме соответствует спектру короткого участка исходного сигнала, более тёплые тона означают большее значение.

Пример спектрограммы, полученной из звукового файла, при помощи библиотеки Numpy.

Спектр для спектрограммы можно вычислить с помощью дискретного преобразования Фурье, реализованного в библиотеке Numpy. Рассмотрим пример создания спектрограммы, описанный в сэмпле. Для этого используются две функции из файла features.py:

def calcSpec(y, params, channel=None): """compute complex spectrum from audio file""" fs = int(params["fs"]) # Константа, обозначающая частоту дискредитации # В нашем случае равна 16000 - наш wav файл записан с частотой 16 кГц if channel is not None and (len(y.shape)>1): # Если аудио содержит два канала (стерео) - берем только один канал sig = sig[:,channel] # STFT parameters N_win = int(float(params["winlen"])*fs) # Расчёт размера окна Хэннинга # В нашем случае 320 if 'nfft' in params: N_fft = int(params['nfft']) else: N_fft = int(float(params['winlen'])*fs) # Расчёт ширины окна для преобразования Фурье # В нашем случае 320 N_hop = int(N_win * float(params["hopfrac"])) # Расчёт прыжка для преобразования Фурье # В нашем случае 160 win = np.sqrt(np.hanning(N_win)) # Окно Хэннинга Y = stft(y, N_fft, win, N_hop) return Y 

Функция Stft проводит преобразование Фурье. Массив делится на части определённой длины (рассчитанной в calcSpec) и для каждой из частей применяется функция преобразования Фурье, взятая из Numpy возвращает готовую спектрограмму.

def stft(x, N_fft, win, N_hop, nodelay=True): """ short-time Fourier transform x - Входной сигнал N_fft - Количество точек, на которых используется преобразование win - Окно Хэннинга N_hop - Размер прыжка nodelay - Удаление первых точек из конечного массива (В них появляется побочный эффект преобразования) """ # get lengths if x.ndim == 1: x = x[:,np.newaxis] # Если подано несколько файлов, то создаётся дополнительная ось Nx = x.shape[0] # Количество точек во входных данных (в нашем случае 160000) M = x.shape[1] # Количество файлов во входных данных (в нашем случае 1) specsize = int(N_fft/2+1) N_win = len(win) # Размер окна Хэннинга N_frames = int(np.ceil( (Nx+N_win-N_hop)/N_hop )) # На сколько частей делим входной массив Nx = N_frames*N_hop # padded length x = np.vstack([x, np.zeros((Nx-len(x),M))]) # init X_spec = np.zeros((specsize,N_frames,M), dtype=complex) # Заполненная нулями матрица, которая станет спектрограммой win_M = np.outer(win,np.ones((1,M))) # Создаём матрицу, в которой каждый столбец равен окну Хэннинга x_frame = np.zeros((N_win,M)) # Заполненный нулями вектор (вектора в случае если на вход дали несколько файлов) for nn in range(0,N_frames): idx = int(nn*N_hop) x_frame = np.vstack((x_frame[N_hop. ], x[idx:idx+N_hop,:])) # Разделяем входной массив на куски размера N_hop x_win = win_M * x_frame X = np.fft.rfft(x_win, N_fft, axis=0) # Преобразование возвращает столбец комплексных, где действительная часть - амплитуда, а комплексная - фазовый сдвиг X_spec[:,nn,:] = X # Добавляем полученный столбец в спектрограмму if nodelay: delay = int(N_win/N_hop - 1) X_spec = X_spec[:,delay. ] # Удаляем лишний столбец из начала if M==1: X_spec = np.squeeze(X_spec) # Удаляем лишнюю ось return X_spec

Также важной функцией является calcFeat, позволяющая нам прологарифмировать спектрограмму, растягивая нижние частоты и сжимая верхние. Голос человека лежит в диапазоне 85-3000Гц, а диапазон звуковых частот в нашей записи 16кГц — маленький промежуток на всем диапазоне, и помощью логарифмирования мы “растягиваем” нужные нам низкие частоты и “поджимаем” ненужные высокие

def calcFeat(Spec, cfg): """compute spectral features""" if cfg['feattype'] == "MagSpec": inpFeat = np.abs(Spec) elif cfg['feattype'] == "LogPow": pmin = 10**(-12) powSpec = np.abs(Spec)**2 # Все значения спектрограммы возводятся в квадрат inpFeat = np.log10(np.maximum(powSpec, pmin)) # и логарифмируются с обрезанием слишком низких значений else: ValueError('Feature not implemented.') return inpFeat 

Наша глубокая модель удаления шума обучена на логарифмированных спектрограммах, поэтому предобработка данной функцией обязательна. Чтобы преобразовать спектрограмму, полученную применением фильтра (выход нейросети) на образ-Фурье, полученный с помощью функции calcSpec, в звук используется функция Spec2sig. В ней вычисляются параметры обратного преобразования Фурье и вызывается функция istft (обратное быстрое преобразование Фурье).

def spec2sig(Spec, params): """Конвертирует спектрограмму в звук""" # частота дискретизации fs = int(params["fs"]) # ширина окна N_win = int(float(params["winlen"])*fs) if 'nfft' in params: N_fft = int(params['nfft']) else: # длина быстрого преобразования Фурье N_fft = int(float(params['winlen'])*fs) #длина сегментов окна N_hop = int(N_win * float(params["hopfrac"])) # окно Хеннинга win = np.sqrt(np.hanning(N_win)) # обратное преобразование Фурье x = istft(Spec, N_fft, win, N_hop) return x

В istft обратное преобразование Фурье также выполняется при помощи функции взятой из Numpy.

def istft(X, N_fft, win, N_hop): # get lengths specsize = X.shape[0] # Спектрограмма N_frames = X.shape[1] # кол-во кадров if X.ndim < 3: X = X[. np.newaxis] # Приведение размера до 3 M = X.shape[2] # кол-во каналов N_win = len(win) # длина окна хеннинга Nx = N_hop*(N_frames - 1) + N_win # Умножение матрицы win и единичной матрицы размера 1,M win_M = np.outer(win,np.ones((1, M))) x = np.zeros((Nx,M)) # нулевая матрица Nx,M для сохранения ответа for nn in range(0, N_frames): X_frame = np.squeeze(X[:,nn,:]) # Вектор по данному фрейму # обратное преобразование фурье для X_frame ,N_fft x_win = np.fft.irfft(X_frame, N_fft, axis=0) x_win = x_win.reshape(N_fft,M) # изменяем размер # получаем окно хеннинга нужного размера x_win = win_M * x_win[0:N_win,:] # добавляем результат для данного фрейма idx1 = int(nn*N_hop); idx2 = int(idx1+N_win) x[idx1:idx2,:] = x_win + x[idx1:idx2,:] if M == 1: x = np.squeeze(x) # Убираем лишние измерения если канал один return x

Звуковой сигнал, записываемый в реальных акустических условиях, часто содержит нежелательные шумы, которые могут порождаться окружающей средой или звукозаписывающей аппаратурой. Значит, полученное цифровое описание также будет содержать нежелательные шумы.

Речь до и после удаления шума

Чтобы “очистить” звук, к цифровому описанию необходимо применить фильтр, который убирает нежелательные шумы. Но возникает другая проблема. Каждый из видов шумов требует свой фильтр, который необходимо подбирать вручную или искать в банках данных фильтров. Отфильтровать шум на частотах, отличающихся от человеческой речи, проблем нет, от них избавлялись еще до этих ваших нейросетей. А вот убрать детский плач или стучание клавиш без значительного ухудшения качества голоса было проблематично.

В решении данной проблемы могут помочь модели глубокого обучения. Основное преимущество нейросетей перед заранее подготовленными фильтрами заключается в большем охвате различных видов шумов. Нейросеть можно натренировать, постоянно добавляя всё новые виды шума.

В нашем случае мы воспользуемся моделью NSNet2. Эта нейронная сеть использовалась в Deep Noise Suppression Challenge, проводимом компанией Microsoft. Целью разработки данной сети было создание модели для очистки звука от шума в реальном времени. Данная модель состоит из полносвязного слоя с ReLU, двух рекуррентных GRU (Gated Recurrent Unit) блоков и полносвязных слоев (FF, feed forward) с ReLU и sigmoid активацией.

На речь влияет большое количество внешних условий. Человек может говорить громко или тихо, быстро или медленно, говорить он может в большой комнате или в маленькой, далеко от микрофона или близко к нему. Для моделирования этих более сложных условий, были применены аугментации. В частности, в данном случае, для модификации звука использовались случайные биквадратные фильтры. Благодаря применения таких аугментаций, зашумление звука наиболее приближено к реальным условиям.

Представленные результаты по качеству работы можно посмотреть в статье Data augmentation and loss normalization for deep noise suppression. Построенная модель имеет хорошие показатели для различных типов шума.

Конвертация модели в OpenVINO

При работе с нашей моделью мы использовали OpenVINO (Open Visual Inference & Neural Network Optimization) - продукт, разрабатываемый компанией Intel. Как видно из названия, OpenVINO - это набор инструментов для исполнения и оптимизации нейронных сетей.

Существует множество фреймворков для создания и тренировки нейросетей. Для того, чтобы можно было запускать нейросети из различных фреймворков на любом интеловском железе, в составе OpenVINO есть модуль Model Optimizer.

Мы берем обученную модель в каком-либо фреймворке, конвертируем в OpenVINO и теперь можем запустить хоть на CPU, хоть на iGPU или dGPU, хоть на FPGA

По факту, Model Optimizer - это набор python-скриптов, которые позволяют привести нейронные сети различных форматов к некоторому универсальному представлению, называемому IR (Intermediate Representation). Это позволяет OpenVINO работать с любой нейросетью, независимо от того, из какого фреймворка она взята.

В процессе своей работы Model Optimizer также оптимизирует структуру сверточных нейронных сетей. Например, объединяя результаты сверток, заменяя слои на последовательность линейных операций и т.д.

В последнее время, с появлением API, в Model Optimizer проводится все меньше оптимизаций, и основная его работа сводится к конвертации моделей без каких-либо серьезных изменений.

Конвертация в IR-представление различается для моделей из Open Model Zoo и других моделей. Open Model Zoo – репозиторий глубоких нейросетевых моделей, содержащий большое количество обученных моделей, которые могут исполняться при помощи OpenVINO. Данный репозиторий хранит не только модели, но и параметры для конвертации моделей из разных фреймворков в промежуточный формат OpenVINO.

Для конвертации моделей, загруженных из Open Model Zoo, нужно воспользоваться инструментом Model Optimizer и входящим в него скриптом converter.py. Данный модуль имеет доступ к параметрам конвертации моделей из зоопарка моделей.

Консольная команда для конвертации загруженной модели:

python converter.py --name --download_dir

Чтобы сконвертировать собственную модель, необходимо использовать скрипт mo.py с дополнительными параметрами:

python mo.py --input_model --output_dir --input_shape

Для конвертации нашей ONNX модели в формат OpenVINO (в Windows) вышеприведенная команда выглядит так:

python mo.py --input_model \nsnet2-20ms-baseline.onnx -output_dir --input_shape [1, 1000, 161] 

где 1 - количество каналов, 1000 - временных интервалов, 161 - частот.

Также, можно указать больше дополнительных параметров для удобства. Весь список возможных параметров можно посмотреть командой:

python mo.py --help

Отличие converter.py от mo.py лишь в том, что converter.py использует параметры для конвертации из описания модели в Open Model Zoo и передает их в mo.py

Надо отметить, что проблема шумоподавления до сих пор не решена полностью. Методике улучшения речи с помощью нейронных сетей в последнее время уделяется огромное внимание как в научных исследованиях, так и в коммерческих приложениях. Одним из важнейших преимуществ использования нейронных сетей для подавления шума является то, что они способны очищать звук от нестационарных шумов. Ранее известные подходы не позволяли этого сделать.

Нейросети не идеальны и избавиться абсолютно ото всех шумов не представляется возможным. Однако, представленная модель показала хорошие результаты в очистке речи в “домашних” условиях.

  • глубокое обучение
  • openvino
  • шумоочистка

нейросеть Deepface

Нейросеть умеет распознавать лица. Процесс прост — сравниваем две фотографии и она говорит с какой долей вероятности на обоих фотографиях один и тот же человек.

1

Я проверил на своих фотографиях. Две фото в фас распознало отлично:

2

Сравнение фотографий одна из которых со смещенным ракурсом уже не сработало, не помогла даже фуражка:

3

Самое интересное, что для процесса сравнения можно использовать разные предобученные модели от всяких крутых контор типа Google и Facebook: VGG-Face , Google FaceNet, OpenFace, Facebook DeepFace, DeepID, ArcFace, Dlib.
Автор даже сделал обзор и тесты на все эти модели. Самая лучшая оказалась Facenet от Facebook. Но и она не смогла справиться с моим фото в ракурсе.

4

Прикольная штука. DeepFace может в режиме реального времени отслеживать эмоции.
Распознает сносно, но нужен мощный компьютер, видео на моем маке с i5 под капотом тормозит. Думаю, что любая более-менее мощная видеокарта это дело поправит.

5

Ещё она умеет определять пол, расу и возраст. На некоторых фотографиях мне нейросеть нагадала 48 лет. Я обиделся на нее окончательно.

Еремин Л.В. Оцифровка и реставрация звука

Руководство уже устарело в плане того, что здесь разбирается обработка в программе Adobe Audition версии 2.0. Эта версия была выпущена в 2002 году, почти 20 лет назад (!). В самом же руководстве тема реставрации звука дана не в самой доходчивой форме и на мой взгляд неполно. Для понимания текста требуется предварительная подготовка. Но, из положительных моментов можно сказать, что довольно детально разобраны несколько фильтров, которые применяются и сейчас. В тексте есть различные определения каких-либо явлений. Интересные факты полезные для понимания природы звука в целом.

Архивотерапия

Этот текст написан для того, что бы его отправлять в случае необходимости в качестве ответа на очередной призыв спасать фольклор.
Вдохновил меня на это Сергей Николаевич Старостин, а идея была позаимствована у хорошего аналогичного текста непривет . Ознакомьтесь на досуге и с ним тоже. Не помешает.

Итак, периодически в интернете всплывает очередной призыв к спасению фольклора. Как правило содержание призыва сводится к тому, что нужно спасать архивы, нужно их оцифровывать, выкладывать в интернет и вообще что-то делать. Гибнет культура русского народа и всё в таком духе. Последний прочитанный мной призыв был подкреплен тремя фотографиями автора в разных позах. Для чего это было сделано мне неясно, но к спасению фольклора отношение имело явно весьма посредственное.

Делать что-то надо. Есть проблема, точнее две проблемы.
1) Пропадает культурное наследие
2) Сильное беспокойство по этому поводу (фрустрация)

Вывод напрашивается сам собой, надо идти и спасать и тем самым избавляться от неприятного чувства.
И с этим я как раз могу помочь. У Центра русского фольклора есть что спасать.
Перечень требующихся работ примерно таков:
Есть несколько тысяч единиц разных носителей Фольклорной комиссии, которые не были вывезены в Пушкинский дом и достались на хранение Центру русского фольклора. На сегодняшний день все носители получили свой регистрационный номер.

Так выглядит коробка с бобиной и на ней новый регистрационный номер

Все эти носители и их реестры отсняты на фотоаппарат и выложены в облако.
Задача первая — прочесть надписи на фотографиях и занести эти данные в exel файл вместе с присвоенным номером.

Папки с фотографиями носителей в облаке

Задача вторая — оцифровать эти носители. Часть из них не имеет опознавательных знаков вообще, поэтому в процессе оцифровки нужно прослушать запись и в случае если собиратель продиктовал, что и где он записывает так же внести эти данные в exel файл.

Записи ФК не единственные нуждающиеся в оцифровке. Я привел их лишь для примера.
И на этом работа с материалом не закончится, так как его нужно будет далее заносить в банк данных и описывать уже досконально.
Итак, теперь вы знаете что делать.
К сожалению, мой опыт работы в архиве показывает, что благородного порыва хватает на один — два дня работы. Но, как результат, человек наконец-то избавляется от гложущего его беспокойства по поводу гибнущего наследия. Архивотерапия работает безотказно.
Если вас не устраивает такой оффлайн способ, то у меня есть и удаленный способ.
Спасибо covid-19, он научил нас работать в онлайне!
Для этого я могу вам рассказать о краудфандинге у фольклористов. Бусти, Патреон и прочее в наличии. Пара сотен рублей отправленных на благое дело резко снимают острые приступы беспокойства.
Терапия абсолютно безвредна. Привыкания нет, синдрома отмены тоже.

Создание рабочей копии архива экспедиционных записей

Рабочая копия

В конце концов наступает момент, когда кассеты оцифровали, файлы собрали на один диск и нужна рабочая копия архива, для детальной описи и возможно публикации. На первый взгляд, технических сложностей нет, но, если архив занимает 1-5 терабайт несжатого звука в сложной и неоднородной структуре папок, то о копировании речь уже не идет. Описывать архив лучше на сжатом звуке, а стоимость жестких дисков не настолько еще мала, что бы этим можно было пренебречь.

Перед тем как сжать наш архив, полную копию все-таки придется сделать, но если нет для этого диска достаточного объема, то копировать и сжимать нужно по частям. Главное, что бы это делалось на копии, рекомендую сделать как минимум одну полную копию записей, в идеале же две копии и оригинал, хранить не в одном и том же здании.

Закон о сохранении информации

Сохранность информации прямо пропорциональна количеству копий данной информации.

Конвертация

Есть много программ конвертеров для аудио в том числе и бесплатных и в принципе для нашей задачи может подойти и простой Freemake или Avidemux конвертер, но поскольку мы имеем дело с большим объемом данных, то имеет смысл подумать о более надежном и гибком варианте.
Требования такие: возможность ведения лога конвертации (для того, что бы в случае ошибки можно было понять где произошла поломка и почему), максимальная поддержка существующих форматов и максимальная производительность.
Из бесплатных лучшим выбором будет консольный конвертер ffmpeg.
Он может быть собран из исходников с поддержкой вычислений на GPU
видео карт, что существенно повысит скорость конвертации.

Конвертер распространяется по лицензии GNU GPL, то есть бесплатен. Проект был образован в 2000 году, имеет активное обширное сообщество поддержки и может быть скомпилирован под различные платформы (Windows, Linux, MacOS и так далее). Для ffmpeg существует большое количество графических оболочек облегчающих работу новичкам, но они нас не интересуют, поскольку вся работа у нас производится в консоли.

Операционная система в которой мы конвертируем — Linux, в теории все то же самое можно проделать и в Windows, но это может оказаться нетривиальной задачей и в итоге возможно проще будет запустить Linux Live CD, что бы сделать конвертацию.
В консоли используем встроенную в Linux утилиту find , которая умеет искать файлы как по названию, так и по другим критериям (дата создания, размер, тип файла и прочее). Главной особенностью find является способность программы производить требуемое действие над найденным объектом.
В нашем случае, это будет передача wav файл на конвертацию программе ffmpeg. Вот команда которая запустит конвертацию архива в формат ogg

find ./ -type f -name '*.wav' -execdir ffmpeg -i <> -acodec libvorbis <>.ogg \; 1>>log.txt 2>>err.txt

Дословно команда делает следующее:

  • find ./ -type f -name ’*.wav’ — найти в текущем каталоге тип объекта — файл, имя объекта любое которое оканчивается на .wav
  • -execdir ffmpeg -i <> -acodec libvorbis <>.ogg \; — выполнить в текущей директории команду ffmpeg которой передаются следующие аргументы: -i <> имя найденного объекта, -acodec libvorbis применить к нему кодек libvorbis (ogg),
    и сохранить его как <>.ogg \; — найденное имя файла с добавлением
    расширения .ogg (файл будет сохраняться как audiofile.wav.ogg , конечно можно убрать лишние буквы wav в имени файла, но это может усложнит синтаксис и ухудшит понимание команды для тех, кто никогда не имел дела с консолью Linux).
  • 1>> log.txt 2>>error.txt — отправить весь вывод выполняемой команды в текстовый файл log.txt, а ошибки в error.txt. Оба файла будут сохранены в той директории откуда была запущена команда find.

Процесс сжатия архива в 2ТБ занимает около суток без применения вычислений на GPU, на процессоре Intel i7, в случае если процесс прошел без каких-либо критических ошибок, мы можем запустить команду удаления всех wav файлов.

find ./ -type f -name '*.wav' -execdir rm -f <> \;

rm -f <> — удалить (сокращение от remove) найденный файл.

В итоге из архива размером в 2ТБ мы получаем примерно 80ГБ.
Это не предел, поскольку при сжатии мы использовали настройки кодека по умолчанию, можно добиться более существенного сокращения объема если снизить битрейт и перевести записи в моно.

Донская вязь

Когда-то у нас был ансамбль Донская вязь
Михаил Масловский
Наталья Волкова
Сергей Стерликов
Василий Фоменко
Кирилл Чеботарёв

В 2009 году все это началось, а в 2017 собрались в последний раз.
Я лично считаю, что мы не выдержали испытания студийной записью.
Но было весело, это было хорошее время.
UPD 2022 Ансамбль возродили.
Новый состав:
Михаил Масловский
Кирилл Чеботарёв
Ирина Деревянкина

Это та самая запись в студии, она нам по большей части не понравилась. Писались наложением на один микрофон в домашней студии. Была мысль все это как-то дописать, переписать и довести до ума, но так и не собрались. Пусть будет здесь. Как памятник.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *