사용 언어 : 파이썬 with openCV
코드를 배포할 생각으로 만든 프로젝트인데
코드는 아쉽게도 날아가버렸습니다ㅠㅠㅠㅠㅠㅠㅠㅠㅠ
영상에서 초록색 사각형 위에 있는 label은 a, b 두가지인데, a는 큰 선인장, b는 작은 선인장으로 파악했다는 의미입니다
(영상이 화면 녹화가 아니고 카메라로 찍은 이유는 녹화와 저 프로그램을 동시에 돌리니까 살짝 렉이 걸려서
점프 속도가 늦어지기 때문입니다, 양해 부탁드립니다)
작동 원리
1. pyautogui로 공룡 게임 부분의 스크린샷을 찍는다
- 이미지를 흑백으로 변환해서 연산속도를 증가시킨다
2. openCV2의 matchTemplate을 이용해서 선인장의 위치를 파악한다
3. 파악한 위치와 공룡의 위치를 비교해서 어느 정도 가까워지면 pyautogui.hotkey("space")를 실행해서 점프한다
4. 위 과정을 반복한다
나중에는 익룡도 나오고, 익룡은 나는 높이도 다르기 때문에 나중에 하려고 파일을 닫다가 코드가,,,그만,,,,날아가버렸습니다
그래서 익룡이 나오기 시작하면 더이상 진행할 수 없습니다. 영상에서도 익룡은 감지하지 못하는 것을 알 수 있습니다.
이런 식으로 실행해 봤을 때 제 컴퓨터(i5-10th)에선 초당 10번의 연산속도를 보여줬습니다
이후 pyautogui의 스크린샷이 느리다는 것을 알고,
mss.grab()을 사용해봤더니 초당 20번 이상의 연산속도를 보여줬습니다
또, 나중에 알게 되었지만 matchtemplate은 정확도도 return해줍니다
그래서 정확도가 어느정도 이상일때만 코드가 실행되게 해서 점프 정확도를 높이는 방법도 있겠습니다
위 영상은 이걸 모르고 작성했기 때문에 공룡도 장애물로 파악하는 모습입니다
이번 기회로 알게 된 사실
openCV는 pyautoui의 locateCenterOnScreen()보다 훠어어얼신 빠르다
mss.grab()은 pyautogui.screenshot()보다 약 2배 정도 빠르다
앞으로 매크로 프로그램을 만들 땐 openCV와 mss를 사용해야겠다
'코딩 > Python' 카테고리의 다른 글
파이썬으로 slack 봇 만들기(pt.2) (0) | 2021.01.24 |
---|---|
파이썬으로 slack 봇 만들기(pt.1) (0) | 2021.01.18 |
flask로 get 요청 처리하기 (0) | 2021.01.14 |
파이썬 flask 기초 (0) | 2020.12.24 |
파이썬 RSA 암호화 (0) | 2020.11.18 |