본문 바로가기
소프트웨어/파이썬

[파이썬] 윈도우 화면 선택영역 모니터링

by 만들오 2021. 1. 23.

안녕하세요? 만들오 입니다.

 

오늘은 윈도우의 특정 영역을 선택하여 opencv로 모니터링 하는 프로그램 기록을 남깁니다.

 

from PIL import ImageGrab
import cv2
import keyboard
import mouse
import numpy as np


def set_roi():
    global ROI_SET, x1, y1, x2, y2
    ROI_SET = False
    print("Select your ROI using mouse drag.")
    while(mouse.is_pressed() == False):
        x1, y1 = mouse.get_position()
        while(mouse.is_pressed() == True):
            x2, y2 = mouse.get_position()
            while(mouse.is_pressed() == False):
                print("Your ROI : {0}, {1}, {2}, {3}".format(x1, y1, x2, y2))
                ROI_SET = True
                return

keyboard.add_hotkey("ctrl+1", lambda: set_roi())

ROI_SET = False
x1, y1, x2, y2 = 0, 0, 0, 0
while True:
    if ROI_SET == True:
        image = cv2.cvtColor(np.array(ImageGrab.grab(bbox=(x1, y1, x2, y2))), cv2.COLOR_BGR2RGB)
        cv2.imshow("image", image)
        key = cv2.waitKey(100)
        if key == ord("q"):
            print("Quit")
            break

cv2.destroyAllWindows()

 

코드의 흐름은 다음과 같습니다.

1. 키보드의 ctrl + 1 버튼을 누르면 set_roi 함수를 호출합니다.

2. 마우스 down상태에서 x1, y1의 값을 기록하고, 마우스 up 상태에서 x2, y2의 값을 기록합니다. 메인루프에서 사용될 ROI_SET 변수를 True로 변환합니다.

3. 메인루프(while)단에서 지정된 영역(x1, y1, x2, y2)을 캡쳐하고 이를 opencv 윈도우를 통해 보여줍니다.

4. 종료를 위해서는 opencv 윈도우 활성화 상태에서 q 버튼을 누릅니다.

 

* 주의점 : 영역을 지정할 때 좌측상단에서 우측하단으로 드래그 해야합니다. 순서가 바뀌면 에러가 나게 됩니다.

 

예전에 Autohotkey를 이용해 X니지M 게임 자동귀환 프로그램을 만들었었는데 아직까지도 요청하시는 분들이 많아서 이번에는 python을 이용해 제작해 보려고 시작하게 되었습니다. 당시에는 단순히 화면의 컬러값을 읽어서 처리했었는데, python을 적용하는 만큼 tensorflow를 이용한 머신러닝도 가능할 것으로 생각됩니다.

감사합니다.

 

* 이 글은 티스토리 카카오계정 연동정책으로 인해 이전 블로그(오코취) 글을 옮겨왔습니다.

[].

728x90

댓글