Что нового

ImageSearch не ищет картинку

Ilya68tmb

Новичок
Сообщения
2
Репутация
0
Всем ДВС!
Недавно установил AutoIt специально для ImageSearch'а. Неделю уже ковыряюсь и не могу понять почему ничего не работает. Облазил местный форум, а также буржуйский. Очень много сообщений с той же проблемой, что и у меня - не работает простейшая программа. Никаких ошибок не выдает, просто не ищет картинку. Ни одного решения я не нашел, даже идеи о том, в чем может быть проблема. Прошу помощи!

Что пробовал я?
1) танцевать с бубном
2) менять картинки
3) установить права админа на все файлы AutoIt'а
4) добавлять разные библиотеки imagesearch.dll, разных лет с разных сайтов
5) искать картинку в цикле и без
6) писать цикл после функции и до нее (смотри в коде, там цикл после)
7) прописывать полный путь к картинке в первом аргументе ImageSearch
8) менять версию AutoIt'а
9) Все пункты с 1 по 8 повторить по 10 раз

Код программы такой
Код:
#include <ImageSearch.au3>


HotKeySet("{F9}", "Start")
HotKeySet("{F10}", "Ex")

 $x1 = 0
 $y1 = 0

Func Start()
	$result = _ImageSearch('test.bmp', 1, $x1, $y1, 0)
	if $result = 1 Then
		MouseMove($x1, $y1, 10)
	Else
		MsgBox(1, "Not", "Not")
	EndIf
EndFunc

Func Ex()
	Exit
EndFunc

While 1
	Sleep(100)
WEnd


Архитектура x32. Windows 10
 

NickSpirit

Знающий
Сообщения
44
Репутация
5
Попробуйте эти два файла.

1. au3 в папку Include.
2. DLL в C:\Windows\System32 если 32 или SysWOW64 если 64.
3. DLL в папку со скриптом.
 

Вложения

  • ImageSearch.au3
    5.1 КБ · Просмотры: 17
  • ImageSearchDLL.7z
    92.1 КБ · Просмотры: 20
Автор
I

Ilya68tmb

Новичок
Сообщения
2
Репутация
0
Попробовал! Ничего не вышло.. Снова табличка "Нет". Менял слип тайм до 1000 и 5000. Также добавил dll в папку со своим скриптом - ничего.


Добавлено:
Сообщение автоматически объединено:

Получилось! Бубны сработали (объяснения получше у меня пока нет).
В общем я попробовал взять картинку 1 на 1 - сработало! Отлично!
Попробовал немного увеличить до прямоугольника 3х2 - тоже сработало! (и не один раз!)
Далее были картинки 5х8, 10х12, 7х20 - все работало... пока не взял размер 50х40 - тут опять все плохо.
Попробовал снять кусок той же картинки размера 50х40, но в другом месте - результат неоднозначный. Какие-то находились, какие-то нет, а некоторые вообще иногда находятся, а иногда нет.
Подправил функцию старт вот так:
Код:
Func Start()
	Local Int $i = 0
	While $i <> 100
		$result = _ImageSearch("zvezda.bmp", 1, $x1, $y1, 0)
	
		if $result = 1 Then
			MouseMove($x1, $y1, 10)
			ExitLoop
		Else
			$i = $i + 1
		EndIf
	WEnd
	
EndFunc

Поигравшись с количеством итераций и разными картинками выяснилось, что по большей части(процентов 60-70) они рано или поздно находятся, но совершенно неясно от чего это зависит... Удалось сделать лишь несколько наблюдений (все на глазок, так что критикуйте, поправляйте, просвещайте) :
1. Если делать скриншот искомого объекта, зацепив окрестный фон, то картинка ищется плохо, чаще даже не находится вовсе.
2. Чем больше ярко выраженных границ областей на искомой картинке, тем лучше она ищется
3. Вероятность успеха сильно ухудшается с ростом размера искомой картинки

Остается также совершенно непонятный момент: ранее я пробовал искать одну картинку и ничего не выходило(ни разу). Теперь же она отлично ищется!(100% нахождений!) Условия поиска те же...что изменилось - не пойму.

Пойду dll шерстить..
 

stealzy

Новичок
Сообщения
2
Репутация
0
Недавно установил AutoIt специально для ImageSearch'а.
Ну раз такое дело, вы знаете, что ImageSearchDll это кусок кода AutoHotkey, выделенный в библиотеку?
Может вам стоит попробовать на AutoHotkey?
Код:
; устанавливаем экранные координаты вместо координат активного окна
CoordMode Pixel ; для поиска
CoordMode Mouse ; и для мыши

ImageSearch, FoundX, FoundY, 0, 0, A_ScreenWidth, A_ScreenHeight, C:\test.png
If (ErrorLevel = 0) ; найдено
	MouseMove FoundX, FoundY
 
Верх