Как перевести изображение в звук

Превращаем картинку в звук

Как перевести изображение в звук

Попробуем заняться довольно бессмысленным занятием, а именно получением звука с определенной спектрограммой. Вдруг ряды любителей ЭГФ сократятся, не в обиду фанатам фильма «Белый шум» 🙂
Итак, начнем с моделирования на Matlab. Хотим алгоритм, позволяющий переводить звук в картинку-спектрограмму и обратно. Логично будет начать с вычисления спектрограммы, по которой будет вычисляться изображение.

Чтобы не делать того, что уже давно сделано за нас другими, здесь используется функция enframe из библиотеки voicebox,предназначенной для решения разнообразных задач при распознавании речи. Функция enframe как раз и позволяет нарезать сигнал на кадры с заданным шагом. Длину кадра мы берем мы берем равным длине преобразования Фурье(FFTLEN= 256), а шаг — половина этого значения(128). Все в лучших традициях 🙂 На каждый кадр накладывается окно Хэннинга для устранения боковых лепестков при вычислении ДПФ. Так как кадры идут с половинным перекрытием, то при наложении окна, сумма весов под перекрывающимися участками равна 1 и мы легко можем восстановить сигнал в половине кадра по двум соседним кадрам.

Для фразы «Почему не стоит пользоваться аутсорсингом в странах с дешевой рабочей силой» получилась следующая спектрограмма:

Как перевести изображение в звук

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

Первая проблема пока остается, для решения второй я пытался подкручивать фазу при сборке полукадров — через один полукадр. Делалось это примерно так:

После восстановления, получилось вот что

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

Немножко сжульничал, строчкой «image = 1-image;» сделав негативное изображение, чтобы наш мишка выглядел яркими пятнами на темном, а не наоборот. Иначе — было бы слишком много шума.

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

Исходный код и все необходимое из статьи можно скачать отсюда.

Источник

Нейросеть научили превращать картины в музыку

Как перевести изображение в звук

Винсент ван Гог / «Фермерский дом на пшеничном поле» / Музей ван Гога, Амстердам

Нидерландские разработчики создали нейросеть, способную проявлять искусственный аналог визуально-звуковой синестезии — способности соотносить визуальные ощущения со звуками. Алгоритм состоит из двух частей, одна из которых кодирует изображение в высокоуровневое представление, а вторая декодирует это представление в музыку. Особенность алгоритма заключается в том, что он обучался самостоятельно без пар типа изображение-музыка. Разработчики описали алгоритм в статье на arXiv.org, а также расскажут о нем на конференции ICCVW 2019.

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

Максимилиан Мюллер-Эберштайн (Maximilian Müller-Eberstein) и Нанне ван Ноорд (Nanne van Noord) из Амстердамского университета разработали алгоритм, способный проводить преобразование между изображениями и музыкой, причем при обучении он не требует соотносить изображения с музыкой, а учится этому самостоятельно, применяя метод обучения без учителя.

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

Как перевести изображение в звук

Схема работы алгоритма

Maximilian Müller-Eberstein, Nanne van Noord / arXiv.org, 2019

Разработчики обучали алгоритм на популярном датасете MNIST, содержащем 60 тысяч рукописных символов, а также на датасете Behance Artistic Media, из которого они использовали около 180 тысяч картин маслом и акварелью. В качестве музыкального декодировщика они использовали обученную нейросетевую модель MusicVAE.

После обучения авторы проверили точность работы алгоритма количественно, с помощью нескольких метрик, в том числе расстояния Кульбака — Лейблера, а также качественно. Для второй оценки они попросили добровольцев описать свои эмоции при просмотре изображений из датасета с картинами. Эксперимент показал, что после обратного автокодирования эмоции совпадали с эмоциями при оценке исходного изображения со средней точностью 71 процент. Оценить работу алгоритма можно самостоятельно на сайте авторов.

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

Источник

Передача звука через картинки в соцсетях

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

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

Принцип такой: что картинка, что звук, на компьютере представлены в цифровой форме. Следовательно, звук можно представить в файловой системе и в форме текста (переименовав, допустим, тот же «giveitaway.wav» в «giveitaway.txt»), и в форме RAW-картинки, при этом оставив возможность восстановить возможность проигрывания этого звука в обычном медиапроигрывателе.

Что я использовал: Audacity 2.0.3 и Adobe Photoshop CS2

