반응형
    
    
    
  2019/01/26 - [프로그래밍/딥러닝] - 텐서플로우, 케라스로 크롬 공룡게임 AI 만들기 #1 - 템플릿 매칭
이전 글에 이어서 이번에는 텐서플로우로 학습할 데이터를 생성하는 과정을 소개한다.
make_data.py
import numpy as np
from PIL import ImageGrab
import cv2
import cv2 as cv
import keyboard
template1 = cv.imread('images/cactus1.png', 0)
template2 = cv.imread('images/cactus2.png', 0)
template3 = cv.imread('images/bird1.png', 0)
template4 = cv.imread('images/bird2.png', 0)
w1, h1 = template1.shape[::-1]
w2, h2 = template1.shape[::-1]
w3, h3 = template1.shape[::-1]
w4, h4 = template1.shape[::-1]
def process_img(original_image):
        img_gray = cv2.cvtColor(original_image, cv2.COLOR_BGR2GRAY)
        return img_gray
f = open("dino.txt", 'w')
while(True):
        data = [0, 0, 0, 0, 0, 0, 0]
        screen =  np.array(ImageGrab.grab(bbox=(160, 80, 800, 300)))
        img_gray = process_img(screen)
        res1 = cv.matchTemplate(img_gray, template1, cv.TM_CCOEFF_NORMED)
        res2 = cv.matchTemplate(img_gray, template2, cv.TM_CCOEFF_NORMED)
        res3 = cv.matchTemplate(img_gray, template3, cv.TM_CCOEFF_NORMED)
        res4 = cv.matchTemplate(img_gray, template4, cv.TM_CCOEFF_NORMED)
        threshold = 0.8
        loc1 = np.where(res1 >= threshold)
        loc2 = np.where(res2 >= threshold)
        loc3 = np.where(res3 >= threshold)
        loc4 = np.where(res4 >= threshold)
        if keyboard.is_pressed('space'):
                data[6] = 1
        for pt in zip(*loc1[::-1]):
                cv.rectangle(img_gray, pt, (pt[0] + w1, pt[1] + h1), (0, 0, 255), 2)
                data[0] = pt[0]
                break
        for pt in zip(*loc2[::-1]):
                cv.rectangle(img_gray, pt, (pt[0] + w2, pt[1] + h2), (0, 0, 255), 2)
                data[1] = pt[0]
                break
        for pt in zip(*loc3[::-1]):
                cv.rectangle(img_gray, pt, (pt[0] + w3, pt[1] + h3), (0, 0, 255), 2)
                data[2] = pt[0]
                data[3] = pt[1]
                break
        for pt in zip(*loc4[::-1]):
                cv.rectangle(img_gray, pt, (pt[0] + w4, pt[1] + h4), (0, 0, 255), 2)
                data[4] = pt[0]
                data[5] = pt[1]
                break
        print(data)
        write = "%d,%d,%d,%d,%d,%d,%d\n" % (data[0], data[1], data[2], data[3], data[4], data[5], data[6])
        f.write(write)
        cv2.imshow('window', img_gray)
        #cv2.imshow('window2', cv2.cvtColor(screen, cv2.COLOR_BGR2RGB))
        if cv2.waitKey(25) & 0xFF == ord('q'):
            cv2.destroyAllWindows()
            f.close()
            break
이전글의 유튜브 영상처럼 크롬 공룡게임을 화면 반만큼 띄워두고 실행 시키면 된다. (컴퓨터에 설정된 해상도에 따라 약간의 위치 조정이 필요할 수 도있다.) 실행 후 장애물에 맞추어 스페이스바를 누르면서 게임을 진행하면 된다. 이때 게임은 낮과 밤이 교차하는 약 700~800점 근방까지만 실행하면 된다. 이제 q를 눌러 프로그램을 종료하면 dino.txt라는 파일로 학습 데이터가 저장될 것이다.
아래는 파일의 일부분이다.
반응형
    
    
    
  | 0,0,0,0,0,0,0 0,0,0,0,0,0,0 559,0,0,0,0,0,0 515,0,0,0,0,0,0 471,0,0,0,0,0,0 425,0,0,0,0,0,0 380,0,0,0,0,0,0 335,0,0,0,0,0,0 290,0,0,0,0,0,0 244,0,0,0,0,0,0 199,0,0,0,0,0,0 155,0,0,0,0,0,1 111,0,0,0,0,0,1 66,0,0,0,0,0,0 0,0,0,0,0,0,0 0,0,0,0,0,0,0 0,0,0,0,0,0,0 0,0,0,0,563,134,0 0,0,511,131,0,0,0 0,0,461,131,0,0,0 0,0,0,0,412,134,0 0,0,0,0,362,134,0 0,0,311,139,0,0,0 0,0,252,139,0,0,0 0,0,0,0,204,142,1 0,0,0,0,154,142,1 0,0,114,139,0,0,1 0,0,64,139,0,0,0 0,0,0,0,4,142,0 0,0,0,0,0,0,0 0,595,0,0,0,0,0 0,0,0,0,0,0,0 0,0,0,0,0,0,0 0,0,0,0,0,0,0 0,0,0,0,0,0,0 0,0,0,0,0,0,0  | 
이 파일의 이름을 변경해 dino.csv로 확장자 명을 바꾸어 같은 위치에 저장하면 된다.
반응형
    
    
    
  '머신러닝, 딥러닝' 카테고리의 다른 글
| 텐서플로우, 케라스로 크롬 공룡게임 AI 만들기 #4 - 모델 실행 (0) | 2019.02.07 | 
|---|---|
| 텐서플로우, 케라스로 크롬 공룡게임 AI 만들기 #3 - 데이터 학습 및 모델 만들기 (0) | 2019.01.30 | 
| 텐서플로우, 케라스로 크롬 공룡게임 AI 만들기 #1 - 템플릿 매칭 (6) | 2019.01.26 | 
| 윈도우 환경에서 YOLO로 실시간 객체탐지 (11) | 2019.01.25 | 
| 텐서플로우와 케라스로 딥러닝 환경 구축하기 (0) | 2019.01.22 |