Wykrywanie obrazka

0

Dzień dobry wszystkim :)

Z góry uprzedzam, że to dopiero początek mojej przygody z "programowaniem", więc proszę o wyrozumiałość i przede wszystkim cierpliwość do moich głupot.
Z racji, że od jakiegoś czasu strasznie interesuję mnie python, to postanowiłem spróbować napisać program, który mógłby mi się przydać i jednocześnie zdobyć troche wiedzy. Z tego co widze, to porwałem się chyba na głęboką wodę, bo napisałem pare linijek i utknąłem w miejscu.

Do rzeczy:

Chciałbym stworzyć program, który będzie wykrywał dany obrazek i wykonywał pewne akcje. Stworzyłem sobię liste wszystkich "zasad" które musza go obowiązywać, tj:

                                                                  ##### ZASADY ####
 

#x1, y1 = konkretna część mojego ekranu
#x2, y2 = następna specyficzna część ekranu
# obrazek "OPEN" zawsze pojawia się w x2,y2

________________________________________________________________________________________________________________________________________
Program:

1. Skanuje ekran w poszukiwaniu obrazka "Open" w x2,y2
-  Jeśli znajdzie, to:
2  Skanuje ekran w poszukiwaniu obrazka "Short" lub "Long" w (x1,y1) oba są w tym samym obszarze

3.  Jeśli znajdzie "Long", to:
          -  Klika myszką (100,100)
          -  Następnie przeszykuje ekran w poszykiwaniu kolejnego obrazka (x2,y2)
          -  Jeśli znajdzie obrazek "XL" lub "Short" to:
          -  Klika myszką (200,200)

4.   Jeśli znajdzie "Short", to:
          -  Klika myszką (200,200)
          -  Następnie przeszykuje ekran w poszykiwaniu kolejnego obrazka (x2,y2)
          -  Jeśli znajdzie obrazek "XS" lub "Long" to:
          -  Klika myszką (100,100)

I powtarza wszysstko do póki sam tego nie przerwę. 

Aktualnie stworzyłem coś takiego:

from pyautogui import *
import pyautogui
import time
import keyboard
import random
import win32api, win32con

while 1:
    if pyautogui.locateOnScreen('Open.png') != None:
        print("found Open")
        time.sleep (1) 
        continue
    else:
        print("Not found Open")
        time.sleep(1)
        break

Ale problemem jest to, że nie wiem jak to mam dalej kontynować.

Czy mógłby mi ktoś pomóc przynajmniej na przykładzie jednego nastepnego kroku, jak mam to dalej kontunować?

Z góry dziękuje za wyrozumiałość i mam nadzieję, że wytłumaczyłem w miare jasno o co mi chodzi.
Pozdrawiam

0

Dobra, poradziłem sobie
Pomoże mi ktoś teraz to tylko zapętlić to w nieskończoność?

while 1:
    if pyautogui.locateOnScreen('Open1.png', region=(460,988,28,12), grayscale=True, confidence=0.8) != None:
        print("JEST!")
        time.sleep (1)   
        break  
    else:
        print("nie widzę")
        time.sleep(1)
        continue

while 1:
    if pyautogui.locateOnScreen('Short1.png', region=(459,1022,30,12), grayscale=True, confidence=0.8) != None:
        print("SELL")
        break
    if pyautogui.locateOnScreen('Long1.png', region=(459,1023,27,12), grayscale=True, confidence=0.8) != None:
        print("LONG")
        break
    else:
        print("NIE ZNALAZŁEM1")
        time.sleep(1)
        continue

while 1:
    if pyautogui.locateOnScreen('XL1.png', region=(460,987,13,12), grayscale=True, confidence=0.8) != None:
        print("XL")
        break
    if pyautogui.locateOnScreen('Long1.png', region=(459,988,27,12), grayscale=True, confidence=0.8) != None:
        print("LONG1")
        break
    if pyautogui.locateOnScreen('XS1.png', region=(460,987,13,12), grayscale=True, confidence=0.8) != None:
        print("XS")
        break
    if pyautogui.locateOnScreen('Short1.png', region=(459,987,30,12), grayscale=True, confidence=0.8) != None:
        print("xSHORT1")
        break
    else:
        print("NIE ZNALAZŁEM2")
        time.sleep(1)
        continue

0

Nie wiem czy dobrze rozumiem cały flow, który chcesz uzyskać, ale nawet jeśli nie to i tak będzie lepszy niż Twój obecny ;)

import pyautogui
import time

# regiony na ekranie do wyszukiwania obrazów
x1_y1 = (460,1023,27,12)
x2_y2 = (460,988,28,12)
x3_y3 = (460,987,13,12)

# funkcje pomocnicze - nieco skracają kod
def check(image, region):
    return pyautogui.locateOnScreen(image, region=region, grayscale=True, confidence=0.8) != None

def click(x, y):
    pyautogui.click(x=x, y=y)

# właściwy kod - działanie aplikacji
while 1: # nieskonczona pętla
    # 1. Skanuje ekran w poszukiwaniu obrazka "Open" w x2,y2
    # -  Jeśli znajdzie, to:   
    if check('Open1.png', x2_y2):

        # 2. Skanuje ekran w poszukiwaniu obrazka "Short" lub "Long" w (x1,y1) oba są w tym samym obszarze
        # 3. Jeśli znajdzie "Long", to:
        if check('Long1.png', x1_y1):
            # -  Klika myszką (100,100)
            click(100,100)
            # -  Następnie przeszykuje ekran w poszykiwaniu kolejnego obrazka (x2,y2)
            # -  Jeśli znajdzie obrazek "XL" lub "Short" to:
            if check('XL1.png', x3_y3) or check('Short1.png', x2_y2):
                # -  Klika myszką (200,200)
                click(200,200)

        # 4. Jeśli znajdzie "Short", to:    
        elif check('Short1.png', x1_y1):
            # -  Klika myszką (200,200)
            click(200,200)
            # -  Następnie przeszykuje ekran w poszykiwaniu kolejnego obrazka (x2,y2)
            # -  Jeśli znajdzie obrazek "XS" lub "Long" to:
            if check('XS1.png', x3_y3) or check('Long1.png', x2_y2):
                # -  Klika myszką (100,100)
                click(100,100)
    else:
        print("nie widzę")
        time.sleep(1)

Oczywiście nie mam jak przetestować, więc nawet tego nie uruchamiałem - dlatego przepraszam za ewentualne literówki ;)

1 użytkowników online, w tym zalogowanych: 0, gości: 1