기본 과제 목표 : 파이썬 매크로를 활용하여 미로게임 자동화 해결하기
기본 조건 : pyautogui 모듈을 활용하여 미로게임을 자동화 수행 프로그램 작성
사전학습 리뷰 : 파이썬 매크로 소개와 기본 프로젝트 수행
[모듈 2-12] 파이썬 매크로 기본 함수와 다양한 활용 예제 코드
1. 파이썬 매크로 기본 함수 배우기 - 메모장에 마음대로 낙서하기 ### intro. ## Date : 2020. 11. 26 ## Editer : 성원경 선생님 / 경기기계공업고등학교 ### 1. 파이썬 기본 매크로 함수 사용하기 import pyautogu
pythonkorea.com
미로게임 출처
1) 웹기반 게임 사용
https://ko.y8.com/games/maze_escape
게임 Maze - 온라인 플레이: Y8.com
Y8.com에서 무료 게임 Maze(을)를 플레이하십시오! Maze 을(를) 플레이하려면 Click now를 클릭하십시오! Maze(와)과 비슷한 최고의 게임들을 즐기십시오.
ko.y8.com
2) 깃허브 오픈소스
https://github.com/StanislavPetrovV/Maze_Game
GitHub - StanislavPetrovV/Maze_Game: Maze Game using Pygame
Maze Game using Pygame. Contribute to StanislavPetrovV/Maze_Game development by creating an account on GitHub.
github.com
샘플 코드
from pyautogui import *
from time import sleep
delay = 0.5
hotkey("alt", "tab")
sleep(delay)
press('up')
sleep(delay)
press('left')
sleep(delay)
press('up')
sleep(delay)
press('left')
sleep(delay)
press('right')
sleep(delay)
press('up')
sleep(delay)
press('right')
평가기준
1) 코드의 확장성 : 다른 미로게임이나 다른 종류의 게임에서도 코드가 최소한 수정으로 동작 되는가?
2) 소프트웨어의 독창성 : 소프트웨어 구동, UI 등에 차별점을 두었는가?
3) 문제해결과정의 기록 : 소프트웨어를 제작하면서 발생한 문제 해결과정을 잘 기록하고 이에 대한 다양한 해결 방법을 접근 했는가?
4) 다양한 협업 : 외부 오픈소스, ChatGPT, API, 동료와의 협업 등 외부의 도움을 받아 자신의 소프트웨어 제작에 질적 성장을 이루어 냈는가?
5) 소프트웨어의 확장성 : 해당 프로젝트를 배포 할 수 있는 플랫폼 ( exe 파일 또는 웹호스팅 등)에 대한 고민을 하였는가? 또는 해당 프로젝트를 확장시켜 실제 사업화 할 수 있는 아이디어가 있는가?
과제 제출 방법 : 문제해결 과정과 결과를 담은 OPP(Online project Portfolio)
예시 : 노션 & 유튜브(2022년 경기기계공업고 항공드론 수업 예시)
https://organic-fontina-944.notion.site/2-d0cb94a3953a4d52bb6f763ec0723c14
2학년 항공드론 [뒷분반]
[ 1학기 ]
organic-fontina-944.notion.site
예시 : 구글 사이트 도구(2022년 경기기계공업고 2학년 신00 학생 제출 자료)
https://sites.google.com/sonline20.sen.go.kr/pgm/main?authuser=0
PGM
PGM
sites.google.com
예시 : 캔바(음성인식 로봇팔 제작과정 자료)
원한다면 심화 & 도전 포인트 : 오픈소스 인공지능 모델 + 파이썬 매크로 + 게임
ex) 인공지능 오픈소스 모델 미디어파이프
https://mediapipe-studio.webapps.google.com/home
ex) 미디어파이프 오픈소스 모델 활용 사례 깃허브
https://github.com/AslanDevbrat/gesture_VidGame
GitHub - AslanDevbrat/gesture_VidGame: Gesture-controlled Video Game. Just swing your finger and play the game without touching
Gesture-controlled Video Game. Just swing your finger and play the game without touching your PC - GitHub - AslanDevbrat/gesture_VidGame: Gesture-controlled Video Game. Just swing your finger and p...
github.com
ex) 실제 게임에 연결 사례
1) 크롬 공룡 게임과 연결사례
2) 슈퍼마리오 게임과 연결 사례
인공지능 제어 샘플코드
import cv2
import mediapipe
import time
import pyautogui
import threading
ctime = 0
ptime = 0
last_press_time = 0
delay_time = 0.05 # Delay time in seconds
cap = cv2.VideoCapture(0)
def handle_keys(fingercount):
global last_press_time # 이 부분을 추가
if (fingercount == 1 or fingercount == 2)and time.time() - last_press_time > delay_time:
pyautogui.press('space')
last_press_time = time.time() # Record the time of the press
if fingercount == 5:
pyautogui.keyDown('down')
else:
pyautogui.keyUp('down')
medhands = mediapipe.solutions.hands
hands = medhands.Hands(max_num_hands=1, min_detection_confidence=0.7)
draw = mediapipe.solutions.drawing_utils
while True:
success, img = cap.read()
img = cv2.flip(img, 1)
imgrgb = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
res = hands.process(imgrgb)
lmlist = []
tipids = [4, 8, 12, 16, 20]
cv2.rectangle(img, (20, 350), (90, 440), (0, 255, 204), cv2.FILLED)
cv2.rectangle(img, (20, 350), (90, 440), (0, 0, 0), 5)
if res.multi_hand_landmarks:
for handlms in res.multi_hand_landmarks:
for id, lm in enumerate(handlms.landmark):
h, w, c = img.shape
cx, cy = int(lm.x * w), int(lm.y * h)
lmlist.append([id, cx, cy])
if len(lmlist) != 0 and len(lmlist) == 21:
fingerlist = []
# Thumb and dealing with flipping of hands
if lmlist[12][1] > lmlist[20][1]:
if lmlist[tipids[0]][1] > lmlist[tipids[0] - 1][1]:
fingerlist.append(1)
else:
fingerlist.append(0)
else:
if lmlist[tipids[0]][1] < lmlist[tipids[0] - 1][1]:
fingerlist.append(1)
else:
fingerlist.append(0)
# Others
for id in range(1, 5):
if lmlist[tipids[id]][2] < lmlist[tipids[id] - 2][2]:
fingerlist.append(1)
else:
fingerlist.append(0)
if len(fingerlist) != 0:
fingercount = fingerlist.count(1)
threading.Thread(target=handle_keys, args=(fingercount,)).start()
# If only one finger is detected and enough time has passed, press the space bar
# if fingercount == 5 :
# pyautogui.keyDown('down')
# else : pyautogui.keyUp( 'down')
cv2.putText(img, str(fingercount), (25, 430), cv2.FONT_HERSHEY_PLAIN, 6, (0, 0, 0), 5)
# Change color of points and lines
draw.draw_landmarks(img, handlms, medhands.HAND_CONNECTIONS,
draw.DrawingSpec(color=(0, 255, 204), thickness=2, circle_radius=2),
draw.DrawingSpec(color=(0, 0, 0), thickness=2, circle_radius=3))
# FPS counter
ctime = time.time()
fps = 1 / (ctime - ptime)
ptime = ctime
# FPS display
cv2.putText(img, f'FPS:{str(int(fps))}', (0, 12), cv2.FONT_HERSHEY_PLAIN, 1, (0, 255, 0), 1)
cv2.imshow("hand gestures", img)
# Press q to quit
if cv2.waitKey(1) == ord('q'):
break
cv2.destroyAllWindows()
GPT와 협업은 이제 선택이 아닌 필수...
https://chat.openai.com/share/1e52baef-943c-4b14-8311-7ed6494173fe
ChatGPT
A conversational AI system that listens, learns, and challenges
chat.openai.com
@WONKING2023
'Python > 파이썬 프로젝트' 카테고리의 다른 글
미디어파이프를 활용한 인공지능프로젝트 (0) | 2023.10.16 |
---|---|
인공지능 오픈소스 모델 소스 원천과 활용 방안에 대한 정리 (1) | 2023.07.20 |
페어코딩으로 짝꿍과 함께 파이썬 게임제작 (feat. Live Share, git) (0) | 2023.07.19 |
VSCode(Visual Studio Code) 사용법 - 파이썬/깃허브/아나콘다 연동 (0) | 2023.07.18 |
파이썬 API 활용의 기초 2 - 나이스 OPEN API 활용 (0) | 2023.07.13 |