From 3674955d8e4b4660753da41ba0a59fb6ccd62782 Mon Sep 17 00:00:00 2001 From: Llloooggg Date: Sat, 11 Mar 2023 03:58:43 +0300 Subject: [PATCH] =?UTF-8?q?=D0=9F=D0=BE=D0=BB=D1=83=D1=87=D0=B5=D0=BD?= =?UTF-8?q?=D0=B8=D0=B5=20=D0=B1=D0=BE=D0=BA=D1=81=D0=BE=D0=B2=20=D0=B2=20?= =?UTF-8?q?=D0=B4=D0=B0=D1=82=D0=B0=D1=84=D1=80=D0=B5=D0=B9=D0=BC=D0=B0?= =?UTF-8?q?=D1=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- main.py | 121 ++++++++++++++++++++++++----------------------- requirements.txt | 5 ++ 2 files changed, 66 insertions(+), 60 deletions(-) diff --git a/main.py b/main.py index 5cdf044..8979190 100644 --- a/main.py +++ b/main.py @@ -1,5 +1,4 @@ import time -import math import logging import numpy as np @@ -7,6 +6,7 @@ import pygetwindow as gw import pyautogui import cv2 import easyocr +import pandas as pd win_name = "EVE - Nostrom Stone" @@ -18,38 +18,7 @@ logging.basicConfig( handlers=[logging.StreamHandler()], ) -save_result = True - - -def save_highlighted_screenshot(screenshot, boxes, filename): - new_image = screenshot.copy() - - for block in boxes["block_num"].unique(): - boxes_in_block = boxes.loc[boxes["block_num"] == block] - # Повторяемая генерация rgb-цвета для числа - col = ( - round(math.sin(0.024 * block * 255 / 3 + 0) * 127 + 128), - round(math.sin(0.024 * block * 255 / 3 + 2) * 127 + 128), - round(math.sin(0.024 * block * 255 / 3 + 4) * 127 + 128), - ) - for r in boxes_in_block.itertuples(): - (x, y, w, h) = ( - r.left, - r.top, - r.width, - r.height, - ) - cv2.rectangle(new_image, (x, y), (x + w, y + h), col, 2) - cv2.putText( - new_image, - f"'{r.text}' x:{r.left} y:{r.top} l:{r.line_num}", - (x, y - 10), - cv2.FONT_HERSHEY_SIMPLEX, - 0.4, - col, - 1, - ) - cv2.imwrite(f"images/{filename}.png", new_image) +debug = True def get_screenshot(): @@ -62,7 +31,7 @@ def get_screenshot(): eve_window.maximize() eve_window.activate() - if save_result: + if debug: filepath = "images/0_screenshot.png" else: filepath = None @@ -86,33 +55,65 @@ def get_screenshot(): return cv2.cvtColor(np.array(screenshot), cv2.COLOR_BGR2RGB) -screenshot = get_screenshot() - -reader = easyocr.Reader(["en"], gpu=True) -result = reader.readtext(screenshot) - - -for bbox, text, prob in result: - (tl, tr, br, bl) = bbox - tl = (int(tl[0]), int(tl[1])) - tr = (int(tr[0]), int(tr[1])) - br = (int(br[0]), int(br[1])) - bl = (int(bl[0]), int(bl[1])) - - text = "".join([c if ord(c) < 128 else "" for c in text]).strip() - cv2.rectangle(screenshot, tl, br, (0, 255, 0), 2) - cv2.putText( - screenshot, - text, - (tl[0], tl[1] - 10), - cv2.FONT_HERSHEY_SIMPLEX, - 0.8, - (0, 255, 0), - 2, +def get_boxes(screenshot): + reader = easyocr.Reader(["en"], gpu=True) + results = reader.readtext( + cv2.bitwise_not(cv2.cvtColor(screenshot, cv2.COLOR_BGR2GRAY)), + width_ths=1, ) + results_frame = pd.DataFrame( + [ + [ + int(result[0][0][0]), + int(result[0][0][1]), + int(result[0][1][0]), + int(result[0][1][1]), + int(result[0][2][0]), + int(result[0][2][1]), + int(result[0][3][0]), + int(result[0][3][1]), + result[1], + ] + for result in results + ], + columns=[ + "tl_x", + "tl_y", + "bl_x", + "bl_y", + "br_x", + "br_y", + "tr_x", + "tr_y", + "text", + ], + ) -print(result) + results_frame = results_frame.loc[results_frame["text"].str.len() > 2] -cv2.imshow("screenshot", screenshot) -cv2.waitKey(0) + if debug: + results_frame.to_excel("xlsx/1_boxes.xlsx", index=False) + for result in results_frame.itertuples(index=False): + tl = (result.tl_x, result.tl_y) + br = (result.br_x, result.br_y) + + cv2.rectangle(screenshot, tl, br, (0, 255, 0), 1) + cv2.putText( + screenshot, + result.text, + (tl[0], tl[1] - 5), + cv2.FONT_HERSHEY_SIMPLEX, + 0.4, + (0, 255, 0), + 1, + ) + cv2.imwrite("images/1_highlited_screenshot.png", screenshot) + + logging.info("Боксы получены") + + return results_frame + + +screenshot = get_screenshot() +get_boxes(screenshot) diff --git a/requirements.txt b/requirements.txt index a4f101c..1161a79 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,6 +1,7 @@ certifi==2022.12.7 charset-normalizer==3.1.0 easyocr==1.6.2 +et-xmlfile==1.1.0 idna==3.4 imageio==2.26.0 lazy_loader==0.1 @@ -9,7 +10,9 @@ networkx==3.0 ninja==1.11.1 numpy==1.24.2 opencv-python==4.7.0.72 +openpyxl==3.1.1 packaging==23.0 +pandas==1.5.3 Pillow==9.4.0 PyAutoGUI==0.9.53 pyclipper==1.3.0.post4 @@ -19,7 +22,9 @@ pyperclip==1.8.2 PyRect==0.2.0 PyScreeze==0.1.28 python-bidi==0.4.2 +python-dateutil==2.8.2 pytweening==1.0.4 +pytz==2022.7.1 PyWavelets==1.4.1 PyYAML==6.0 requests==2.28.2