From 0c6606220decb1b6cf05de1def5f289d91910685 Mon Sep 17 00:00:00 2001 From: huanghaizhen Date: Wed, 5 Jun 2024 17:15:16 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9Eocr=E8=8C=83=E5=9B=B4?= =?UTF-8?q?=E8=AF=86=E5=88=AB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/ocr_utils.py | 38 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) diff --git a/src/ocr_utils.py b/src/ocr_utils.py index f4fe085..122ac3b 100644 --- a/src/ocr_utils.py +++ b/src/ocr_utils.py @@ -123,6 +123,44 @@ class OCRUtils: def all_result(cls): return cls.result + @classmethod + def ocr_find_by_range(cls, text, x1=None, x2=None, y1=None, y2=None): + """ + OCR在界面中识别到多个关键词时,通过区域筛选出对应关键词并返回坐标 + :param text: 页面查找关键词 + :param x1: x坐标开始范围 + :param x2: x坐标结束范围 + :param y1: y坐标开始范围 + :param y2: y坐标结束范围 + :return: 坐标元组 (x, y) + + 注意:需要特定区域内只有一组OCR关键词,若任有多组请增加精度,否则默认返回第一组符合条件的关键词坐标 + + 以默认分辨率 1920*1080 为例,多种示例情况如下: + 示例1(识别左半屏幕关键字):ocr_find_by_range(x1=960) + 示例2(识别下半屏幕关键字):ocr_find_by_range(y1=540) + 示例3(识别左半屏幕-上半屏关键字):ocr_find_by_range(x1=960, y1=540) + 示例4(识别特定区域 :100*900-200*950 内关键字):ocr_find_by_range(x1=100, x2=200, y1=900, y2=950) + """ + defaults = { + 'x1': 0, + 'x2': 1920, + 'y1': 0, + 'y2': 1080 + } + + x1 = x1 if x1 is not None else defaults['x1'] + x2 = x2 if x2 is not None else defaults['x2'] + y1 = y1 if y1 is not None else defaults['y1'] + y2 = y2 if y2 is not None else defaults['y2'] + + ocr_return = cls.ocr(text) + if isinstance(ocr_return, dict): + for key, value in ocr_return.items(): + if x1 <= value[0] <= x2 and y1 <= value[1] <= y2: + return value + return ocr_return + if __name__ == '__main__': OCRUtils.ocrx().click()