Author Topic: Анализ текста в окне  (Read 136109 times)

0 Members and 10 Guests are viewing this topic.

Starfish

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

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

Vint

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

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


Starfish

  • Зашел в гости
  • *
  • Posts: 3
    • View Profile
Re: Анализ текста в окне
« Reply #32 on: April 16, 2015, 03:45:32 PM »
Спасибо большое за ответ!

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


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

Code: [Select]
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

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: Анализ текста в окне
« Reply #33 on: April 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%)
Code: (clickermann) [Select]
   GETSCREEN
   COLORMODE(8, $f_x1,$f_y1,$f_x2,$f_y2)
   FOR ($i=0, $i < 10)
      SCANPICTURE($n_temp, $f_x1,$f_y1,$f_x2,$f_y2, STRCONCAT($pref,$i,".bmp"),-1,80)
      $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) А как отключал?
Персонализация -> Экран -> Настройка текста ClearType -> галка Включить ClearType
или
Свойства системы -> параметры быстродействия -> сглаживать неровности экранных шрифтов
Шрифт Segoe UI менял?

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

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


Starfish

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

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

123

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

Vint

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


Vint

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


Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: Анализ текста в окне
« Reply #38 on: May 28, 2015, 05:16:48 PM »
Неа. Вчера сразу попробовал, но так на авось. В ФШ не сравнивал для анализа.
Сегодня времени не было глянуть.


Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: Анализ текста в окне
« Reply #39 on: May 28, 2015, 05:31:22 PM »
Какой баг?

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

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


Vint

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


Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: Анализ текста в окне
« Reply #41 on: May 29, 2015, 08:41:56 AM »
И при этом меняется размер шрифта?


Vint

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

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

Code: (clickermann) [Select]
#name "Распознавание чисел"
// Author: Vint
// Version: 1.5 (28.05.2015)
// Скрипт для Clickermann v4.11 002

// подключение number_read
// #include "Распознавание чисел 1.5.cms"


//==============================================================================
SUB(sort_arr)  // сортируем $data по возрастанию X
   $data_size = ARRSIZE($data)
   FOR($out=0, $out < $data_size, 2)
      $min = $data[$out]
      $ind = $out
     
      FOR($in=($out+2), $in < $data_size, 2)
         IF($data[$in] < $min)
            $min = $data[$in]
            $ind = $in
         END_IF
      END_CYC
      //LOGWRITE("минимум: ", $min, "  ", $ind, " - ", $out)
      $X =  $data[$ind]
      $Y =  $data[$ind+1]
     
      $data[$ind] = $data[$out]
      $data[$ind+1] = $data[$out+1]
      $data[$out] = $X
      $data[$out+1] = $Y
     
      //LOGWRITE($X, " / ", $Y)
      WAITMS(20)
   END_CYC
END_SUB

