Автор Тема: Анализ текста в окне  (Прочитано 69699 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Starfish

  • Зашел в гости
  • *
  • Сообщений: 3
    • Просмотр профиля
Re: Анализ текста в окне
« Ответ #30 : Апрель 15, 2015, 02:51:15 pm »
Спасибо за пример скрипта, мне помогло но частично. Я делаю шаблон цифр, сохраняю и в этом-'t окне он находит нужные мне числа. Но допустим когда обновляется строка порядок чисел меняется или количество чисел то пиксели в цифрах тоже меняются. Как я понял тут идет сравнение по пиксельно 1в1 100% и если сходство будет 99% то число не найдется?
Вот пример единиц, они разные (в середине отличается), соответственно он найдет только одну единицу если я сделаю шаблон по центральной.

Собственно это можно обойти? Или какую программу посоветуете?

Vint

  • Супермодератор
  • Герой форума
  • *
  • Сообщений: 3802
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • Просмотр профиля
Re: Анализ текста в окне
« Ответ #31 : Апрель 15, 2015, 04:43:04 pm »
COLORMODE+%
обговаривалось много раз уже.
В зависимости от фона, обычно режим 7 или 8 плюс рассчитанный процент.

Если есть возможность отключить сглаживание - это нужно сделать.
Все системные шрифты и большинство во Flash используют сглаживание выставленное в системе.
Если это отдельный клиент, то может быть в его настройках... а может и не быть.


Starfish

  • Зашел в гости
  • *
  • Сообщений: 3
    • Просмотр профиля
Re: Анализ текста в окне
« Ответ #32 : Апрель 16, 2015, 03:45:32 pm »
Спасибо большое за ответ!

1) Начал искать параметры COLORMODE+%
Нашел 2 поста с этим и то там используется  COLORMODE($colorm, $stcoord_X,$stcoord_Y,$encoord_X,$encoord_Y) параметр + координаты, а где %?


2) COLORMODE надо было вставлять после getscreen так?

GETSCREEN
   COLORMODE(8)
   FOR ($i=0, $i < 10)
      SCANPICTURE($n_temp, $f_x1,$f_y1,$f_x2,$f_y2, STRCONCAT($pref,$i,".bmp"))
      $a_size = ARRSIZE($n_temp)
      $num[$i] = $a_size / 2 // заносим количество элементов в этом разряде
      $num[$i+10] = 0 // счётчик разрядов, пока 0
      IF($a_size > 0)
         FOR($j=0, $j < $a_size, 2)
            $num[10*($j/2 + 2)+ $i] = $n_temp[$j] // заносим коорд X в массив
         END_CYC
         UNDEFINE($n_temp)
      END_IF
   END_CYC
3) Как отключить сглаживание шрифта в Flash player? Отключил в системе Win 7, в драйвере nvidia, в игре. Не помогло.

Vint

  • Супермодератор
  • Герой форума
  • *
  • Сообщений: 3802
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • Просмотр профиля
Re: Анализ текста в окне
« Ответ #33 : Апрель 16, 2015, 04:18:07 pm »
Спасибо большое за ответ!

1) Начал искать параметры COLORMODE+%
Нашел 2 поста с этим и то там используется  COLORMODE($colorm, $stcoord_X,$stcoord_Y,$encoord_X,$encoord_Y) параметр + координаты, а где %?
2) COLORMODE надо было вставлять после getscreen так?
3) Как отключить сглаживание шрифта в Flash player? Отключил в системе Win 7, в драйвере nvidia, в игре. Не помогло.

1) % в SCANPICTURE

2) лучше так  (+ в SCANPICTURE стоит совпадение 80%)
Код: Clickermann
  1.   GETSCREEN
  2.   COLORMODE(8, $f_x1,$f_y1,$f_x2,$f_y2)
  3.   FOR ($i=0, $i < 10)
  4.      SCANPICTURE($n_temp, $f_x1,$f_y1,$f_x2,$f_y2, STRCONCAT($pref,$i,".bmp"),-1,80)
  5.      $a_size = ARRSIZE($n_temp)
  6.      $num[$i] = $a_size / 2 // заносим количество элементов в этом разряде
  7.      $num[$i+10] = 0 // счётчик разрядов, пока 0
  8.      IF($a_size > 0)
  9.         FOR($j=0, $j < $a_size, 2)
  10.            $num[10*($j/2 + 2)+ $i] = $n_temp[$j] // заносим коорд X в массив
  11.         END_CYC
  12.         UNDEFINE($n_temp)
  13.      END_IF
  14.   END_CYC

