Как стать автором
Обновить
30
Карма
0
Рейтинг

Пользователь

  • Подписчики 41
  • Подписки 3

Context Model Pattern via Aero Framework

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

При достаточной своей простоте фреймворк позволяет решать очень широкий спектр задач, возникающих при разработке. Причём, красиво и лаконично.

Чтобы распознавать картинки, не нужно распознавать картинки

Спасибо за хорошую статью и ваш труд!

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


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

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

Хотя бинокулярный эффект и эффект перемещения играют некоторую роль, на мой взгляд, это не основные факторы, ведь по двумерной фотографии мозг запросто восстанавливает положения объектов в пространстве.

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

Более того, мозг способен строить объёмные модели вообще по чему угодно, только дайте побольше деталей для образа, воображение всё доделает. Взгляните на тесты Роршаха. Как можно научить компьютер что-то распознавать в них, если использовать только трёхмерное моделирование точками?

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

Буду рад услышать и другие рассуждения по этому поводу!

Мысли

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

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

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

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

Спасибо!

Мысли

Не знаю, замечали ли вы в жизни любопытную закономерность…

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

Но приходит день, когда начинаешь обращать внимание на некоторые параллели, аналогии. Дальше — глубже, глубже — больше, и находишь столько общего, что потом удивляешься, как этого раньше не замечал.

Это у чему я веду, ведь так и с разными людьми и мировоззрениями. Когда, действительно, углубляешься во что-то с головой, начинаешь видеть еденую основу во всём и понимать различия.

Мысли

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

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

Что касается примера, то обладая алфавитом и минимально необходимым словарным запасом доктора могут «договориться» и ввести новое понятие в язык.

Мысли

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

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

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

Чистый ассоциативный подход перспективен для моделирования мыслительных процессов.

Благодарю за ссылки.

Начал знакомиться со статьями maxstroy, действительно, тематика схожа…

Упаковка, компрессия и защита сборок

Существует несколько программ подобного рода, некоторые дополнительно могут выполнять сжатие и обфускацию. Но их главная проблема в том, что если приложение вдруг перестанет запускаться, после выполненных процедур, то выяснить причину будет очень сложно. Касательно Poet, изначально были попытки воспользоваться готовыми утилитами, но полностью работоспособного исполняемого файла получить так и не удалось. Только применив подход, описанный в статье, с помощью отладчика, выявились места из-за которых возникали проблемы. В основном это были неправильные ссылки на ресурсы, содержащиеся в разных сборках.

Упаковка, компрессия и защита сборок

Упаковка, компрессия и защита сборок

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

— и, конечно, применение на практике свободной библиотеки Foundation Framework, зарождение которой началось с этого редактора. Пока у неё нет мануала, но кое-что можно почерпнуть из старых статей (ссылка1 и ссылка2), хотя сейчас библиотека приобрела ещё более совершенный вид и стала мультиплатформенной (Win Desktop, Win Phone, Win Store, отчасти Xamarin).

Упаковка, компрессия и защита сборок

Спасибо! Исправил ссылку на Foundation Framework. Видимо, произошёл какой-то сбой с OneDrive, когда переименовывал файл.

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

Преобразование Фурье в действии: точное определение частоты сигнала и выделение нот

Есть опыт работы с обоими библиотеками. XNA-фреймворк установлен по умолчанию со студией, а NAudio нужно доплнительно загружать, хотя это не проблема. XNA родной и мультиплатформенный (Win Desktop, Win RT, Win Phone), а также проще в освоении и использовании, по крайней мере, что касается звука. NAudio не мультиплатформенный и более сложный, но охватывает круг аудиозадач более широкий нежели первый собрат.

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

Преобразование Фурье в действии: точное определение частоты сигнала и выделение нот

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

Преобразование Фурье в действии: точное определение частоты сигнала и выделение нот

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

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

Преобразование Фурье в действии: точное определение частоты сигнала и выделение нот

Оу, большое спасибо за ссылку! Проверил, алгоритм работает!
Бьюсь об заклад, что многие гитарные тюнеры, виденные мной, используют именно его.
Отклик быстрее, чем у преобразования Фурье с окном 2048 при сравнимой точности.
Но алгоритм распознаёт лишь один пик, поэтому применение его ограничено, однако если использовать в связке с преобразованием Фурье, то, вероятно, можно достичь весьма интересных результатов…

Чтобы пример по ссылке заработал с реальным сигналом с микрофона, добавьте в проект ссылку Microsoft.Xna.Framework, затем закомментируйте строчки
            m_timer = new DispatcherTimer();
            m_timer.Interval = TimeSpan.FromMilliseconds(m_timeInterval);
            m_timer.Tick += OnTimerTick;
            m_timer.Start();

и вместо них допишите
            var timer = new DispatcherTimer();
            timer.Tick += (sender, args) => FrameworkDispatcher.Update();
            timer.Start();

            var device = Microphone.Default;
            device.BufferDuration = TimeSpan.FromMilliseconds(100);
            var bufferSize = device.GetSampleSizeInBytes(device.BufferDuration) / 2;
            var sampleBytes = new byte[2 * bufferSize];

            device.BufferReady += (sender, args) =>
            {
                var sampleSizeInBytes = device.GetData(sampleBytes);
                var sampleSize = sampleSizeInBytes / 2;
                var sample = new double[sampleSize];
                for (var i = 0; i < sampleSize; i++)
                {
                    sample[i] = Convert.ToDouble(BitConverter.ToInt16(sampleBytes, 2 * i));
                }
                m_pitchTracker.ProcessBuffer(sample.Select(t=>(float)t).ToArray());

                UpdateDisplay();
            };

            FrameworkDispatcher.Update();
            device.Start();

Скомпилируйте.

А теперь настраивайте гитару!

Преобразование Фурье в действии: точное определение частоты сигнала и выделение нот

Посмотрел обучающие видеозаписи по Melodyne, и меня они очень впечатлили, вот что значит профессиональный инструмент обработки аудио. Думаю, он стоит своих денег. Предполагаю, что тут как раз таки активно используются фазовые методы коррекции аудиосигналов, как, например, по этой ссылке www.guitarpitchshifter.com/algorithm.html.

Преобразование Фурье в действии: точное определение частоты сигнала и выделение нот

Хороший вопрос.

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

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

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

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

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

Преобразование Фурье в действии: точное определение частоты сигнала и выделение нот

То есть, использовать информацию из нескольких окон подряд? Практически то же самое, что и использовать окно большего размера.

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

Преобразование Фурье в действии: точное определение частоты сигнала и выделение нот

Спасибо! Пока ещё детально не разобрался, но меня заинтересовал подход.

Преобразование Фурье в действии: точное определение частоты сигнала и выделение нот

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

Не знаю точно, получится ли дальнейшее развитие в этом направлении. Увидим…

Преобразование Фурье в действии: точное определение частоты сигнала и выделение нот

Попробуйте Akoff Music Composer.
Правда, он платный, но 10 секунд можно преобразовать бесплатно :)

Информация

В рейтинге
4,489-й
Зарегистрирован
Активность