1 (изменено: elektrovenik, 2015-04-03 11:52:04)

Тема: AHK: Поиск "сложных" изображений

Приветствую всех. Вот появилась задачка, задумался над реализацией: необходимо через ImageSearch или каким-то другим образом, выполнить поиск изображения, которое может прерываться или иметь прозрачность.
Для примера добавлю картинку с 3-мя изображениями:
1. Оригинал
2. Зеленая область вырезана.
3. Вырезаны произвольные области.

Подразумевается, что у меня есть некий эталон, до начала работы. Он является Оригиналом. Но в процессе работы приложения Оригинал будет меняться. Моя задача исключить из поиска те изменения, которые мне не важны (они вырезаны) и отслеживать остальные.

Через PixelSearch реализовать подобную идею невозможно, т.к. сам Оригинал может перемещаться по экрану, соответственно не привязан к координатам.

Как решить такую задачку?

2

Re: AHK: Поиск "сложных" изображений

Сделайте маску и ищите ее.
Почитайте про опцию *Trans в ImageSearch.

3

Re: AHK: Поиск "сложных" изображений

Для начала неплохо почитать самую первую тему, насчет правил оформления.

4

Re: AHK: Поиск "сложных" изображений

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

5

Re: AHK: Поиск "сложных" изображений

elektrovenik, добавьте префикс скриптового языка в название темы.

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

6 (изменено: elektrovenik, 2015-04-06 02:15:59)

Re: AHK: Поиск "сложных" изображений

ypppu пишет:

elektrovenik, добавьте префикс скриптового языка в название темы.

Прошу прощения, тему писал в 6ом часу утра и даже не заметил что AHK в конце названия написал.

7 (изменено: Malcev, 2015-04-03 12:07:55)

Re: AHK: Поиск "сложных" изображений

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

Неужели добавление префикса нельзя автоматизировать?
Возможно это поможет:
http://punbb.informer.com/forums/topic/ … -prefixes/
А то форум скриптописателей, а занимаемся "мартышкиным трудом".

8 (изменено: elektrovenik, 2015-04-06 02:16:21)

Re: AHK: Поиск "сложных" изображений

Почему-то не выходит, пробую такие варианты:

ImageSearch, X, Y, 0, 0, 1600, 900, *Trans0xFFFFFF test.png ; пустота = белый цвет
ImageSearch, X, Y, 0, 0, 1600, 900, *Trans0x000000 test.png ; пустота = черный цвет
ImageSearch, X, Y, 0, 0, 1600, 900, *Trans0xECF3FA test.png ; пустота = цвет пустоты в обычном средстве просмотра фотографий Windows

Может я неправильно понимаю какой цвет надо к каким приравнивать?

9 (изменено: Malcev, 2015-04-03 13:14:34)

Re: AHK: Поиск "сложных" изображений

А так белый тоже не находит?

ImageSearch, X, Y, 0, 0, 1600, 900, *TransFFFFFF test.png ; пустота = белый цвет
ImageSearch, X, Y, 0, 0, 1600, 900, *TransWhite test.png ; пустота = белый цвет

10 (изменено: elektrovenik, 2015-04-04 11:54:26)

Re: AHK: Поиск "сложных" изображений

Malcev пишет:

А так белый тоже не находит?

Нет, не находит. При чем не находит уже на этапе тестирования:


f5::
SetTimer, Chek, 3000
return

Chek:
ImageSearch, X, Y, 0, 0, 1600, 900, *Trans0xFFFFFF 1.png
if ErrorLevel = 2
    {
        MsgBox Нет картинки, с образцом изображения для поиска!
    }
else if ErrorLevel = 1
    {
        SoundPlay, %WinDir%\Media\ir_end.wav
    }
return

f6::
pause

То есть, я просто открываю с помощью различных средств просмотра/редактирования данное изображение. Соответственно в каждом из средств пустота "залита" различными цветами (0xFFFFFF test.png ; пустота = белый цвет; 0x000000 test.png ; пустота = черный цвет; 0xECF3FA test.png ; пустота = цвет пустоты в обычном средстве просмотра фотографий Windows) и уже на этом этапе, при тестовом прогоне скрипт не находит совпадений с данным изображением.