3) А как отключал?
Персонализация -> Экран -> Настройка текста ClearType -> галка Включить ClearType
или
Свойства системы -> параметры быстродействия -> сглаживать неровности экранных шрифтов
Шрифт Segoe UI менял?

И перезагрузиться.

Но может и не помочь. Смотря как программист приложения сделал вывод текста.


Starfish

  • Зашел в гости
  • *
  • Сообщений: 3
    • Просмотр профиля
Re: Анализ текста в окне
« Ответ #34 : Апрель 18, 2015, 09:12:19 am »
3) А как отключал?
Свойства системы -> параметры быстродействия -> сглаживать неровности экранных шрифтов
Шрифт Segoe UI не менял

Перезагрузиться.

123

  • Освоившийся
  • **
  • Сообщений: 31
    • Просмотр профиля
Re: Анализ текста в окне
« Ответ #35 : Апрель 30, 2015, 06:32:32 pm »
Точно нужна встроенная распознавалка текста, хотя бы нормального, а не капча-извратного. Это избавило бы в некоторых случаях от горы дурной работы по созданию и тесту 100500 картинок на все возможные варианты - разные слова разными цветами, размерами и видами шрифтов. И не надо с нуля велосипед изобретать - наверняка тут никто не обломается, если его аккуратно готовый откуда-нибудь содрать. Или, на худой конец, создать онлайн-сервис спецом под работу в связке с кликерманом, или, хотя бы, указать на 1 или несколько самых удобных из существующих. Разумеется, бесплатных и безлимитных, чтобы без проблем справлялись с небольшими, но часто подкидываемыми скриншотами с малыми объёмами текста.

Vint

  • Супермодератор
  • Герой форума
  • *
  • Сообщений: 3802
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • Просмотр профиля
Re: Анализ текста в окне
« Ответ #36 : Апрель 30, 2015, 07:30:22 pm »
А они точно есть такие? Может вариант только тот же файнридер.
Я год назад задавался целью найти сетевую или консольную распознавалку. Бесплатной сетевой не нашел.
Нашел 2 или 3 консольные. Но там мало того что ставить прописывать не просто было. И они только на английский язык заточены. К одной есть модуль русского языка.. По дефолту эта хрень даже цифры путает набранные не рубленным шрифтом. Про буквы я вообще молчу. Правда это по дефолту. Ее можно там обучать настраивая на другие шрифты. Но процедура не тривиальна и я забил.
В общем хреновина сыровата, не зря всякие файнридеры уже больше десятка лет развиваются. В первых версиях видать тоже так распознавало.
« Последнее редактирование: Апрель 30, 2015, 07:33:30 pm от Vint »


Vint

  • Супермодератор
  • Герой форума
  • *
  • Сообщений: 3802
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • Просмотр профиля
Re: Анализ текста в окне
« Ответ #37 : Май 27, 2015, 09:31:08 am »
Проблема с поиском ясное дело. Выложи образцы и шоты на которых распознаётся. Желательно несколько и конечно не пожатое.


Vint

  • Супермодератор
  • Герой форума
  • *
  • Сообщений: 3802
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • Просмотр профиля
Re: Анализ текста в окне
« Ответ #38 : Май 28, 2015, 05:16:48 pm »
Неа. Вчера сразу попробовал, но так на авось. В ФШ не сравнивал для анализа.
Сегодня времени не было глянуть.


Vint

  • Супермодератор
  • Герой форума
  • *
  • Сообщений: 3802
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • Просмотр профиля
Re: Анализ текста в окне
« Ответ #39 : Май 28, 2015, 05:31:22 pm »
Какой баг?

Проблема в большом размере шрифта. Область сглаживания очень большая 1-4 пкс. И при рендеринге оригинал елозит во всех направлениях на уровне субпикселов.
В итоге одна четвёрка отличается от другой гораздо больше чем они обе от единицы  :o Ну и т.п.

Сейчас ещё попробую вместо 8 колормода седьмой, но боюсь это не даст результата.
Стоит подумать о другом методе. Например поделить на зоны цифр и считать в области сумму чистого цвета 10310011
Может там граница более чёткая.


Vint

  • Супермодератор
  • Герой форума
  • *
  • Сообщений: 3802
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • Просмотр профиля
Re: Анализ текста в окне
« Ответ #40 : Май 28, 2015, 10:08:04 pm »
Она ещё и меняется?  :o
А если собьешь назад точно вернуть можно?
Тогда до 10. Сэм-восэм  :)
Или 8-10.
Подожди пока я эти попробую.


