加faulthandler+OCR阶段心跳日志排查崩溃

This commit is contained in:
youpaishidifu
2026-07-27 18:28:31 +08:00
parent 5ecfa09017
commit 906c89f2f9
+14
View File
@@ -5,8 +5,11 @@ import logging
import threading
import traceback
import unicodedata
import faulthandler
from typing import Optional, Callable, List
faulthandler.enable() # 捕获 C 扩展段错误,输出 traceback 到 stderr
logging.getLogger("comtypes").setLevel(logging.WARNING)
logger = logging.getLogger("msgbot.monitor")
@@ -790,20 +793,26 @@ class MessageMonitor:
# Windows OCR
if im.mode != 'RGBA':
im = im.convert('RGBA')
logger.debug("[ocr] Windows OCR 开始...")
sb = SoftwareBitmap(BitmapPixelFormat.RGBA8, im.width, im.height)
sb.copy_from_buffer(im.tobytes())
win_result = engine.recognize_async(sb).get()
win_text = win_result.text.strip()
logger.debug(f"[ocr] Windows OCR 完成: {len(win_text)} chars")
# EasyOCR 备用
easy_text = ""
if _HAS_EASYOCR:
logger.debug("[ocr] EasyOCR 检查/初始化...")
self._init_easyocr()
logger.debug("[ocr] EasyOCR reader 就绪状态")
if self._easyocr_reader:
try:
logger.debug("[ocr] EasyOCR 识别开始...")
img_np = _np.array(im)
easy_results = self._easyocr_reader.readtext(img_np)
easy_text = ' '.join([r[1] for r in easy_results]).strip()
logger.debug(f"[ocr] EasyOCR 识别完成: {len(easy_text)} chars")
except Exception as e:
logger.debug(f"[ocr] EasyOCR 识别失败: {e}")
@@ -895,16 +904,21 @@ class MessageMonitor:
# ── 双引擎 OCR ──
if im.mode != 'RGBA':
im = im.convert('RGBA')
logger.debug("[wechat] Windows OCR 开始...")
sb = SoftwareBitmap(BitmapPixelFormat.RGBA8, im.width, im.height)
sb.copy_from_buffer(im.tobytes())
win_result = engine.recognize_async(sb).get()
win_text = win_result.text.strip()
logger.debug(f"[wechat] Windows OCR 完成: {len(win_text)} chars")
easy_text = ""
if _HAS_EASYOCR:
logger.debug("[wechat] EasyOCR 检查/初始化...")
self._init_easyocr()
logger.debug("[wechat] EasyOCR reader 就绪状态")
if self._easyocr_reader:
try:
logger.debug("[wechat] EasyOCR 识别开始...")
img_np = _np.array(im)
easy_results = self._easyocr_reader.readtext(img_np)
easy_text = ' '.join([r[1] for r in easy_results]).strip()