Список форумов ZCon ZCon
Соревнования по программированию
 
 FAQFAQ   ПоискПоиск   ПользователиПользователи   ГруппыГруппы   РегистрацияРегистрация 
 ПрофильПрофиль   Войти и проверить личные сообщенияВойти и проверить личные сообщения   ВходВход 

Ваши решения для задачи "Глаз Робота"

 
Начать новую тему   Ответить на тему    Список форумов ZCon -> ZCon 2008
Предыдущая тема :: Следующая тема  
Автор Сообщение
Turbo
Site Admin


Зарегистрирован: 19.02.2006
Сообщения: 248

СообщениеДобавлено: Ср Апр 16, 2008 8:52 am    Заголовок сообщения: Ваши решения для задачи "Глаз Робота" Ответить с цитатой

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



Зарегистрирован: 25.03.2008
Сообщения: 19

СообщениеДобавлено: Ср Апр 16, 2008 12:18 pm    Заголовок сообщения: Ответить с цитатой

Уборка мусора: раскрашиваем группы смежных точек в разные цвета.
Если группа маленькая - она считается мусором и закрашивается в цвет фона, если большая - в color++; Это для того чтобы не не слиплось еще что-то при повороте обратно.
Поворот: проводим много (128 вроде) пар параллельных линий, одну касаясь верхов букв, вторую через геом.центр (из-за хвостиков Q). Выбираем пару с минимальным расстоянием между линиями. Не самый быстрый алгоритм, но переделывать было лень.
Афинное преобразование. Поворот и одновременно масштабирование так, чтобы то расстояние между параллельными линиями стало 16 (а высота букв 32).
Получается уже повёрнутая картинка из букв разных цветов.
Могут быть слипшиеся буквы, одного цвета - были слипшиеся изначально. И могут быть слипшиеся разного цвета - это уже я слепил нечаянно при повороте.
Проходим по всем цветам, находя границы картинок одного цвета (это отдельные буквы или группы слипшихся букв) уменьшая и делая их grayscale (массив double) из монохромных, маленькие серые буквы скармливаются нейронной сетке 36x20x26. Если она ничего не нашла - пытаемся разделить разными вариантами и скармливать ей части объекта. Тут обычно что-то находит, даже много ложных срабатываний. Устраиваем голосование результатов (двухбуквенных).
Это первый сабмит был, на ~1500
1600+ - это попытки разпознать три слипшиеся буквы. Четыре и больше не делал.

PS. у online-генератора нашёл недокументированный ключ text= - он сильно помог при обучении сетки. иначе бы пришлось распознавать буквы вручную или писать свой генератор.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Werewolf



Зарегистрирован: 16.03.2007
Сообщения: 28

СообщениеДобавлено: Ср Апр 16, 2008 6:23 pm    Заголовок сообщения: Ответить с цитатой

Долго пытался придумать что-то умное )
Первый вариант был с инвариантными моментами.
Затем пробовал находить контуры объектов, выполнять над ними ДПФ, затем путем нормирования делал коэффициенты Фурье инвариантными к аффинным преобразованиям и скармливал их нейросетке. Этот вариант был еще более убогим, чем первый )
В итоге за полчаса сделал распознавалку "на коленке" путем сравнения образов с эталонами, и она показала довольно неплохие результаты )

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

Кстати метод сравнения с эталонами позволяет очень просто разлеплять буквы, так как он всегда будет определять первую букву надписи. После определения первой буквы, ее можно обрезать и сравнивать дальше. Жаль, что я это поздно понял )
_________________
Þá skelfur askr Yggdrasils, ok engi hlutr er þá óttalaus á himni eða jörðu.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Michael



Зарегистрирован: 16.04.2008
Сообщения: 5

СообщениеДобавлено: Ср Апр 16, 2008 8:48 pm    Заголовок сообщения: Ответить с цитатой

Цитата:
очень просто разлеплять буквы, так как он всегда будет определять первую букву надписи.


Хм... А как быть, например, с буквой I - она хорошо
коррелирует с любой вертикальной палкой.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Werewolf