Vint

  • Супермодератор
  • Герой форума
  • *
  • Сообщений: 3802
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • Просмотр профиля
Re: Анализ текста в окне
« Ответ #41 : Май 29, 2015, 08:41:56 am »
И при этом меняется размер шрифта?


Vint

  • Супермодератор
  • Герой форума
  • *
  • Сообщений: 3802
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • Просмотр профиля
Re: Анализ текста в окне
« Ответ #42 : Май 29, 2015, 01:18:03 pm »
Вот скрипт с картинками.
Распознавание переделано под COLORMODE использовал 7.
Подбор процента только на тех 3 примерах что есть. На них всё чётко определяет.
На примерах нет цифр 2 и 9, для них не выставлен процент!!!

Опасаюсь за цифру 3, она самая нестабильная, если на ней будет сбоить, нужно переделать образец из другого скрина и поправить процент.

Код: Clickermann
  1. #name "Распознавание чисел"
  2. // Author: Vint
  3. // Version: 1.5 (28.05.2015)
  4. // Скрипт для Clickermann v4.11 002
  5.  
  6. // подключение number_read
  7. // #include "Распознавание чисел 1.5.cms"
  8.  
  9.  
  10. //==============================================================================
  11. SUB(sort_arr)  // сортируем $data по возрастанию X
  12.   $data_size = ARRSIZE($data)
  13.   FOR($out=0, $out < $data_size, 2)
  14.      $min = $data[$out]
  15.      $ind = $out
  16.  
  17.      FOR($in=($out+2), $in < $data_size, 2)
  18.         IF($data[$in] < $min)
  19.            $min = $data[$in]
  20.            $ind = $in
  21.         END_IF
  22.      END_CYC
  23.      //LOGWRITE("минимум: ", $min, "  ", $ind, " - ", $out)
  24.      $X =  $data[$ind]
  25.      $Y =  $data[$ind+1]
  26.  
  27.      $data[$ind] = $data[$out]
  28.      $data[$ind+1] = $data[$out+1]
  29.      $data[$out] = $X
  30.      $data[$out+1] = $Y
  31.  
  32.      //LOGWRITE($X, " / ", $Y)
  33.      WAITMS(20)
  34.   END_CYC
  35. END_SUB
  36.  
  37. //==============================================================================
  38. SUB(number_read, $f_x1,$f_y1,$f_x2,$f_y2, $pref, $c_mode)
  39.   // $f_x1, $f_y1 область ЛевоВерх
  40.   // $f_x2, $f_y2 область ПравоНиз
  41.   // $pref = "textures\digit_" префикс имён файлов с цифрами (для разных шрифтов)
  42.   // $c_mode - режим COLORMODE
  43.  
  44.   // Результат возвращается в $res если не найдено $res=-1
  45.  
  46.  
  47.   $res = -1 // очищаем ответ
  48.   UNDEFINE($data) // главный массив данных
  49.   UNDEFINE($a_scan) // временный массив для SCANPICTURE
  50.   $SHIFT_X = 15 // смещение (кол-во игнор пикселов вокруг найденного)
  51.   $SHIFT_Y = 15
  52.  
  53.   GETSCREEN
  54.   IF($c_mode > 0)
  55.      COLORMODE($c_mode, $f_x1,$f_y1,$f_x2,$f_y2)
  56.   END_IF
  57.   FOR ($i=0, $i < 11)
  58.      SWITCH($i)
  59.      CASE(0)
  60.         $pr = 95
  61.      CASE(1)
  62.         $pr = 99
  63.         //      CASE(2)
  64.         //         $pr = 95
  65.      CASE(3)
  66.         $pr = 93
  67.      CASE(4)
  68.         $pr = 95
  69.      CASE(5)
  70.         $pr = 95
  71.      CASE(6)
  72.         $pr = 95
  73.      CASE(7)
  74.         $pr = 95
  75.      CASE(8)
  76.         $pr = 94
  77.         //      CASE(9)
  78.         //         $pr = 95
  79.      DEFAULT
  80.         $pr = 100
  81.      END_SWITCH
  82.  
  83.      SCANPICTURE($a_scan, $f_x1,$f_y1,$f_x2,$f_y2, STRCONCAT($pref,$i,".bmp"), 16744447, $pr)
  84.  
  85.      // заносим 'X,цифра' в $num с учётом мёртвых зон
  86.      $a_scansize = ARRSIZE($a_scan)
  87.      IF($log0 = 1)
  88.         LOGWRITE ("Ищем картинку ", $i, "  найдено ", $a_scansize/2)
  89.      END_IF
  90.  
  91.      FOR($j=0, $j < $a_scansize, 2)
  92.         $X = $a_scan[$j]
  93.         $Y = $a_scan[$j+1]
  94.  
  95.         // проверяем мёртвые зоны
  96.         $dead_zone = 0
  97.         $dead_size = ARRSIZE($dead)
  98.         FOR($m=0, $m < $dead_size, 2)
  99.            $X_old = $dead[$m]
  100.            $Y_old = $dead[$m+1]
  101.            IF($log0 = 1)
  102.               LOGWRITE ("$X/$X_old = ", $X, " / ", $X_old)
  103.               LOGWRITE ("$X/$Y = ", $X, " / ", $Y, "   ABS ", ABS($X - $X_old))
  104.            END_IF
  105.            IF((($Y - $Y_old) < $SHIFT_Y+1) & (ABS($X - $X_old) < $SHIFT_X+1))
  106.               $dead_zone = 1
  107.               $m = $dead_size + 10
  108.            END_IF
  109.         END_CYC
  110.  
  111.         IF($log0 = 1)
  112.            LOGWRITE ("$dead_zone = ", $dead_zone)
  113.            LOGWRITE ("$dead_size = ", $dead_size)
  114.         END_IF
  115.         IF($dead_zone = 0)
  116.            ARRPUSH($dead, $X)
  117.            ARRPUSH($dead, $Y)
  118.            ARRPUSH($data, $X)
  119.            ARRPUSH($data, $i)
  120.            IF($log0 = 1)
  121.               LOGWRITE ("добавляем ", $i, " $X/$Y = ", $X, " / ", $Y)
  122.            END_IF
  123.         END_IF
  124.      END_CYC
  125.      IF($log0 = 1)
  126.         LOGWRITE ("после добавления ", $i, " всего ", ARRSIZE($data)/2)
  127.         LOGWRITE (" ")
  128.      END_IF
  129.      UNDEFINE($dead)
  130.      UNDEFINE($a_scan)
  131.   END_CYC
  132.  
  133.   $data_size = ARRSIZE($data)
  134.   IF($data_size > 0)
  135.      sort_arr()
  136.      IF($log0 = 1)
  137.         LOGWRITE ("цифр после сортировки ", ARRSIZE($data)/2)
  138.      END_IF
  139.  
  140.      FOR($i=1, $i < $data_size, 2)
  141.         IF($res = -1)
  142.            $res = STRCONCAT("", $data[$i])   // если первыё символ
  143.         ELSE
  144.            IF($data[$i] < 10)
  145.               $res = STRCONCAT($res, $data[$i]) // последующие символы цифры
  146.            ELSE
  147.               $res = STRCONCAT($res, ".") // последующие символы  зпт
  148.            END_IF
  149.         END_IF
  150.      END_CYC
  151.      //$res = ROUND($res, -8)
  152.   ELSE
  153.      LOGWRITE ("число не найдено")
  154.   END_IF
  155. END_SUB
  156.  
  157. //==============================================================================
  158.  
  159.  
  160. LOGCLEAR
  161. $log = 1
  162. //$log0 = 1
  163. number_read(514,475,765,602, "textures\digit_", 7)
  164. LOGWRITE ("Найдено число:  ",$res)
  165. HINTPOPUP("Найдено число:  ",$res)
  166. HALT
« Последнее редактирование: Май 29, 2015, 01:19:35 pm от Vint »


And_Ro

  • Зашел в гости
  • *
  • Сообщений: 12
  • Не злой
    • Просмотр профиля
Re: Анализ текста в окне
« Ответ #43 : Май 29, 2015, 07:03:15 pm »
Извините, если не в тему  :( . Программка Portable ABBYY Screenshot Reader, весит всего 25м. Можно заставить кликер "таскать" руку для выделения зоны распознавания, результат (в зависимости от настроек) попадает в буфер обмена. Очень неплохо распознает текст, даже не горизонтальный (см. примеры в прицепе)! А вот если бы научиться передавать ей параметры зоны распознавания вместо графического выделения!!! Может кто "подломит"?  ;)
RTFM !!!

Vint

  • Супермодератор
  • Герой форума
  • *
  • Сообщений: 3802
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • Просмотр профиля
Re: Анализ текста в окне
« Ответ #44 : Май 30, 2015, 10:12:22 am »
почти получилось :)
Я же говорю, у меня нет в примерах цифр 9 и 2. Не внес их в CASE