Я программист?

Когда-то давно писал статью о звукозаписи на бумагу в форме дорожки оптической звукозаписи переменной площади.

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

Но была одна проблема - проблема "разрезания" изображения на отдельные дорожки для последующей конвертации в звук.

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

Для этих целей я использовал команду: convert out.pgm -crop 40x3300 +repage +adjoin out_tiles_%02d.pgm

Однако, это очень грубый резак - он не учитывает наклона и кривизны дорожек.

Тогда я понятия не имел как реализовать более или менее нормальное "разрезания" на сегменты, пока не познакомился с ИИ. Сразу оговорюсь, что рассматривается частный случай по ссылке выше.

Честно скажу, я выступал против внедрения ИИ в нашу жизнь, но сейчас изменил свое мнение...

Я потратил несколько дней на то, чтобы "объяснить" ИИ то, что мне нужно. Это было трудно, т.к нужно было разбираться в том, что тебе выдает ИИ (в части логического осмысления) и учиться формулировать запросы, вопросы и предложения.

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

Был момент, когда мы не поняли друг-друга. Например, я догадался, что для целей разделения изображения на сегменты, достаточно найти левый край каждой дорожки (они параллельны друг другу) и считывать звук в пределах ширины (окна) между их левыми границами. Но ИИ предлагал находить и уточнять оба темных края, что приводило к "замыливанию" самой звуковой волны - самой важной части звуковой дорожки.

Приводил разные примеры для иллюстрации того, чего хотел добиться:

Но дорожка имеет такой вид (я буду идти слева на право):
0, 0, 0, 0, 255, 255, 255, 255
0, 0, 0, 255, 255, 255, 255, 255
0, 0, 255, 255, 255, 255, 255, 255,
0, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255,
0, 0, 255, 255, 255, 255, 255, 255,
0, 0, 0, 255, 255, 255, 255, 255,
0, 0, 0, 0, 255, 255, 255, 255
0, 0, 0, 0, 0, 255, 255, 255
0, 0, 0, 0, 0, 0, 255, 255
0, 0, 0, 0, 0, 0, 0, 0
Вот, мы определили границу слева - это "0".
Идем дальше и изображение начинает "светлеть" (добавляются точки 255).
В какой-то момент, мы выходим к 255. Наша задача - сохранить "0" справа, т.е 8-ю колонку в моем примере.
Если же мы будем сравнивать с порогом, который меньше 255, тогда поиск границы справа остановится не на 8-й дорожке, а на, скажем, 3-й или 4-й, и мы теряем правый край.

Короче говоря, я написал программу по разделению изображения на сегменты :) Правда, она стала немного сложнее первой версии, но все же. В принципе, при более или менее ровных дорожках, разрезание происходит корректно.

А потом понеслась)) Я стал перепроверять код и алгоритм в разных ИИ, но в конце концов остановился на Gemini от Google. Именно "он" очень хорошо писал код. Модели Grok и Claude слишком усложняли задачу и код, полученный от этих ИИ, я потом правил и оптимизировал в Gemini.

Была программа, которая считывала темные пиксели построчно, сохраняла это все в многоканальный wav и объединяла в 1-канальный (моно), но она работала нестабильно. Идея, кстати, моя)

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

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

Я не знаю, можно ли считать этот код (алгоритм) "кошерным", но он работает. Исходные коды тут.

Я программист? Нет - я юрист )))

Комментарии

Популярные сообщения из этого блога

Математика Люшера

Поиграем на микрокалькуляторе

Погода по барометру