Files
MineEVECraft/main.py

83 lines
2.0 KiB
Python

import logging
import numpy as np
import pygetwindow as gw
import pyautogui
from pytesseract import pytesseract
from pytesseract import Output
import cv2
win_name = "EVE - Nostrom Stone"
pytesseract.tesseract_cmd = "C:\\Program Files\\Tesseract-OCR\\tesseract.exe"
logging.basicConfig(
level=logging.INFO,
format="%(asctime)s - %(message)s",
datefmt="%d-%b-%y %H:%M:%S",
handlers=[logging.StreamHandler()],
)
def get_screenshot(save_result=False):
eve_window = gw.getWindowsWithTitle(win_name)[0]
eve_window.activate()
if not eve_window.isMaximized:
was_minimized = True
eve_window.restore()
eve_window = gw.getWindowsWithTitle(win_name)[0]
if save_result:
filepath = "images/screenshot.png"
else:
filepath = None
screenshot = pyautogui.screenshot(
filepath,
region=(
eve_window.box.left + 10,
eve_window.box.top,
eve_window.box.width - 20,
eve_window.box.height - 10,
),
)
if was_minimized:
eve_window.minimize()
logging.info("Скриншот получен")
return screenshot
def get_boxed(screenshot, save_result=False):
# img = cv2.imread("test.png") # from file
img = cv2.cvtColor(np.array(screenshot), cv2.COLOR_BGR2RGB)
raw_df = pytesseract.image_to_data(
img, lang="eng", output_type=Output.DATAFRAME
)
filtered_df = raw_df.loc[
(raw_df["level"] == 5) & (raw_df["text"].notnull())
][["left", "top", "width", "height", "text"]]
if save_result:
for r in filtered_df.itertuples():
(x, y, w, h) = (
r.left,
r.top,
r.width,
r.height,
)
cv2.rectangle(img, (x, y), (x + w, y + h), (0, 255, 0), 2)
cv2.imwrite("images/highlighted_screenshot.png", img)
logging.info("Боксы получены")
return filtered_df
screenshot = get_screenshot(True)
get_boxed(screenshot, True)