NGMsoftware

NGMsoftware
로그인 회원가입
  • 매뉴얼
  • 학습
  • 매뉴얼

    학습


    기타 파이썬으로 이미지 매크로 만들기. (Creating an image macro in Python.)

    페이지 정보

    본문

    안녕하세요. 엔지엠소프트웨어입니다. 새해가 밝았네요^^; 그동안, 보안이나 우회 관련 의뢰로 끝이 보이지 않는 일을 해왔습니다. 해외에서 프로그램도 공수해오고, 여러 커뮤니티도 들락날락하면서 테스트하고 검증하면서 힘든 1년을 보냈네요. 그러나~ 능력 부족으로 모두가 만족할만한 성과를 낼수는 없었습니다ㅠㅠ; 새해에는 여러가지 업무와 기능들을 포기한 대신 많은 시간과 여유를 얻을 수 있었습니다. 그래서, 새로운 사업 모델인 아이템 거래 솔루션을 만들기 위해 파이썬을 공부 중입니다. 일단, 그동안 쌓아온 노하우가 매크로에 있으므로 파이썬 매크로 만들기를 진행하면서 학습도 병행해야 할거 같아요^^

    22l1e1K.png

     

     

    이전 글에서 파이썬으로 마우스를 제어하는 방법에 대해 간단하게 알아봤습니다. 오늘은 모니터 화면에서 원하는 이미지를 찾아 클릭하는 방법에 대해 알아볼께요. 이미 한번 해봤던 내용이라 크게 어렵지는 않겠지만, 그래도 이전 내용들을 미리 학습해보는게 좋겠습니다. 파이썬 개발 환경을 갖춰야 이 내용도 따라할 수 있기 때문이죠^^; 최대한 복잡한 설명은 배제하고, 동작할 수 있는 요점만 설명하면서 진행하도록 하겠습니다.

    [ 파이썬 매크로 만들기 - 1부, 2부, 3부 ]

     

    이미지 서치(엔지엠에서는 이미지 매치)와 마우스 클릭을 위한 패키지들을 설치 해줍니다. pyautogui는 파이썬 스크립트가 마우스와 키보드를 제어하여 다른 프로그램과 상호 작용할 수 있게 해줍니다. 장점은~ Windows, MacOS, Linux에서 작동한다는 점입니다. 리눅스는 GUI를 지원하는 버전에서만 되겠죠^^;

    pip install pyautogui

     

    이미지 서치에는 OpenCV가 필요합니다. 아래와 같이 패키지를 설치 해주세요.

    pip install opencv-python

     

    마지막으로~ 파이썬에서 이미지를 처리해주는 필로우를 설치하세요.

    pip install pillow

     

    파이썬은 스크립트 언어입니다. 보통 많이 알고 있는 자바스크립트와 같은 스크립트 언어들은 한줄씩 인터프리터가 해석하면서 실행됩니다. 그렇다보니 이미지를 바이트로 처리하는데 문제가 있습니다. 이런 문제를 해결해주는 패키지가 필로우입니다. 스크립트 언어들은 컴파일 언어에 비해 속도가 느릴수밖에 없습니다. 이제 찾을 이미지를 만들어야겠죠? 찾고자 하는 이미지를 source라고 명명하고, 소스 이미지를 찾을 전체 화면을 target이라고 부르겠습니다. 엔지엠 에디터를 실행한 후 아래와 같이 소스 이미지를 바탕화면에 저장합니다.

    ※ 파일명을 source.png 로 변경하세요.

    fqB4YOB.gif

     

     

    아래 코드를 복사하여 붙여넣기 하고 Ctrl+F5를 눌러서 실행해보세요.

    import pyautogui
    import time
    
    p_list = pyautogui.locateAllOnScreen("C:\\Users\\<사용자>\\Desktop\\source.png")
    p_list = list(p_list)
    print(p_list)

     

    좌표 값이 표시됩니다.

    PS C:\Users\ngmas\Desktop>  c:; cd 'c:\Users\ngmas\Desktop'; & 'C:\Users\ngmas\AppData\Local\Programs\Python\Python39\python.exe' 'c:\Users\ngmas\.vscode\extensions\ms-python.python-2020.12.424452561\pythonFiles\lib\python\debugpy\launcher' '57797' '--' 'c:\Users\ngmas\Desktop\image_search.py' 
    [Box(left=723, top=330, width=123, height=107)]
    PS C:\Users\ngmas\Desktop> 

     

    엔지엠 에디터에서도 이미지 매치를 해보면 동일한 결과를 확인할 수 있습니다.

    2l9kfqQ.png

     

     

    이제 찾은 이미지를 클릭하는 코드를 작성합니다.

    import pyautogui
    import time
    
    p_list = pyautogui.locateAllOnScreen("C:\\Users\\<사용자>\\Desktop\\source.png")
    p_list = list(p_list)
    p_center = pyautogui.center(p_list[0])
    pyautogui.click(p_center)

     

    Ctrl+F5를 눌러서 실행 해보세요.

    OZ0vw79.gif

     

     

    여러분들도 잘 동작하죠? 위와 같은 방식으로 이미지를 찾아서 클릭하는걸 반복하면 원하는 자동화를 공짜로 쉽게 얻을 수 있게될겁니다. 생각보다 그렇게 어렵지는 않거든요~ 매크로를 만드는게 어려운건 아닙니다. 처음부터 끝까지 많은 로직들의 이미지와 좌표를 확인하고 클릭하거나 키보드가 동작할 수 있도록 코딩하는게 상당한 노가다성 작업입니다. 기본적인 몇가지만 외워서 활용한다면 비싼돈주고 제작을 의뢰하지 않아도 됩니다. 아무튼~ 이렇게 해서 간단하게 파이썬으로 이미지 서치를 만들어봤습니다. 전체 소스는 첨부 파일을 받으세요^^

     

    개발자에게 후원하기

    MGtdv7r.png

     

    추천, 구독, 홍보 꼭~ 부탁드립니다.

    여러분의 후원이 빠른 귀농을 가능하게 해줍니다~ 답답한 도시를 벗어나 귀농하고 싶은 개발자~

    감사합니다~

    • 네이버 공유하기
    • 페이스북 공유하기
    • 트위터 공유하기
    • 카카오스토리 공유하기
    추천0 비추천0

    첨부파일

    댓글목록

    profile_image

    가즈아아아님의 댓글

    no_profile 가즈아아아 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 작성일 Date

    pyautogui 은 기계식 입력으로 들어가는건가요???

    겜메크로 돌릴라는데 기계식입력으로 인식되야한다고 해서요

    profile_image

    엔지엠소프트웨어님의 댓글

    엔지엠소프트웨어 쪽지보내기 메일보내기 홈페이지 자기소개 아이디로 검색 전체게시물 작성일 Date

    소프트웨어 입력입니다. 일부 게임에서는 계정 정지되니 주의해야 합니다.

    profile_image

    양재동테리님의 댓글

    no_profile 양재동테리 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 작성일 Date

    아래와 같은 오류가 발생합니다 ㅠ.ㅜ

    C:\Users\count\OneDrive\venv\Scripts\python.exe C:/Users/count/OneDrive/find_1.py
    Point(x=799, y=756)
    Point(x=843, y=775)
    Traceback (most recent call last):
      File "C:\Users\count\OneDrive\find_1.py", line 18, in <module>
        pag.screenshot('C:/find.png', region = region1)
      File "C:\Users\count\OneDrive\venv\lib\site-packages\pyscreeze\__init__.py", line 144, in wrapper
        raise PyScreezeException('The Pillow package is required to use this function.')
    pyscreeze.PyScreezeException: The Pillow package is required to use this function.

    Process finished with exit code 1

    profile_image

    엔지엠소프트웨어님의 댓글

    엔지엠소프트웨어 쪽지보내기 메일보내기 홈페이지 자기소개 아이디로 검색 전체게시물 작성일 Date

    에러 내용을 보면 The Pillow package is required to use this function. 이런 내용이 있네요.
    Pillow 패키지 리콰이어드(필요하다) to use this 펑션(이 펑션을 사용하려면)
    정리 해보면 스크린샷 명령을 사용하려면 pillow 패키지를 설치해야 한다는 의미인데요.
    아마도... 저 패키지 설치 하는 부분이 누락된게 아닌가 싶네요^^

    profile_image

    양재동테리님의 댓글

    no_profile 양재동테리 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 작성일 Date

    안녕하세요 파이썬 강좌 잘 보고 있습니다
    이미지 서치 할때 오토핫키에서는 그림속에서 글씨를 찾아서 클릭할때
    배경을 검정색으로 처리하고 글자만 남기면 투명하게 처리 된 것 처럼
    이미지를 찾아주는 TransBlack(?) 같은 기능이 있는데
    파이썬에서는 배경이 바뀌는 상황에서 글자만 클릭 하려면 어떻게 하는 것이 좋을 까요?

    profile_image

    엔지엠소프트웨어님의 댓글

    엔지엠소프트웨어 쪽지보내기 메일보내기 홈페이지 자기소개 아이디로 검색 전체게시물 작성일 Date

    메모리로 픽셀 정보를 불러와서 선택한 영역의 픽셀 값의 Alpha만 남기고 모두 지우면 됩니다.