roboforum.ru

Технический форум по робототехнике.

Робот - картежник

Робот - картежник

Scorpio » 10 апр 2010, 01:54

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

Re: Робот - картежник

=DeaD= » 10 апр 2010, 08:07

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

Re: Робот - картежник

Levsha128 » 10 апр 2010, 14:11

Тут, в принципе, ничего хитрого нет.

Сначала нужно определить(найти) карту, для этого желательно играть на однородном фоне.
*Потом нужно трансформировать участок изображения с картой.
А потом пройтись ИНС. Профит.

*Обратный вариант: хранить образец высоком разрешении и трансформировать уже его, только нейросеть уже не прокатит.

Re: Робот - картежник

Angel71 » 10 апр 2010, 14:59

Scorpio, активикс вам еще зачем, исходники и библиотеки в виде dll`ок вам чем не угодили?

Re: Робот - картежник

citizen » 10 апр 2010, 22:49

А RoboRealm не подходит?

Re: Робот - картежник

Scorpio » 13 апр 2010, 02:06

Извиняюсь, был в отъезде...
=DeaD= писал(а):Надо образцы кадров на которых что-то распознавать потом, без этого разговор о сферическом коне.

Для облегчения задачи, решил, что буду распознавать карты не на столе, а уже во время раздачи. Сделаю эдакий контейнер для колоды, который будет выплевывать по одной нижней карте из колоды игроку или роботу. Несведущему игроку, будет и невдомек, что на дне черного ящика спрятано подглядывающее устройство. Преимущество очевидно – карта всегда в одном и том-же положении, масштабе и можно использовать подсветку. Т.е. робот получая карту, уже будет знать ее достоинство. А за игроком можно и не подглядывать.
Levsha128 писал(а):Тут, в принципе, ничего хитрого нет...

При слове нейросети меня бросает в дрожь. Никогда ими не занимался.
Angel71 писал(а):Scorpio, активикс вам еще зачем, исходники и библиотеки в виде dll`ок вам чем не угодили?

Вы будете смеяться, но на ПК я по старой привычке пишу на VB6. DLL-ки можно, но не все. VB6, например, не поддерживает вызов обратных функций. Но DLL-к я тоже по конкретной теме (сравнение 2-х изображений) пока не нашел.
citizen писал(а):А RoboRealm не подходит?

Реалм распознаванием символов не занимается, сравнением картинок вроде как тоже. Хотя он умеет массу полезных для робостроителя вещей.

Re: Робот - картежник

Angel71 » 13 апр 2010, 02:32

:) нет желания устраивать диспут, но беглый поиск по "VB6 callback" говорит немного о другом. вникать ошибаюсь или нет желания тоже нет. в любом случае, искать нужный activex затея сомнительная.

Re: Робот - картежник

citizen » 13 апр 2010, 17:43

В roborealm есть такая вещь:
http://www.roborealm.com/help/Fiducial.php
картинки вроде распознает(там внизу пример есть).

Re: Робот - картежник

Scorpio » 15 апр 2010, 01:16

На практике оказалось все не так просто. Несмотря на то, что карты в контейнере будут располагаться одинаково, малейшее смещение изображения существенно усложняет анализ. Нашел таки библиотеки, сделанные для этих целей профессионалами на http://www.elphotox.com. Но, даже они не могут отличить 6-ку от 8-ки той-же масти (если фоткать только уголок карты), либо путаются при смещении той-же карты. К тому-же они сильно платные и все время выскакивает мерзкое окошко, призывающее к регистрации. Видимо всеже прийдется крапить карты цветным кодом.

Re: Робот - картежник

EdGull » 15 апр 2010, 07:04

а вот такое видел?
http://aimatrix.nm.ru/aichip2/AITest02.htm

Re: Робот - картежник

Alt333 » 15 апр 2010, 08:23

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

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

Вот пример видео как это работает:

http://www.youtube.com/watch?v=gQ_IR071mhM

Re: Робот - картежник

tsrodger » 15 апр 2010, 15:29

Вы вроде на VB пишите - почему бы не попробовать EmguCV (порт OpenCV под .Net)

Re: Робот - картежник

Angel71 » 15 апр 2010, 15:43

покажите реальную картинку того, что нужно распознавать

Re: Робот - картежник

Scorpio » 16 апр 2010, 18:43

Angel71 писал(а):покажите реальную картинку того, что нужно распознавать

Вот к примеру определить, что карты по горизонтали одинаковые,а по вертикали разные.
proba.jpg
картинки полученные с камеры
proba1.jpg
преобразованные в ч/б
proba2.jpg
с укрупнением пикселей

Смещение в контейнере м.б. и больше.
Пока что думаю сравнивать так:
1.Распознавать отдельно область масти и область значения карты, красные и черные сразу разделить.
2. Распознаваемую область вписать в прямоугольник эталонного размера,
3. Сравнить с эталоном по трем параметрам: количество черных пикселей, количество ЧП на своих местах, количество ЧП не на своих местах.
Посмотрю, что из этого получится.
Спасибо всем за советы. В выходные изучу их повнимательнее.

Re: Робот - картежник

Angel71 » 16 апр 2010, 21:25

:angel: уууух, да тут всё просто идеально. :oops: нейронка легко с такой задачей справиться. единственно "укрупнение пикселей" немного не понравилось.


Rambler\'s Top100 Mail.ru counter