import time import cv2 import win32gui import setting import win32_util from log import debug_logger from utils import ths_util, opencv_util, ocr_util scale = setting.get_screen_scale() last_ocr_code = ["000000"] def ocr_ths_code(always_save=False): """ 识别同花顺代码 :return: """ start_time = time.time() time_use_list = [] hwnd = ths_util.get_ths_main_content_hwnd_cached() time_use_list.append(("获取句柄", time.time() - start_time)) start_time = time.time() if not hwnd: raise Exception("看盘页面句柄未获取到") # 句柄截图 # 实际位置(左,上,右,下) rect = win32gui.GetWindowRect(hwnd) # 格式为:(上边距,宽度,高度,缩放倍数) rect_ = setting.get_ths_auto_code_rect() time_use_list.append(("获取配置参数", time.time() - start_time)) start_time = time.time() # 测试 # if len(rect_) > 3: # scale = rect_[3] width = int((rect[2] - rect[0]) * scale) left = width - rect_[1] img = win32_util.window_capture(hwnd, (left, rect_[0], width - 1, rect_[0] + rect_[2]), scale, always_save) time_use_list.append(("截图", time.time() - start_time)) start_time = time.time() if always_save: cv2.imwrite(f"test_clip_gray.png", opencv_util.gray_img(img)) clip_img, details = opencv_util.clip_ths_code_area(img) if always_save: cv2.imwrite(f"test_clip_gray_clip.png", clip_img) time_use_list.append(("分割", time.time() - start_time)) start_time = time.time() code = ocr_util.recognize_code(clip_img) time_use_list.append(("识别", time.time() - start_time)) start_time = time.time() if code is None: code = ocr_util.recognize_code(img) time_use_list.append(("再次识别", time.time() - start_time)) start_time = time.time() if code != last_ocr_code[0]: msg = " ".join([f"{x[0]}:{int(x[1]*1000)}ms" for x in time_use_list]) debug_logger.info(f"代码识别结果:{code} {msg}") last_ocr_code[0] = code if always_save: cv2.imwrite(f"datas/test/{code}.png", opencv_util.gray_img(img)) return code