11

Re: AHK: Поиск "сложных" изображений

Цветом вы должны закрасить область, которая искаться не будет.
Если не получится, залейте - что и где ищете.

12 (изменено: elektrovenik, 2015-04-06 02:17:14)

Re: AHK: Поиск "сложных" изображений

Стоп, а вот это наверное важно! Я должен именно закрасить определенным цветом то, что будет исключено из поиска? Просто я ничего не закрашиваю, а вырезаю ненужные участки в фотошопе, оставляя как-бы пустоту (по умному альфа канал вроде, я не спец фотошопа) и уже "цвет пустоты" выставляю в *Trans.

P.S. Попробовал залить, обозначил новый цвет - бесполезно, не находит изображения.

ImageSearch, X, Y, 0, 0, 1600, 900, *Trans0x00FE00 test.png

13 (изменено: Malcev, 2015-04-03 14:04:25)

Re: AHK: Поиск "сложных" изображений

Стоп, а вот это наверное важно! Я должен именно закрасить определенным цветом то, что будет исключено из поиска?

Да.

ImageSearch, X, Y, 0, 0, 1600, 900, *Trans79f908 test.png

14 (изменено: elektrovenik, 2015-04-06 02:18:09)

Re: AHK: Поиск "сложных" изображений

del

15

Re: AHK: Поиск "сложных" изображений

elektrovenik, ознакомьтесь с правилами цитирования, отредактируйте свои посты.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

16 (изменено: Malcev, 2015-04-03 14:28:13)

Re: AHK: Поиск "сложных" изображений

Вот представьте что у вас есть картина в золотой рамке и та же самая картина в красной рамке.
Чтобы найти между ними сходство нужно в ImageSearch задать прозрачность красному цвету картине с красной рамкой.

17

Re: AHK: Поиск "сложных" изображений

Malcev пишет:

Вот представьте что у вас есть картина в золотой рамке и та же самая картина в красной рамке.
Чтобы найти между ними сходство нужно в ImageSearch задать прозрачность красному цвету картине с красной рамкой.

Спасибо за помощь, это я понял ранее) Просто была проблема, что не находило картинку вообще, но теперь разобрался.

18

Re: AHK: Поиск "сложных" изображений

elektrovenik, ознакомьтесь с этой темой, отредактируйте свой пост. В следующий раз получите бан.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

19 (изменено: elektrovenik, 2015-04-06 02:18:33)

Re: AHK: Поиск "сложных" изображений

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

20

Re: AHK: Поиск "сложных" изображений

elektrovenik, цитирую специально для вас:

Обязательно прочитать перед созданием темы! пишет:

Избегайте избыточного цитирования! Не цитируйте пост, на который отвечаете, целиком. Используйте цитирование только в том случае, если иначе не будет понятно, на что Вы отвечаете, и старайтесь выбирать только ключевые фразы.

Бессмысленное цитирование предыдущего поста впрямую нарушает это правило. У вас сутки на осознание и исправление.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

21 (изменено: elektrovenik, 2015-04-10 03:46:20)

Re: AHK: Поиск "сложных" изображений

И так, решил  отписаться по итогам:

+ открыть спойлер

Теперь получилось осуществить желаемое - написать скрипт, для контроля скорости закачки торрентом.

f5::
SetTimer, ChekMB, 35000
return

ChekMB: ; поиск изображения, на котором изображено скачивание со скоростью не менее 1 МБ. Если не находит, переходим к проверке скорости в КБ.
ImageSearch,,, 0, 0, A_ScreenWidth, A_ScreenHeight, *Trans0x7DFF00 МБ.png
    if ErrorLevel
        gosub, ChekKB
    return

ChekKB: ; поиск изображения, на котором определяется "маска" скорости скачивания в КБ. Изображение отредактировано так, что если скорость скачивания ниже 100КБ, то условие не выполняется.
ImageSearch,,, 0, 0, A_ScreenWidth, A_ScreenHeight, *Trans0x7DFF00 КБ.png
    if ErrorLevel = 0
    {
        count++
        gosub, Action
    }    
    return

