728x90
예제
지난 포스팅에 이어서 매칭된 디노의 width 와 장애물의 width 를 비교해서 간단하게 점프하게 구현해보았습니다.
import os
import cv2
import numpy as np
import pyautogui
tpl = cv2.imread(os.path.join('img', 'dino.png'), cv2.IMREAD_GRAYSCALE)
th, tw = tpl.shape[:2]
ob_names = ['ob1', 'ob2']
ob_list = { k: cv2.imread(os.path.join('img', k + '.png'), cv2.IMREAD_GRAYSCALE) for k in ob_names}
cv2.namedWindow('result');
while True:
screen = pyautogui.screenshot(region=(1800, 50, 700, 500))
src = np.array(screen)
src = cv2.cvtColor(src, cv2.COLOR_RGB2GRAY)
res = cv2.matchTemplate(src, tpl, cv2.TM_CCOEFF_NORMED)
_, _, _, maxloc = cv2.minMaxLoc(res)
dino_right_x = maxloc[0] + tw
dst = cv2.cvtColor(src, cv2.COLOR_GRAY2BGR)
cv2.rectangle(dst, maxloc, (maxloc[0] + tw, maxloc[1] + th), (0, 255, 0), 3)
for name, ob_tpl in ob_list.items():
ob_th, ob_tw = ob_tpl.shape[:2]
res = cv2.matchTemplate(src, ob_tpl, cv2.TM_CCOEFF_NORMED)
_, _, _, maxloc = cv2.minMaxLoc(res)
cv2.rectangle(dst, maxloc, (maxloc[0] + ob_tw, maxloc[1] + ob_th), (0, 255, 0), 3)
if maxloc[0] - dino_right_x <= 150:
pyautogui.press('space')
cv2.imshow('result', dst)
if cv2.waitKey(1) == 27:
break
cv2.destroyAllWindows()
디노의 오른쪽 x좌표
dino_right_x = maxloc[0] + tw
장애물들을 종류별로 테스트해보았으나, 매칭 오류율이 높아서 한 개로만 해도 충분할 것 같습니다.
단순히 디노의 오른쪽 x좌표와 장애물의 시작 x좌표를 비교해 어느정도 가까울 경우 점프를 합니다.
ob_names = ['ob1', 'ob2']
ob_list = { k: cv2.imread(os.path.join('img', k + '.png'), cv2.IMREAD_GRAYSCALE) for k in ob_names}
....
for name, ob_tpl in ob_list.items():
ob_th, ob_tw = ob_tpl.shape[:2]
res = cv2.matchTemplate(src, ob_tpl, cv2.TM_CCOEFF_NORMED)
_, _, _, maxloc = cv2.minMaxLoc(res)
cv2.rectangle(dst, maxloc, (maxloc[0] + ob_tw, maxloc[1] + ob_th), (0, 255, 0), 3)
if maxloc[0] - dino_right_x <= 150:
pyautogui.press('space')
점점 스피드가 빨라지고 새같은 공중 장애물도 있어서 한계가 있습니다.
강화학습을 주제로도 활용할 수 있을지..
'OpenCV' 카테고리의 다른 글
파이썬 OpenCV HOG : 보행자 검출하기 (0) | 2020.08.06 |
---|---|
파이썬 OpenCV 하르 분류기(Haar Cascade Classifier) : 얼굴 검출하기 (0) | 2020.08.06 |
파이썬 OpenCV 템플릿 매칭 -2 : 크롬 공룡게임 실시간 매칭하기 (2) | 2020.08.06 |
파이썬 OpenCV 템플릿 매칭 -1 : 크롬 공룡게임 (0) | 2020.08.06 |
파이썬 OpenCV 도형 검출하기 (4) | 2020.08.05 |