На нашем сайте мы используем cookie для сбора информации технического характера и обрабатываем IP-адрес вашего местоположения. Продолжая использовать этот сайт, вы даете согласие на использование файлов cookies. Здесь вы можете узнать, как мы пользуемся файлами cookies.
Я согласен
дракоша
Создание помощника в преферанс. Этап первый: план разработки

Список статей цикла:
  1. Этап первый: план разработки
  2. Этап второй: распознавание достоинства
  3. Этап третий: распознавание масти

Недавно закончил очень интересный проект, с подобным ему до сих пор я еще не сталкивался. Задача состояла в том, чтобы сделать помощник игры в карты (конкретно - в преферанс), который бы мог запоминать вышедшие карты. Причем делать это не так, как в моей программе "Карточный помощник" - отправлять их в бой после клика, а самостоятельно. То есть приложение должно было в режиме онлайн распознавать достоинство и масть, а затем выводить их на экран. И не просто выводить, а обрабатывать. На основе решения этой задачи я, пожалуй, напишу несколько материалов. Этот первый, вводный.

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

Однако, в нашем случае сложность уменьшается: нам требуется заставить работать приложение только на одном компьютере, с одним разрешением экрана и одним и тем же расположением карт. Поэтому мы можем однозначно выделить после создания скриншота экрана участки, которые надо будет обработать. Как уже говорилось, распознавание символов - это распространенная задача, и решения её уже есть. Я остановил взгляд на tessnet2 - не самом новом, но одном из самых простых и эффективных распознавателей на сегодня, с которыми можно работать и на языке C#. Забегая вперед скажу, что выбор был удачным - число распознаваний удалось довести до 100% (!) - если кто не в курсе, это результат практически недосягаемый в обычных условиях. Правда, у нас условия были не совсем обычными - мы могли немного менять колоду, это существенно облегчило работу. Активно помогал в работе и сам заказчик.

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

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





статьи IT, распознавание, карты, преферанс






Вывод списка файлов и каталогов на C++ средствами WinApi
Программа "Background copy": Фоновое копирование файлов


©upread.ru 2013-2017
При перепечатке активная ссылка на сайт обязательна.
Рейтинг@Mail.ru
Задать вопрос
Здравствуйте! Вы можете задать мне любой вопрос или оставить комментарий. Оставьте сообщение, и я отвечу на него в ближайшее время. Если не получается отправить сообщение через эту форму, то пишите на почу up777up@yandex.ru