파이썬에서 타이핑 게임을 플레이 해 보았습니다.

개요



pytesseract에 의한 광학 문자 인식과 PyAutoGUI에 의한 자동 키보드 입력을 이용하여 영어 단어 타이핑 게임을 플레이 해 보았습니다.

Typing Test English : htps : // 10 st st 푹신 rs. 코 m / ty 핑 g st / 엔 g sh

환경



OS: Windows10 64bit
파이썬 버전 : 3.5.3

게임 개요





빨간색 테두리로 둘러싸인 영역에 영어 단어가 표시되므로, 그것을 오로지 입력 폼에 넣어 가서 1분간에 몇 단어 입력할 수 있었는지를 경쟁하는 간단한 게임.

사용한 주요 라이브러리



selenium, PyAutoGUI, pytesseract, Pillow

프로그램 동작



main.py
# -*- coding: utf-8 -*-

from PIL import Image
from PIL import ImageGrab
import pytesseract
import numpy as np
import matplotlib.pyplot as plt
import pyautogui as pyag
import os
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
import time
import cv2

os.chdir(os.path.dirname(os.path.abspath(__file__)))
pytesseract.pytesseract.tesseract_cmd = 'C:/Program Files (x86)/Tesseract-OCR/tesseract'

fig, ax = plt.subplots()
mngr = plt.get_current_fig_manager()
mngr.window.setGeometry(10,800,1300,250)
plt.pause(0.001)

url = "https://10fastfingers.com/typing-test/english"
chrome_driver_path = "chromedriver.exe"
chrome_options = Options()
chrome_options.add_argument("--window-position=0,0");
chrome_options.add_argument("--window-size=1000,600");
browser = webdriver.Chrome(chrome_driver_path, chrome_options=chrome_options)

print("Loading...")
browser.get(url)
time.sleep(3)

while(True):
    print("-----------------------------------------")
    print("Extracted words")
    print("-----------------------------------------")

    img = ImageGrab.grab(bbox=(120,308,1213,430))

    ax.imshow(img)
    plt.pause(0.001)

    img =  np.array(img)
    img = cv2.cvtColor(img, cv2.COLOR_RGB2GRAY)
    img = cv2.threshold(img, 220, 255, cv2.THRESH_BINARY)[1]
    img = Image.fromarray(img)

    words  = pytesseract.image_to_string(img).split(" ")

    for word1 in words:
        if ("\n\n" in word1):
            word1 = word1.split("\n\n")
        elif ("\n" in word1):            
            word1 = word1.split("\n")
        else:
            word1 = [word1]

        for word2 in word1:
            print(word2)
            pyag.typewrite(word2.replace(" ", "") + " ")
            time.sleep(0.2)

    if len(words) < 10:
        print("Done!")
        break

time.sleep(3)

browser.quit()



  • Selenium 에 Typing Test English 에 액세스
  • Pillow에서 빨간색 프레임의 영역을 캡처
  • pytesseract로 캡처 한 이미지에서 영어 단어 추출
  • PyAutoGUI로 추출한 영어 단어를 자동 입력

  • ↓이런 느낌으로 동작합니다


    결론



    pytesseract에 의한 광학 문자 인식과 PyAutoGUI에 의한 자동 키보드 입력을 조합함으로써 브라우저 자동화의 폭이 크게 넓어진다.

    좋은 웹페이지 즐겨찾기