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
|