Автор Тема: Поиск цвета, как сделать чтоб не срабатывал на моргание  (Прочитано 569 раз)

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

Эта тема содержит сообщение, помеченное как лучший ответ. Кликните здесь для перехода к этому сообщению.

Оффлайн dwm18 [?]

  • Новичок
  • *
  • Сообщений: 24
  • Репутация: 0
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.14.0
Подскажите, как сделать так, чтобы срабатывал поиск цвета не на моргание точки , а только тогда когда она появилась и застыла ( утвердилась ). А то срабатывает - на моргание сразу - мигом срабатывает, а точка потом не появляется в этом месте. Вот когда появилась и стоит не моргает - тогда нужно, чтоб продолжал скрипт работать...


(нажмите для показа/скрытия)
« Последнее редактирование: Январь 18, 2019, 05:26:00 от dwm18 »

Русское сообщество AutoIt


Онлайн ra4o [?]

  • AutoIt Гуру
  • *****
  • Сообщений: 919
  • Репутация: 169
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.14.0
Можно попробовать при обнаружении точки проверить её наличие через какой-то промежуток времени:
(нажмите для показа/скрытия)
Можно проверять какое-то время, что точка светит постоянно и не моргает, например так :
(нажмите для показа/скрытия)

Оффлайн dwm18 [?]

  • Новичок
  • *
  • Сообщений: 24

  • Автор темы
  • Репутация: 0
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.14.0
Спасибо - вроде должно получится теперь. Вот в цикле код - 1-ин цикл равняется времени ( Sleep 100 ) установленном в конце кода ? - я правильно понимаю ?
 :IL_AutoIt_1:

Онлайн ra4o [?]

  • AutoIt Гуру
  • *****
  • Сообщений: 919
  • Репутация: 169
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.14.0
Вот в цикле код - 1-ин цикл равняется времени ( Sleep 100 ) установленном в конце кода ? - я правильно понимаю ?
Нет , это пауза (и то весьма приблизительно) с того момента , когда скрипт дойдёт именно до этой строки, ведь он затрачивает своё время на проверку условий, выполнение циклов итп.

Русское сообщество AutoIt

Re: Поиск цвета, как сделать чтоб не срабатывал на моргание
« Ответ #3 Отправлен: Январь 09, 2019, 16:24:55 »

Оффлайн dwm18 [?]

  • Новичок
  • *
  • Сообщений: 24

  • Автор темы
  • Репутация: 0
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.14.0
А как точно вычислить время 1-го цикла тогда ?