Зарегистрирован: 16.03.2007
Сообщения: 28

СообщениеДобавлено: Ср Апр 16, 2008 9:33 pm    Заголовок сообщения: Ответить с цитатой

Ну вот допустим возьмем букву K. Сначала вычтем из нее эталон I - останутся пиксели, соответствующие диагональным палкам. Затем вычтем эталон K - не останется ничего, значит рейтинг для эталона K будет выше, чем для I. Поэтому в итоге побеждает тот эталон, который уберет больше пикселей )
К тому же I коррелирует с палкой только в arial, а в нем обычно буквы не слепляются )
_________________
Þá skelfur askr Yggdrasils, ok engi hlutr er þá óttalaus á himni eða jörðu.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
petrovich



Зарегистрирован: 16.04.2008
Сообщения: 6
Откуда: Минск

СообщениеДобавлено: Ср Апр 16, 2008 11:23 pm    Заголовок сообщения: Ответить с цитатой

На буквы Q забил (только для arial проходило). Строку локализовывал по углам (находя крайние точки вдоль осей и диагоналей, всего 8 точек. Потом выбирал из них 2, которые, няходясь на стороне прямоугольника, включающего остальные точки, давали прямоугольник минимальной площади). Подход не проходил для строк без четких углов, например, с O по краям. Затем перебирал все комбинации букв для трех шрифтов и двух возможных ориентаций надписи, отбрасывая комбинацию при определенном уровне ошибки. Используемый порог определял качество распознавания и время работы программы, так что меня ограничило прежде всего время.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
zhengxi



Зарегистрирован: 25.03.2008
Сообщения: 19

СообщениеДобавлено: Чт Апр 17, 2008 1:25 am    Заголовок сообщения: Ответить с цитатой

Werewolf писал(а):


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


А как сравнивать с эталонами ? По числу единичных бит после xor ?
Я пробовал так - с трудом различаются C,G,O,Q или R и B - отличий на толщине линий много, надо много образцов.

Инварианты, да, хорошо различают эти буквы, но путают другие пары (H и X).

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



Зарегистрирован: 16.03.2007
Сообщения: 28

СообщениеДобавлено: Чт Апр 17, 2008 1:42 am    Заголовок сообщения: Ответить с цитатой

zhengxi писал(а):
А как сравнивать с эталонами ? По числу единичных бит после xor ?

Да, именно так.
Ошибки неизбежны, это да, но хоть что-то угадывает правильно )
_________________
Þá skelfur askr Yggdrasils, ok engi hlutr er þá óttalaus á himni eða jörðu.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Turbo
Site Admin


Зарегистрирован: 19.02.2006
Сообщения: 248

СообщениеДобавлено: Чт Апр 17, 2008 11:14 am    Заголовок сообщения: Ответить с цитатой

Вот небольшая стата по лучшим решениям:

Column 1 - total number of tests
Column 2 - number of tests with correctly found length
Column 3 - correctly solved tests

1) zhengxi - 1636 баллов

Length 3: 137 136 134
Length 4: 96 93 91
Length 5: 99 97 96
Length 6: 74 65 65

2) Levin Aleksey - 1424 балла

Length 3: 137 134 119
Length 4: 96 90 83
Length 5: 99 98 81
Length 6: 74 73 55

3) Andrei Galatyn - 1272 балла

Length 3: 137 126 112
Length 4: 96 88 72
Length 5: 99 89 72
Length 6: 74 59 48

4) petrovich - 1035 баллов

Length 3: 137 131 93
Length 4: 96 71 52
Length 5: 99 78 58
Length 6: 74 61 43

5) Werewolf - 836 баллов

Length 3: 137 108 82
Length 4: 96 55 49
Length 5: 99 68 50
Length 6: 74 35 24
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
Показать сообщения:   
Начать новую тему   Ответить на тему    Список форумов ZCon -> ZCon 2008 Часовой пояс: GMT + 3
Страница 1 из 1

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


Powered by phpBB © 2001, 2005 phpBB Group