1. Возьмём запись репетиции моей группы. Вырежем из неё какой-нибудь наглядный 15-секундный отрывок. Вставим в audacity.
Как перевести изображение в звук
2. Экспортируем данный отрывок в raw-звук для открытия в Photoshop. Учитывая ограничения ВКонтакта на размер картинок в 5мб, (в Документах ограничение 200мб) придется ужимать аудио, которое получилось слишком большим. У меня получилось 1,26mb (44,1khz @ 16bit mono, формат источника), поэтому можно смело импортировать его в фоторедактор без предварительного сжатия.
Так как картинка должна быть квадратной, придется подгонять числа пикселей так, чтобы как можно больше битов уместилось на картинку.
Как перевести изображение в звук
где Dimensions — ширина/высота картинки, Channels — количество каналов и depth — глубина цвета. В силу сжатия jpeg, которое добавляет артефакты на картинку, загруженное ВК, не советую делать картинку цветной (2 и более каналов). Хотя это и сократит картинку в разрешении, сжатие jpeg добавит на картинку цветные шумы, что исказит значения цвета в каждом канале от оригинала и приведет к сильнейшим шумам на аудиозаписи, которую вы хотите получить от картинки из ВК. Следует стараться делать картинку моноцветной и с как можно меньшей глубиной цвета, чтобы сэмпл звука занимал 1-2 пикселя на картинке. Получаем результат:
Как перевести изображение в звук
3.Теперь сохраняем картинку в PNG non-interlaced, чтобы с нашей стороны не страдало лишний раз качество, ведь PNG тут имеет lossless-сжатие, благо, ВК поддерживает этот формат. Тут уже можно открывать PNG в Photoshop и экспортировать RAW с идентичными свойствами, но это мы сделаем уже с картинкой из вконтакта.
4. Загружаем успешно картинку, видим результат (тут она уменьшена)
Как перевести изображение в звук

Все, звук в картинку мы закодировали и отправили на сервис, где она сконвертировалась в JPEG. Теперь, я полагаю, нам нужно эту картинку перевести обратно в звук.
5. Загружаем картинку с сервиса (поделиться/загрузить оригинал на диск) и открываем её в Photoshop, затем сохраняем в RAW-формат.
Как перевести изображение в звук

Как перевести изображение в звук
Header нам не нужен, оставляем на 0. Выскочит диалоговое окно о невозможности сохранения exif-тэгов — нажимаем OK.
6. Теперь вставляем RAW-файл в audacity. Очень важно, чтобы битность звука в настройках Audacity стояла 16-bit (в нашем случае, по крайней мере), иначе вместо звука импортируется каша. Моя запись после конвертации в jpeg прибавила не так много шумов, слушать можно. Изменения в амплитуде вообще малозаметны на глаз.
Как перевести изображение в звук
7. Конвертируем в удобный для вас аудиоформат.

Вообще, по правде говоря, много аудиоинформации в CD-моно качестве такой картинкой не передашь — но 15-30 секундный отрывок переслать реально. Нужно больше — уменьшайте частоту дискретизации и битность звука. Но я надеюсь, что с ростом мощностей ВК ограничения будут постепенно ослабляться, что даст возможность пересылать таким образом все больше и больше звука.

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

Источник

Преобразуем изображение в звук — что можно услышать?

В недавней публикации здесь на сайте описывалось устройство, позволяющее незрячим людям «видеть» изображение, преобразуя его с помощью звуковых волн. С технической точки зрения, в той статье не было никаких деталей вообще (а вдруг украдут идею за миллион), но сама концепция показалась интересной. Имея некоторый опыт обработки сигналов, я решил поэкспериментировать самостоятельно.

Как перевести изображение в звук

Что из этого получилось, подробности и примеры файлов под катом.

Преобразуем 2D в 1D

Первая очевидная задача, которая нас ожидает — это преобразовать двухмерное «плоское» изображение в «одномерную» звуковую волну. Как подсказали в комментариях к той статье, для этого удобно воспользоваться кривой Гильберта.
Как перевести изображение в звук
Она по своей сути похожа на фрактал, и идея в том, что при увеличении разрешения изображения, относительное расположение объектов не меняется (если объект был в верхнем левом углу картинки, то он останется там же). Различные размерности кривых Гильберта могут дать нам разные изображения: 32×32 для N=5, 64×64 для N=6, и так далее. «Обходя» изображение по этой кривой, мы получаем линию, одномерный объект.

Следующий вопрос это размер картинки. Интуитивно хочется взять изображение побольше, но тут есть большое «но»: даже картинка 512х512, это 262144 точек. Если преобразовать каждую точку в звуковой импульс, то при частоте дискретизации 44100, мы получим последовательность длиной в целых 6 секунд, а это слишком долго — изображения должны обновляться быстро, например с использованием web-камеры. Делать частоту дискретизации выше бесмысленно, мы получим ультразвуковые частоты, неслышимые ухом (хотя для совы или летучей мыши может и пойдет). В итоге методом научного тыка было выбрано разрешение 128х128, которое даст импульсы длиной 0.37c — с одной стороны, это достаточно быстро чтобы ориентироваться в реальном времени, с другой вполне достаточно, чтобы уловить на слух какие-то изменения в форме сигнала.

Обработка изображения

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

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

Из кода, надеюсь, все понятно. Функция coordinates_from_distance делает за нас всю работу по преобразованию координат (х, у) в расстояние на кривой Гильберта, значение яркости L мы инвертируем и преобразуем в цвет.

