Как стать автором
Обновить

Комментарии 23

Хороший дебют :)Поздравляю:)
Спасибо
Интересная идея. Спасибо.
Один вопрос, «Символы никак не искажаются» — это значит, что и размер у них тоже фиксированный, правильно?
Да, правильно. Это можно использовать только для заранее известного шрифта.
var playerStacks = new OCRReader(OCRFont.Load(«MyFont.pft»)), Color.Black, useForeColor: false);
var stackString = playerStacks.Recognize(imageToRecognition);

И как оно, одних только стеков достаточно!? А никнеймы кто будет распознавать? ;) И что делать если столы будут скейлиться!? Или прога для идельаного стола в ваккууме?
Никнеймы распозновать можно из файла лога с задержкой в 2 руки. Для скейленных столов изменяю размер окна под нужный мне. Прога отлично работает :)
Ясно. А под какой клиент точили, если не секрет? Могу подсказать немножко по извлечению информации о дествиях игроков из iPoker, почти в риалтайме. Детектить тексты вашим способом можно, но я, в свое время, от контрольных точек отказался в пользу такого: загнать картинку в 1bit битмап, нарезать на буквы и сравнивать массивы байтов букв и шаблонов через unsafe (по сути сравнивать битовые маски).
Под FTP. Я тоже склоняюсь к использованию unsafe, но пока меня и мой способ устраивает. На i3 + 4гб памяти удается распознавать все 20 раз в секунду. Пока что это более чем достаточно для моих целей. Возможно позже полностью или частично перейду на unsafe.
Гы, FTP :)

есть серьезное подозрение, что из FTP все можно выкоцать если инъектнуть в него какой-нибудь QSpy, однако мой уровень влдения Qt (нулевой) не позволяет мне проверить это предположение. А мысли эти возникают в результате наблюдения за клиентов FTP запущеным под VMWare в Unity Mode.

Еще можно посмотреть как работают всякие Omaha Indiator'ы, они явно не скнированием стола определяют что в руках и на столе.

Если у вас есть опыт работы с Qt я бы посоветовал все-же попытаться залезть в процесс и забирать данные сразу из контролов (виджетов?).

З.Ы.: а как Вы определяете места на которых игроки сидят? анализом картики или по конфигу стола?
Опыт внедрения в другой процесс у меня никакой. Мне проще все считывать со стола.

Места определяются — есть 9 пикселей заранее заданных. По одному на каждого игрока. Пиксели находятся там, где должна быть фишка диллера. Если пиксель зеленый (стол), значит игрок не диллер, иначе диллер.

Вы тоже увлекаетесь такими штуками? :)
Было дело. Сейчас времени не хватает, проще самому за стол сесть. А так есть у меня в загашнике несколько инструментов… Я, правда, в сторону автоматизации/помощи принятия решений копал, и в основном под iPoker. К сожалению все мои наработки либо не для распространения, либо написаны так что показывать стыдно :")
Ваша тема в купе с последними обновлениями QSpy сумели разбудть во мне спавший уже больше года интерес к извлечению информации со столов FTP. Разгребусь со рочняками и обязательно вернусь к этому вопросу, т.к. когда он был актуален QSpy был еще в околозародышевом состоянии и тогда мне помочь не мог. Судя по активности на гитхабе проект сильно шагнул вперед, имеет смысл попробовать еще раз :)
Вообще много полезной информации можно извлечь из Layout.xml соотвествующего варианта стола. Там и координаты, и шрифты которыми выводится текст можно найти.

И еще может быть полезно изучить нутро Poker Shortcuts. Там по идее можно подсмотреть как они определяют координаты контролов, а это, в свю очередь, позволит лучше разобраться в стуртуре кнфигов клиента.
Попробую. Спасибо за информацию
По поводу .net обертки для Tesseract v3, проверяли ли Вы этот проект на работоспособность: code.google.com/p/tesseractdotnet/? Я не использовал его всерьез, но простенький тестовый проект ~неделю назад на нем собрался, запустился и успешно отработал.
Проверял. Сам очень большие надежды на него возлагал, но никак не смог запустить. Первый issue в этом проекте мой. Так и не разобрался в чем дело к сожалению.
Хм, если не ошибаюсь, у меня были подобные проблемы, однако решились они пересборкой обертки.
Было бы здорово, если бы Вы добавили информацию об этой обертке в статью с соответствующими комментариями.
Мои проблемы не решились пересборкой. Пробовал на разных машинах, разных ОС. больше недели бился и потом решил делать по своему.
Кстати, если не затруднит — опубликуйте исходный код на github (или ином общедоступном репозитории).
Пожалуйста
Насчет Bitmap.Clone(). Если производительность совсем критична, то можно использовать метод Bitmap.LockBits(), у него тоже есть аргумент Rectangle rect. Разница между Clone() в том, что копируется не в Bitmap, а сразу в массив byte[] через Mashal.Copy().

Вот здесь пример кода: msdn.microsoft.com/en-us/library/5ey6h79d.aspx Ничего сложного
Спасибо. Обязательно попробую.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Изменить настройки темы

Истории