Интересовался когда-то Аски артом.
Решил попробовать поиграть с конвертацией контуров изображения в цифры.
Вот, что получилось: класс.
Умеет только формат png. И только чёрно-белые изображения.
И желательно не очень большие.
Умеет транспонировать.
Можно посмотреть здесь.
http://comb[dot]org[dot]ru/t.php
Открыл для себя, как мне кажется, мощный инструмент - imagecolorat, фактически позволяет создавать фильтры.
update:
Класс для сети Хопфилда - это к сообщениям ниже.
1. dcc0 - 18 Февраля, 2021 - 01:27:39 - перейти к сообщению
2. dcc0 - 18 Февраля, 2021 - 16:14:21 - перейти к сообщению
Дополнение:
Мне удалось использовать изображения в виде цифровых контуров для работы с сетью
Хопфилда.
Сеть удачно сопоставила и распознала, нарисованные от руки две похожие буквы.
Получилось так:
1) Получил цифровые образы двух букв п, нарисованных от руки в Pinta (это аналог Gimp).
2) Одну букву сохранил в качестве одного из четырёх образцов для сети Хопфилда.
(матрица формируется из 4-х образцов, 1 - образ буквы, 3 - имеют случайный набор)
3) Вторую отправил на вход. И чудо случилось.
Сеть сопоставила два разных изображения одной буквы и признала их идентичными. Ура!
Можно протестировать (правда, - этой целый квест):
Тут
Можно задать свои изображения:
Для преобразования png в контур: нужно задать изображения в формате png (24х18). Буквы должны иметь строго чёрный цвет (индекс 0).
Для сети формат должен быть: 1,-1 (биполярная кодировка). Формирование матрицы
осуществляется на лету.
Исходник
Мне удалось использовать изображения в виде цифровых контуров для работы с сетью
Хопфилда.
Сеть удачно сопоставила и распознала, нарисованные от руки две похожие буквы.
Получилось так:
1) Получил цифровые образы двух букв п, нарисованных от руки в Pinta (это аналог Gimp).
2) Одну букву сохранил в качестве одного из четырёх образцов для сети Хопфилда.
(матрица формируется из 4-х образцов, 1 - образ буквы, 3 - имеют случайный набор)
3) Вторую отправил на вход. И чудо случилось.
Сеть сопоставила два разных изображения одной буквы и признала их идентичными. Ура!
Можно протестировать (правда, - этой целый квест):
Тут
Можно задать свои изображения:
Для преобразования png в контур: нужно задать изображения в формате png (24х18). Буквы должны иметь строго чёрный цвет (индекс 0).
Для сети формат должен быть: 1,-1 (биполярная кодировка). Формирование матрицы
осуществляется на лету.
Исходник
3. Vladimir Kheifets - 18 Февраля, 2021 - 17:40:58 - перейти к сообщению
dcc0 пишет:
Мне удалось использовать изображения в виде цифровых контуров для работы с сетью Хопфилда
Добрый день!
Спасибо за информацию.
Интересно, будет ли распозновать на картике искажённые символы или строки из нескольких символов?
4. dcc0 - 18 Февраля, 2021 - 18:05:33 - перейти к сообщению
Vladimir Kheifets пишет:
ать на картике искажённые символы или строки из нескольких символов?
Доброго!
Именно вот этот вариант не распознает строку (повторю - это черновой, фактически прототип).
Искажённый символ может распознать.
В принципе в моём примере п - это и есть искажённый символ. Оба символа "п" нарисованы от руки, поэтому отличаются друг от друга. Это и можно считать искажением.
Т.е. в моём примере так и получилось, одну букву "п" сеть помнит, другую я задаю для сопоставления. И сеть отвечает, что буквы идентичны, хотя их контуры чуть-чуть отличаются по понятным причинам.
Как я понял из урока о нейронной сети Хопфилда, она как раз предназначена для распознавания подпочернных образцов.
Если задавать в качестве образцов целые слова, то можно распознавать и наборы символов.
5. Vladimir Kheifets - 18 Февраля, 2021 - 19:27:30 - перейти к сообщению
dcc0 пишет:
В принципе в моём примере п - это и есть искажённый символ. Оба символа "п" нарисованы от руки, поэтому отличаются друг от друга. Это и можно считать искажением.
Т.е. в моём примере так и получилось, одну букву "п" сеть помнит, другую я задаю для сопоставления. И сеть отвечает, что буквы идентичны, хотя их контуры чуть-чуть отличаются по понятным причинам.
Как я понял из урока о нейронной сети Хопфилда, она как раз предназначена для распознавания подпочернных образцов.
Если задавать в качестве образцов целые слова, то можно распознавать и наборы символов.
Т.е. в моём примере так и получилось, одну букву "п" сеть помнит, другую я задаю для сопоставления. И сеть отвечает, что буквы идентичны, хотя их контуры чуть-чуть отличаются по понятным причинам.
Как я понял из урока о нейронной сети Хопфилда, она как раз предназначена для распознавания подпочернных образцов.
Если задавать в качестве образцов целые слова, то можно распознавать и наборы символов.
Интересно, а если задать в качестве образцов, например, все символы латинского алфавита. Удасться распознать captcha?
6. dcc0 - 18 Февраля, 2021 - 20:59:28 - перейти к сообщению
Vladimir Kheifets, если написать сеть именно под этот класс символов, то, вероятно, будет работать (но надо проверять).
Может быть, для такой задачи лучше не переводить в контур изображения, а переводить
в бинарный вид в чистом виде. Но даже для изображений среднего размера - это очень большая матрица.
Однако странностей пока много с самой сетью.
Непонятно, какая у сети ёмкость. И ошибки распознавания, конечно, есть.
Тестирую. Смотрю, что происходит.
Пока вопросов больше, чем ответов.
(Добавление)
Из интересного: буква "п", набранную вручную по контуру в блокноте, распознана
как "п" рукописное:
"п" набранная
Может быть, для такой задачи лучше не переводить в контур изображения, а переводить
в бинарный вид в чистом виде. Но даже для изображений среднего размера - это очень большая матрица.
Однако странностей пока много с самой сетью.
Непонятно, какая у сети ёмкость. И ошибки распознавания, конечно, есть.
Тестирую. Смотрю, что происходит.
Пока вопросов больше, чем ответов.
(Добавление)
Из интересного: буква "п", набранную вручную по контуру в блокноте, распознана
как "п" рукописное:
"п" набранная
Спойлер (Отобразить)
"п" нарисованная
Спойлер (Отобразить)
Интересно, что контуры букв имеют разные смещения относительно левого и правого края.
Update:
Обернул в класс
P.S. Наконец-то я оценил силу ООП (когда можно сократить код при последующем обращении к методу)