pyautogui 예제 모니터 특정 위치 색상 구하고 비교해서 클릭 이벤트 하기

모니터에 특정 pixel에 색상을 확인하고 

설정해 놓은 색이 나오면 

색을 인식하여 클릭 이벤트가 동작하는 예제입니다.


알아야 하는 내용

1. 특정 pixel 에 좌표를 알아야 한다. 

2. 특정 pixel 의 색상을 알아야 한다.

3. 마우스 click  event 가 발생해야 한다.

4. 주기적으로 특정 좌표의 색을 확인할수 있어야 한다.


위의 기능을 하나씩 확인해 보도록 하겠습니다.



설치해야 하는 package 는 

Pillow

pyautogui 

2가지 입니다.

https://pyautogui.readthedocs.io/en/latest/

https://pillow.readthedocs.io/en/stable/installation.html


실행 소스는 아래와 같다.

import pyautogui 

# 현재 스크린의 사이즈를 확인한다.
screenWidth, screenHeight = pyautogui.size() 

print(screenWidth,screenHeight)

# 현재 스크린을 저장한다.
im = pyautogui.screenshot()

# 특정 영을만 저장할수도 있다.
#im = pyautogui.screenshot(region=(0,0, 300, 400))


# 현재 마우스의 좌표를 구한다.
cmpos = pyautogui.position()

# 현재 좌표의 RGB 값을 구한다.
rgb = im.getpixel(cmpos)

# 무슨 색인지 출력한다.
print(rgb)

# 마우스를 150,150 좌표로 이동한다.
pyautogui.moveTo(150, 150)

# 현재 좌표를 구한다.
cmpos = pyautogui.position()

# 현재 좌표의 RGB 값을 구한다.
rgb = im.getpixel(cmpos)

print(rgb)

# 색상을 비교해서 동을하면 click 한다.
if rgb == (0,0,0):
    
    print('hello')
    pyautogui.click()
#    pyautogui.doubleClick() 

실행하면 

좌표 150,150 으로 이동하여 색상이 RGB(0,0,0) 이면 click 을 한다.


그럼 이걸 함수로 만들어서 실행하도록 해 보겠다.


import pyautogui 

def functionA():
    # 현재 스크린의 사이즈를 확인한다.
    screenWidth, screenHeight = pyautogui.size() 

    print(screenWidth,screenHeight)

    # 현재 스크린을 저장한다.
    im = pyautogui.screenshot()

    # 특정 영을만 저장할수도 있다.
    #im = pyautogui.screenshot(region=(0,0, 300, 400))


    # 현재 마우스의 좌표를 구한다.
    cmpos = pyautogui.position()

    # 현재 좌표의 RGB 값을 구한다.
    rgb = im.getpixel(cmpos)

    # 무슨 색인지 출력한다.
    print(rgb)

    # 마우스를 150,150 좌표로 이동한다.
    pyautogui.moveTo(150, 150)

    # 현재 좌표를 구한다.
    cmpos = pyautogui.position()

    # 현재 좌표의 RGB 값을 구한다.
    rgb = im.getpixel(cmpos)

    print(rgb)

    # 색상을 비교해서 동을하면 click 한다.
    if rgb == (0,0,0):
        
        print('hello')
        pyautogui.click()
    #    pyautogui.doubleClick() 

functionA()


소스는 동일하다.


단지 변경된 내용은 

def functionA():

함수를 선언하고


함수를 호출해서 실행한 것 뿐이다.




그럼 함수를 하나 더 만들어 보겠다.

내용은 1초에 한번씩 hello 를 출력하고 10번 출력하면 종료되도록


import pyautogui 
from time import sleep

def functionB():
    i = 1
    while i < 10: 
        sleep(1)
        print('1 second after hello')
        i += 1
        



실행하면 1초에 한번씩 1 second after hello 가 출력된다.


그럼 여기다 먼저 만들어 놓은 funcationA를 호출해 보도록 하겠다.

import pyautogui 
from time import sleep

def functionB():
    i = 1
    while i < 10: 
        sleep(1)
        print('1 second after hello')
        i += 1
        functionA()



def functionA():
    # 현재 스크린의 사이즈를 확인한다.
    screenWidth, screenHeight = pyautogui.size() 

    print(screenWidth,screenHeight)

    # 현재 스크린을 저장한다.
    im = pyautogui.screenshot()

    # 특정 영을만 저장할수도 있다.
    #im = pyautogui.screenshot(region=(0,0, 300, 400))


    # 현재 마우스의 좌표를 구한다.
    cmpos = pyautogui.position()

    # 현재 좌표의 RGB 값을 구한다.
    rgb = im.getpixel(cmpos)

    # 무슨 색인지 출력한다.
    print(rgb)

    # 마우스를 150,150 좌표로 이동한다.
    pyautogui.moveTo(150, 150)

    # 현재 좌표를 구한다.
    cmpos = pyautogui.position()

    # 현재 좌표의 RGB 값을 구한다.
    rgb = im.getpixel(cmpos)

    print(rgb)

    # 색상을 비교해서 동을하면 click 한다.
    if rgb == (0,0,0):
        
        print('hello')
        # pyautogui.click()
    #    pyautogui.doubleClick() 


functionB()


그럼 1초에 한번씩 functionA가 실행된다.


functionA의 내용은

현재 좌표에 색상을 비교해서 클릭하는 기능을 한다.


functionB는 단순히 functionA를 1초에 한번씩 호출하는 기능을 한다.


이렇게 구성하면 문의하신 내용이 동작할 것입니다.


여기서 알아야 하는 내용은 

함수를 만들어 사용하는 방법과

sleep 함수 사용법입니다.


해당 소스는 github 에 올려 놓았습니다.

https://github.com/wonsolution/macro06/blob/main/macro10.py











댓글

이 블로그의 인기 게시물

mount 명령 ( 읽기 권한만 있는놈 쓰기 권한 주기 )

c# mqtt client example

비글본 블랙 고정 아이피 설정