Добавлено: Январь 09, 2019, 17:18:29
Что по времени первый скрипт, что по циклам - походу корень один и тот дже, т. е. и там по времени и здесь по времени - только циклы ( циклы тоже задержка по времени )  Суть одна и та же.....
Как сделать так что бы когда точно появилась ( зафиксировался цвет ) - тогда скрипт сработал, а то повторная проверка и циклы срабатывают на моргание :((( ;)
« Последнее редактирование: Январь 09, 2019, 17:18:29 от dwm18, Причина: Объединение сообщений »

Онлайн ra4o [?]

  • AutoIt Гуру
  • *****
  • Сообщений: 919
  • Репутация: 169
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.14.0
Цитировать
А как точно вычислить время 1-го цикла тогда ?
Вот так можно :
Код: AutoIt [Выделить]
$hTimer = TimerInit() ; Запускает таймер и хранит дескриптор в переменной
;В этом месте - тот участок кода , время работы которого хотите проверить
;........................................................................
;........................................................................
$iDiff = TimerDiff($hTimer) ; Возвращает разницу во времени, от предыдущего запуска TimerInit, дескриптор которого указан в переменной
ConsoleWrite($iDiff&@CR);Покажет время выполнения участка кода в консоли

Цитировать
а то повторная проверка и циклы срабатывают на моргание
Как оно моргает ? Цвет появился и сразу пропал или , моргает постоянно с какой-то частотой, как считать , что он перестал моргать (сколько по времени он должен быть постоянно) ? Попробуйте во втором варианте изменить (увеличить) количество циклов, в течении которых цвет не должен пропадать...

Оффлайн dwm18 [?]

  • Новичок
  • *
  • Сообщений: 24

  • Автор темы
  • Репутация: 0
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.14.0
Приветствую  :beer:

Точка появляется хаотично - каждый раз, поэтому думаю мы тоже будем искать хаотично ( циклы походу здесь не подойдут ), примерно вот так :

(нажмите для показа/скрытия)

Как думаете пойдет - так ?

В коде если не нашел цвет, он возвращается в начало и ищет ( ждет ) - правильно я понимаю ?

С неактивным окном будет работать ?

За ранее благодарен....
« Последнее редактирование: Январь 18, 2019, 05:26:38 от dwm18 »

Онлайн ra4o [?]

  • AutoIt Гуру
  • *****
  • Сообщений: 919
  • Репутация: 169
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.14.0
Цитировать
Как думаете пойдет - так ?
Нет, зачем проверять пиксель через рандомные промежутки времени ? Ведь пиксель может появиться в паузе. Смысл скрипта (второй вариант) такой : ждём нужный пиксель и если найден - в цикле проверяем есть он или потух(моргнул итд) если в течении цикла пиксель не найден, то считается, что моргнул и не засчитывается срабатывание, если найден в каждом из проходов цикла (не тух) , то звуковой сигнал и через паузу всё по новой. Здесь количеством прохода цикла Вы определяете минимальное время, в течении которого засвеченный символ считается не моргнувшим (как то так :))
Цитировать
С неактивным окном будет работать ?
Нет, не будет. Функция определяет цвет пикселя на мониторе.
OffTopicВсавляйте код в теги - над окном, когда пишите сообщение кнопка с логотипом AutoIt

Русское сообщество AutoIt

Re: Поиск цвета, как сделать чтоб не срабатывал на моргание
« Ответ #7 Отправлен: Январь 10, 2019, 10:03:10 »

Оффлайн InnI [?]

  • AutoIt Гуру
  • *****
  • Сообщений: 4046
  • Репутация: 1074
    • Награды
  • Версия AutoIt: 3.3.14.0
dwm18, ra4o

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

Другой вариант, найти пиксель и мониторить его цвет через PixelGetColor.

Оффлайн dwm18 [?]

  • Новичок
  • *
  • Сообщений: 24

  • Автор темы
  • Репутация: 0
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.14.0
Цитировать
А как точно вычислить время 1-го цикла тогда ?
Вот так можно :
Код: AutoIt [Выделить]
$hTimer = TimerInit() ; Запускает таймер и хранит дескриптор в переменной
;В этом месте - тот участок кода , время работы которого хотите проверить
;........................................................................
;........................................................................
$iDiff = TimerDiff($hTimer) ; Возвращает разницу во времени, от предыдущего запуска TimerInit, дескриптор которого указан в переменной
ConsoleWrite($iDiff&@CR);Покажет время выполнения участка кода в консоли

Цитировать
а то повторная проверка и циклы срабатывают на моргание
Как оно моргает ? Цвет появился и сразу пропал или , моргает постоянно с какой-то частотой, как считать , что он перестал моргать (сколько по времени он должен быть постоянно) ? Попробуйте во втором варианте изменить (увеличить) количество циклов, в течении которых цвет не должен пропадать...

А в какие места кода - что куда расставить - я начинающий, чтобы посчитать прохождение 1-го цикла ?

(нажмите для показа/скрытия)





Добавлено: Январь 10, 2019, 14:01:55
dwm18, ra4o

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

Другой вариант, найти пиксель и мониторить его цвет через PixelGetColor.

пиксель появляется - точно по оси Х на 2211 координате, и по оси Y - все нормально
« Последнее редактирование: Январь 18, 2019, 05:27:29 от dwm18 »

Онлайн ra4o [?]

  • AutoIt Гуру
  • *****
  • Сообщений: 919
  • Репутация: 169
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.14.0
InnI, я оставлял функцию "PixelSearch" намеренно , так , как она допускает некоторую степень изменения цвета  и не так жестко контролирует область нахождения пикселя, предполагая , что так и нужно автору, хотя с учётом Ваших замечаний скрипт может выглядеть так :
Код: AutoIt [Выделить]
PixelExist = False
While 1
    $coord = PixelSearch(2211, 111, 2211, 603, 0x008000, 50, 3) ; координаты области, цвет, допущение оттенка, шаг поиска
    If Not @error Then
        $Color = PixelGetColor($coord[0], $coord[1])
        $PixelExist = True
        For $i = 0 To 19 ;Количество циклов, за которое точка не должна потухнуть
            $hTimer = TimerInit() ; Запускает таймер и хранит дескриптор в переменной
            If $Color <> PixelGetColor($coord[0], $coord[1]) Then
                $PixelExist = False
                ExitLoop
            EndIf
            Sleep(100) ;Небольшая пауза
            $iDiff = TimerDiff($hTimer) ; Возвращает разницу во времени, от предыдущего запуска TimerInit, дескриптор которого указан в переменной
            ConsoleWrite($iDiff & @CR) ;Покажет время выполнения одного прохода цикла в консоли
        Next
        If $PixelExist Then
            SoundPlay("C:\0\zvuk.mp3", 0)
            $PixelExist = False
            Sleep(300000)
        EndIf
    EndIf
Sleep(100); Пауза между попытками поиска пикселя нужного цвета
WEnd

« Последнее редактирование: Январь 10, 2019, 21:54:01 от ra4o »

Оффлайн dwm18 [?]

  • Новичок
  • *
  • Сообщений: 24

  • Автор темы
  • Репутация: 0
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.14.0
InnI, я оставлял функцию "PixelSearch" намеренно , так , как она допускает некоторую степень изменения цвета  и не так жестко контролирует область нахождения пикселя, предполагая , что так и нужно автору, хотя с учётом Ваших замечаний скрипт может выглядеть так :
Код: AutoIt [Выделить]
PixelExist = False
While 1
    $coord = PixelSearch(2211, 111, 2211, 603, 0x008000, 50, 3) ; координаты области, цвет, допущение оттенка, шаг поиска
    If Not @error Then
        $Color = PixelGetColor($coord[0], $coord[1])
        $PixelExist = True
        For $i = 0 To 19 ;Количество циклов, за которое точка не должна потухнуть
            $hTimer = TimerInit() ; Запускает таймер и хранит дескриптор в переменной
            If $Color <> PixelGetColor($coord[0], $coord[1]) Then
                $PixelExist = False
                ExitLoop
            EndIf
            Sleep(100) ;Небольшая пауза
            $iDiff = TimerDiff($hTimer) ; Возвращает разницу во времени, от предыдущего запуска TimerInit, дескриптор которого указан в переменной
            ConsoleWrite($iDiff & @CR) ;Покажет время выполнения одного прохода цикла в консоли
        Next
        If $PixelExist Then
            SoundPlay("C:\0\zvuk.mp3", 0)
            $PixelExist = False
            Sleep(300000)
        EndIf
    EndIf
Sleep(100); Пауза между попытками поиска пикселя нужного цвета
WEnd


Ошибку выдает, файл прикрепил



Внимание: Для просмотра прикреплённых файлов необходимо Войти или Зарегистрироваться

Помечен как лучший ответ пользователем dwm18 Отправлен Январь 11, 2019, 11:37:39

Оффлайн InnI [?]

  • AutoIt Гуру
  • *****
  • Сообщений: 4046
  • Репутация: 1074
    • Награды
  • Версия AutoIt: 3.3.14.0
dwm18  [?]
Цитировать
Ошибку выдает
В первой строке пропущен $
Код: AutoIt [Выделить]
$PixelExist = False



Добавлено: Январь 11, 2019, 11:21:43
ra4o  [?]
Цитировать
не так жестко контролирует область нахождения пикселя
Так я об этом и говорю. При первом вызове горит один пиксель, при втором этот же, а при третьем - другой. Естественно, dwm18 считает это миганием, а скрипт - нет.

Оффлайн dwm18 [?]

  • Новичок
  • *
  • Сообщений: 24

  • Автор темы
  • Репутация: 0
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.14.0
dwm18  [?]
Цитировать
Ошибку выдает
В первой строке пропущен $
Код: AutoIt [Выделить]
$PixelExist = False



Добавлено: Январь 11, 2019, 11:21:43
ra4o  [?]
Цитировать
не так жестко контролирует область нахождения пикселя
Так я об этом и говорю. При первом вызове горит один пиксель, при втором этот же, а при третьем - другой. Естественно, dwm18 считает это миганием, а скрипт - нет.
Да один и тот же цвет не меняется !!! - вот и считаю так. координаты одни.....

спасибо за исправление ошибки


Добавлено: Январь 11, 2019, 12:01:43
InnI, я оставлял функцию "PixelSearch" намеренно , так , как она допускает некоторую степень изменения цвета  и не так жестко контролирует область нахождения пикселя, предполагая , что так и нужно автору, хотя с учётом Ваших замечаний скрипт может выглядеть так :
Код: AutoIt [Выделить]
PixelExist = False
While 1
    $coord = PixelSearch(2211, 111, 2211, 603, 0x008000, 50, 3) ; координаты области, цвет, допущение оттенка, шаг поиска
    If Not @error Then
        $Color = PixelGetColor($coord[0], $coord[1])
        $PixelExist = True
        For $i = 0 To 19 ;Количество циклов, за которое точка не должна потухнуть
            $hTimer = TimerInit() ; Запускает таймер и хранит дескриптор в переменной
            If $Color <> PixelGetColor($coord[0], $coord[1]) Then
                $PixelExist = False
                ExitLoop
            EndIf
            Sleep(100) ;Небольшая пауза
            $iDiff = TimerDiff($hTimer) ; Возвращает разницу во времени, от предыдущего запуска TimerInit, дескриптор которого указан в переменной
            ConsoleWrite($iDiff & @CR) ;Покажет время выполнения одного прохода цикла в консоли
        Next
        If $PixelExist Then
            SoundPlay("C:\0\zvuk.mp3", 0)
            $PixelExist = False
            Sleep(300000)
        EndIf
    EndIf
Sleep(100); Пауза между попытками поиска пикселя нужного цвета
WEnd


Скрипт заработал, но не выдает консоль - времени прохождения 1-го цикла.

на цвет срабатывает - в неактивном окне ( изначальный первый скрит ) - короче все они работают с неактивными окнами.... Это так для сведения.....

Не выходит консоль :(
« Последнее редактирование: Январь 11, 2019, 12:01:43 от dwm18, Причина: Объединение сообщений »

Оффлайн InnI [?]

  • AutoIt Гуру
  • *****
  • Сообщений: 4046
  • Репутация: 1074
    • Награды
  • Версия AutoIt: 3.3.14.0
dwm18  [?]
Цитировать
Не выходит консоль
Запустите скрипт из SciTE (нажмите F5) - в нижней части редактора откроется панель.

Русское сообщество AutoIt

Re: Поиск цвета, как сделать чтоб не срабатывал на моргание
« Ответ #14 Отправлен: Январь 11, 2019, 12:27:35 »

 

Похожие темы

  Тема / Автор Ответов Последний ответ
2 Ответов
4353 Просмотров
Последний ответ Сентябрь 09, 2009, 13:30:11
от hikki
1 Ответов
1911 Просмотров
Последний ответ Июль 15, 2012, 18:34:23
от sngr
4 Ответов
2446 Просмотров
Последний ответ Январь 21, 2014, 13:00:59
от InnI
0 Ответов
1157 Просмотров
Последний ответ Октябрь 01, 2014, 12:49:33
от vlv993
3 Ответов
1711 Просмотров
Последний ответ Октябрь 28, 2014, 19:15:48
от alex33
3 Ответов
1416 Просмотров
Последний ответ Октябрь 28, 2014, 10:17:21
от alex33
2 Ответов
1169 Просмотров
Последний ответ Ноябрь 06, 2014, 22:12:37
от InnI
7 Ответов
1940 Просмотров
Последний ответ Ноябрь 13, 2014, 18:30:40
от max1300
7 Ответов
4450 Просмотров
Последний ответ Апрель 26, 2016, 20:34:20
от Makrut
2 Ответов
890 Просмотров
Последний ответ Июнь 26, 2016, 13:45:04
от Yuriy09