Это еще не все. Т.к. на изображении могут быть большие блоки одного цвета, это может привести к появлению в звуке «dc-компоненты» — длинного ряда отличных от нуля значений, например [100,100,100. ]. Чтобы их убрать, применим к нашему массиву high-pass filter (фильтр Баттерворта) с частотой среза 50Гц (совпадение с частотой сети случайно). Синтез фильтров есть в библиотеке scipy, которым мы и воспользуемся.

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

Результаты

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

Как перевести изображение в звук

Изображению соответствует такой звуковой сигнал:
Как перевести изображение в звук

Как перевести изображение в звук

Идея этого теста — сравнить «звучание» объекта другой формы. Звуковой сигнал:
Как перевести изображение в звук

Можно заметить, что звучание действительно другое, и на слух разница есть.

Как перевести изображение в звук

Идея теста — проверить объект меньшего размера. Звуковой сигнал:
Как перевести изображение в звук

В принципе, чем меньше размеры объекта, тем меньше будет «всплесков» в звуке, так что зависимость тут вполне прямая.

Как подсказали в комментариях, можно использовать преобразование Фурье для непосредственной конвертации картинки в звук. Сделанный по-быстрому тест показывает такие результаты (картинки те же):
Тест-1: cloud.mail.ru/public/2C5Z/5MEQ8Swjo
Тест-2: cloud.mail.ru/public/2dxp/3sz8mjAib
Тест-3: cloud.mail.ru/public/3NjJ/ZYrfdTYrk

Тесты звучат интересно, по крайней мере, для маленького и большого квадратов (файлы 1 и 3) разница на слух хорошо ощутима. А вот форма фигур (1 и 2) практически не различается, так что тут тоже есть над чем подумать. Но в целом, звучание полученное с помощью FFT, на слух мне нравится больше.

Заключение

Данный тест, разумеется, не диссертация, а просто proof of concept, сделанный за несколько часов свободного времени. Но даже так, оно в принципе работает, и разницу ощущать на слух вполне реально. Я не знаю, можно ли научиться ориентироваться в пространстве по таким звукам, гипотетически наверно можно после некоторой тренировки. Хотя тут огромное поле для улучшений и экспериментов, например, можно использовать стереозвук, что позволит лучше разделять объекты с разных сторон, можно экспериментировать с другими способами конвертации изображения в звук, например, кодировать цвет разными частотами, и пр. И наконец, перспективным тут является использование 3d-камер, способных воспринимать глубину (увы, такой камеры в наличии нет). Кстати, с помощью несложного кода на OpenCV, вышеприведенный алгоритм можно адаптировать к использованию web-камеры, что позволит экспериментировать с динамическими изображениями.

Ну и как обычно, всем удачных экспериментов.

Источник

Печать и воспроизведение звука на бумаге

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

На ум сразу приходит QR-код или некие его аналоги. В такой код можно записать ссылку на mp3, или даже совсем маленький звуковой файл. Но в первом случае требуется выход в сеть, а во втором — большая плотность кода и повышенные требования к качеству изображения. Кроме того, ни тот ни другой способ не обеспечит мгновенное воспроизведение.

Что, если кодировать звук не в цифровом, а в аналоговом формате? То есть, допустить возможность больших потерь информации с сохранением основных «очертаний» звукового послания. Например, такие потери возникнут при плохом освещении, плохой камере, маленькой картинке, мятой или рваной бумаге с кодом. Пусть со страшными артефактами, но картинка должна звучать.

Как перевести изображение в звук

На протяжении нескольких лет я занимаюсь изучением советского фотоэлектронного синтезатора АНС, созданного инженером Евгением Мурзиным в период с 1938 по 1958 г. Синтезатор базируется на более ранней технологии так называемого «рисованного звука», более подробно о которой можно почитать, например, в этой статье или на сайте Поколение Z. Фишка же АНСа заключается в том, что музыка создается путем рисования спектрограммы и играется потом неким подобием современного сканера — вертикальное сканирующее устройство просвечивает партитуру, проецируя свет на специальные диски (своего рода оптические преобразователи Фурье), которые готовый модулированный сигнал посылают на фотоэлементы. Такой формат идеально подошел бы для записи звука в графическом виде. Поврежденная или уменьшенная спектрограмма может потерять некоторые гармоники, но сохранит общую картину для последующего воспроизведения. И очень кстати мною был создан программный симулятор синтезатора АНС — Virtual ANS, способный не только играть такие партитуры, но и создавать, конвертируя аудио-файл в картинку спектра. То, что нужно!

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

Проекту дадим название PhonoPaper. Спецификация кода выглядит следующим образом:
Как перевести изображение в звук

Бесплатная программа-сканер была написана приблизительно за 2 месяца на языке Pixilang с использованием движка Virtual ANS (для проигрывания сонограммы в реальном времени). На текущий момент она доступна для платформ Android и iOS. Поддержка других систем — в планах.

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

Источник

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

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