//==============================================================================
SUB(number_read, $f_x1,$f_y1,$f_x2,$f_y2, $pref, $c_mode)
   // $f_x1, $f_y1 область ЛевоВерх
   // $f_x2, $f_y2 область ПравоНиз
   // $pref = "textures\digit_" префикс имён файлов с цифрами (для разных шрифтов)
   // $c_mode - режим COLORMODE
   
   // Результат возвращается в $res если не найдено $res=-1
   
   
   $res = -1 // очищаем ответ
   UNDEFINE($data) // главный массив данных
   UNDEFINE($a_scan) // временный массив для SCANPICTURE
   $SHIFT_X = 15 // смещение (кол-во игнор пикселов вокруг найденного)
   $SHIFT_Y = 15
   
   GETSCREEN
   IF($c_mode > 0)
      COLORMODE($c_mode, $f_x1,$f_y1,$f_x2,$f_y2)
   END_IF
   FOR ($i=0, $i < 11)
      SWITCH($i)
      CASE(0)
         $pr = 95
      CASE(1)
         $pr = 99
         //      CASE(2)
         //         $pr = 95
      CASE(3)
         $pr = 93
      CASE(4)
         $pr = 95
      CASE(5)
         $pr = 95
      CASE(6)
         $pr = 95
      CASE(7)
         $pr = 95
      CASE(8)
         $pr = 94
         //      CASE(9)
         //         $pr = 95
      DEFAULT
         $pr = 100
      END_SWITCH
     
      SCANPICTURE($a_scan, $f_x1,$f_y1,$f_x2,$f_y2, STRCONCAT($pref,$i,".bmp"), 16744447, $pr)
     
      // заносим 'X,цифра' в $num с учётом мёртвых зон
      $a_scansize = ARRSIZE($a_scan)
      IF($log0 = 1)
         LOGWRITE ("Ищем картинку ", $i, "  найдено ", $a_scansize/2)
      END_IF
     
      FOR($j=0, $j < $a_scansize, 2)
         $X = $a_scan[$j]
         $Y = $a_scan[$j+1]
         
         // проверяем мёртвые зоны
         $dead_zone = 0
         $dead_size = ARRSIZE($dead)
         FOR($m=0, $m < $dead_size, 2)
            $X_old = $dead[$m]
            $Y_old = $dead[$m+1]
            IF($log0 = 1)
               LOGWRITE ("$X/$X_old = ", $X, " / ", $X_old)
               LOGWRITE ("$X/$Y = ", $X, " / ", $Y, "   ABS ", ABS($X - $X_old))
            END_IF
            IF((($Y - $Y_old) < $SHIFT_Y+1) & (ABS($X - $X_old) < $SHIFT_X+1))
               $dead_zone = 1
               $m = $dead_size + 10
            END_IF
         END_CYC
         
         IF($log0 = 1)
            LOGWRITE ("$dead_zone = ", $dead_zone)
            LOGWRITE ("$dead_size = ", $dead_size)
         END_IF
         IF($dead_zone = 0)
            ARRPUSH($dead, $X)
            ARRPUSH($dead, $Y)
            ARRPUSH($data, $X)
            ARRPUSH($data, $i)
            IF($log0 = 1)
               LOGWRITE ("добавляем ", $i, " $X/$Y = ", $X, " / ", $Y)
            END_IF
         END_IF
      END_CYC
      IF($log0 = 1)
         LOGWRITE ("после добавления ", $i, " всего ", ARRSIZE($data)/2)
         LOGWRITE (" ")
      END_IF
      UNDEFINE($dead)
      UNDEFINE($a_scan)
   END_CYC
   
   $data_size = ARRSIZE($data)
   IF($data_size > 0)
      sort_arr()
      IF($log0 = 1)
         LOGWRITE ("цифр после сортировки ", ARRSIZE($data)/2)
      END_IF
     
      FOR($i=1, $i < $data_size, 2)
         IF($res = -1)
            $res = STRCONCAT("", $data[$i])   // если первыё символ
         ELSE
            IF($data[$i] < 10)
               $res = STRCONCAT($res, $data[$i]) // последующие символы цифры
            ELSE
               $res = STRCONCAT($res, ".") // последующие символы  зпт
            END_IF
         END_IF
      END_CYC
      //$res = ROUND($res, -8)
   ELSE
      LOGWRITE ("число не найдено")
   END_IF
END_SUB

//==============================================================================


LOGCLEAR
$log = 1
//$log0 = 1
number_read(514,475,765,602, "textures\digit_", 7)
LOGWRITE ("Найдено число:  ",$res)
HINTPOPUP("Найдено число:  ",$res)
HALT
« Last Edit: May 29, 2015, 01:19:35 PM by Vint »


And_Ro

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

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: Анализ текста в окне
« Reply #44 on: May 30, 2015, 10:12:22 AM »
почти получилось :)
Я же говорю, у меня нет в примерах цифр 9 и 2. Не внес их в CASE