Action: ;  Это блок "шанса на исправление". Если было обнаружено, что скорость скачивания менее 1МБ, а затем и 100КБ, то даем небольшую отстрочку на исправление в 7.5сек (3 проверки через 2.5 секунды каждая), если результат проверок говорит нам о том, что скорость не поднялась - останавливаем закачку и перезапускаем через 2.5 сек.
If count >= 3
{
ControlClick, x390 y60, ahk_exe uTorrent.exe ; клик по клавише остановки закачки
sleep 2500
ControlClick, x355 y60, ahk_exe uTorrent.exe ; клик по клавише возобновления закачки
count := 0
}
else
{
sleep 2500
gosub, ChekMB
}
return

f6:: pause

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

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

Есть у кого-то идеи более "умной" реализации такой задачи?

22

Re: AHK: Поиск "сложных" изображений

Как минимум, получать информацию в текстовом виде кажется более логичным.

exe := "AHK_exe utorrent.exe"
while WinExist(exe)
{
   StatusBarGetText, DL, 4, %exe%
   StatusBarGetText, UL, 5, %exe%
   Tooltip, %DL%`n%UL%,0,0
   sleep 500
}

Это информация по общей скорости из статусбара.
Если нужно разобрать весь список закачек, то поможет в этом ControlGet, List.

23 (изменено: elektrovenik, 2015-04-10 12:35:11)

Re: AHK: Поиск "сложных" изображений

Irbis, Вы меня поразили. Я и не знал, что ahk так умеет. А можете пожалуйста описать подробно код скрипта ибо мне в нем мало что понятно. Точнее так, опишу что понимаю:


exe := "AHK_exe utorrent.exe" ; присваиваем переменной exe класс или процесс нейм, не знаю как правильно в терминологии AHK_exe utorrent.exe
while WinExist(exe) ; пока существует/истинна переменная exe
{
   StatusBarGetText, DL, 4, %exe% ; статус бар гет текст видимо стандартная функция, DL переменная куда считывать, а вот указатель строки для считывания 4 - откуда он берется? Чем определяется?
   StatusBarGetText, UL, 5, %exe%
   Tooltip, %DL%`n%UL%,0,0
   sleep 500
}

P.S. Серьезно, не понимаю откуда Вы получили эту инфу? AhkSpy ничего такого не показывает (или я слепой?)
http://i6.5cm.ru/i/LKCA.jpg   http://i6.5cm.ru/i/OpoL.jpg   http://i6.5cm.ru/i/rZr0.jpg
Желательно, если можете, опишите пожалуйста общий принцип, из каких вообще программ/окон можно считывать подобным образом информацию. Как определить, что подобный метод считывания доступен?
Можно-ли вместо вывода инфы тултипом, сделать условия на действие что-то вроде ?:


exe := "AHK_exe utorrent.exe"
while WinExist(exe)
{
   StatusBarGetText, DL, 4, %exe%
IF DL <= N
{
Действие 1
}
else
{
Действие 2
}
return

24 (изменено: Irbis, 2015-04-10 12:47:45)

Re: AHK: Поиск "сложных" изображений

Это строка состояния внизу главного окна, туда и надо наводить курсор.
Или воспользоваться AU3Info, она сразу выводит информацию из статусбара.

+ _ +

http://savepic.net/6715776.png

Подробней о работе со StatusBar написано в справке.
Вместо тултипа можно задать какое вам нужно действие, только нужно учесть ряд нюансов в работе utorrent. Например, вместо мгновенной скорости скачивания, считать усредненную за интервал времени, чтоб избежать ложных срабатываний из-за кратковременных "просадок". И в начале скачивания скорость тоже низкая, это тоже надо иметь в виду.

25 (изменено: elektrovenik, 2015-04-10 18:12:26)

Re: AHK: Поиск "сложных" изображений

Продолжение уже уходит в другую область, решил что логичным будет создание новой темы.http://forum.script-coding.com/viewtopi … 212#p93212