Создание помощника в преферанс. Этап первый: план разработки
Список статей цикла:
- Этап первый: план разработки
- Этап второй: распознавание достоинства
- Этап третий: распознавание масти
Недавно закончил очень интересный проект, с подобным ему до сих пор я еще не сталкивался. Задача состояла в том, чтобы сделать помощник игры в карты (конкретно - в преферанс), который бы мог запоминать вышедшие карты. Причем делать это не так, как в моей программе "Карточный помощник" - отправлять их в бой после клика, а самостоятельно. То есть приложение должно было в режиме онлайн распознавать достоинство и масть, а затем выводить их на экран. И не просто выводить, а обрабатывать. На основе решения этой задачи я, пожалуй, напишу несколько материалов. Этот первый, вводный.
Итак, попробуем разбить задачу, стоящую перед нами, на составляющие. Можно выделить три основных этапа: определение карты, обработка её и вывод на экран. Вторая и третья части не представляют большой сложности: по сути дела это стандартные задачи, которые любой программист решает чуть ли не ежедневно. А вот определение карты (распознавание изображения) - это хотя и распространенная проблема, решение её не так уж и просто. По сути дела универсального решения и не существует.
Однако, в нашем случае сложность уменьшается: нам требуется заставить работать приложение только на одном компьютере, с одним разрешением экрана и одним и тем же расположением карт. Поэтому мы можем однозначно выделить после создания скриншота экрана участки, которые надо будет обработать. Как уже говорилось, распознавание символов - это распространенная задача, и решения её уже есть. Я остановил взгляд на tessnet2 - не самом новом, но одном из самых простых и эффективных распознавателей на сегодня, с которыми можно работать и на языке C#. Забегая вперед скажу, что выбор был удачным - число распознаваний удалось довести до 100% (!) - если кто не в курсе, это результат практически недосягаемый в обычных условиях. Правда, у нас условия были не совсем обычными - мы могли немного менять колоду, это существенно облегчило работу. Активно помогал в работе и сам заказчик.
В распознавании масти я сначала пошел долгим путем: начал создавать правила, с помощью которых можно было определить геометрическую фигуру. Брал цвет точек в разных местах, создавал алгоритмы. Но вскоре пришло в голову решение проще: самому немного изменить цвет. Пики стали немного светлее, а черви - немного ярче. Здесь нам опять же очень упростила задачу возможность работать с колодой.
Таким образом, после разбиения задачи на три подзадачи, все оказалось не так уж и сложно. В следующих статьях я выложу отдельные ключевые фрагменты кода по распознаванию и других частей программы.
Автор этого материала - я - Пахолков Юрий. Я оказываю услуги по написанию программ на языках Java, C++, C# (а также консультирую по ним) и созданию сайтов. Работаю с сайтами на CMS OpenCart, WordPress, ModX и самописными. Кроме этого, работаю напрямую с JavaScript, PHP, CSS, HTML - то есть могу доработать ваш сайт или помочь с веб-программированием. Пишите сюда.
Отправляя сообщение я подтверждаю, что ознакомлен и согласен с политикой конфиденциальности данного сайта.