Уведомления

Группа в Telegram: @pythonsu

#1 Окт. 10, 2017 08:34:41

JohnDoe777
Зарегистрирован: 2017-10-10
Сообщения: 1
Репутация: +  0  -
Профиль   Отправить e-mail  

Помогите нубу

 from PIL import Image
import pyautogui
from PIL import ImageGrab
import time
from threading import Timer
import goto
def get_mask(img, x_start, y_start):
	mask = []
 
	for x in range(10):
		
		mask_y = []
		for y in range(10):
			
			mask_y.append(img[x_start + x, y_start + y])
		mask.append(mask_y)
 
	return mask
 
 
#img = Image.open("full.png")
img = ImageGrab.grab()
img = img.convert("RGBA")
pixdata_img = img.load()
 
gun = Image.open("part.png")
gun = gun.convert("RGBA")
pixdata_gun = gun.load()
 
search_mask = get_mask(pixdata_gun, gun.size[0]/2 - 5[code python][code python][/code][/code], gun.size[1]/2 - 5)
 
for x in range(img.size[0]-10):
	for y in range(img.size[1]-10):
		if pixdata_img[x, y] == search_mask[0][0]:
			pixdata_mask = get_mask(pixdata_img, x, y)
			if pixdata_mask == search_mask:
				print (x,y)
				
				

Код ищет на скриншоте соответствие по картинке part.png,если находит - выводит координаты.
У меня другая проблема,если данный код НЕ находит соответствие он висит бесконечным циклом.
Помогите выйти из цикла в случае не нахождения фрагмента.

Придумал следующий быдлокод

 from PIL import Image
import pyautogui
from PIL import ImageGrab
import time
from threading import Timer
from goto import with_goto
def timeout():
    
	goto .end
t = Timer(5, timeout)
t.start()
#while count != 5: 
def get_mask(img, x_start, y_start):
	mask = []
 
	for x in range(10):
		
		mask_y = []
		for y in range(10):
			
			mask_y.append(img[x_start + x, y_start + y])
		mask.append(mask_y)
 
	return mask
 
 
#img = Image.open("full.png")
img = ImageGrab.grab()
img = img.convert("RGBA")
pixdata_img = img.load()
 
gun = Image.open("part.png")
gun = gun.convert("RGBA")
pixdata_gun = gun.load()
 
search_mask = get_mask(pixdata_gun, gun.size[0]/2 - 5, gun.size[1]/2 - 5)
 
for x in range(img.size[0]-10):
	for y in range(img.size[1]-10):
		if pixdata_img[x, y] == search_mask[0][0]:
			pixdata_mask = get_mask(pixdata_img, x, y)
			if pixdata_mask == search_mask:
				print (x,y)
				
				
label .end
print("Next action")

Цикл не закрывается но хотя бы должно переходить дальше

Выдает следующую ошибку

 C:\Users\Administrator\Desktop\pyserch>C:\Python27\python.exe C:\Users\Administr
ator\Desktop\pyserch\se.py
Exception in thread Thread-1:
Traceback (most recent call last):
  File "C:\Python27\lib\threading.py", line 801, in __bootstrap_inner
    self.run()
  File "C:\Python27\lib\threading.py", line 1073, in run
    self.function(*self.args, **self.kwargs)
  File "C:\Users\Administrator\Desktop\pyserch\se.py", line 11, in timeout
    goto .end
AttributeError: 'CallableModule' object has no attribute 'end'

Желательно бы решение с циклом ))=

Пробовал

while count != 5:

в цикле count = count + 1 но тоже не работает )=

Также был бы благодарен за идею поиска по картинке,и клик по координатам,без OpenCV.


Отредактировано JohnDoe777 (Окт. 10, 2017 08:35:29)

Офлайн

#2 Окт. 10, 2017 11:26:00

Romissevd
От: Счастье
Зарегистрирован: 2015-03-01
Сообщения: 533
Репутация: +  76  -
Профиль   Отправить e-mail  

Помогите нубу

Ошибка вообще не с циклом связана. Тут бред написан в начале и конце. А если нужно прервать цикл есть break

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version