Files
aiData/WeiXin/T2_ChatMonitor.py
HuangHai 7514d3119f 'commit'
2026-01-26 13:43:12 +08:00

134 lines
4.4 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# coding=utf-8
import os
import sys
import time
import logging
import asyncio
# 添加项目根目录到 sys.path
project_root = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
if project_root not in sys.path:
sys.path.append(project_root)
from WeiXin import WxUtil
# 配置日志
log_dir = WxUtil.LOG_DIR
if not os.path.exists(log_dir):
os.makedirs(log_dir)
logging.basicConfig(
level=logging.INFO,
format='%(asctime)s - %(name)s - %(levelname)s - %(message)s',
handlers=[
logging.FileHandler(os.path.join(log_dir, "T2_ChatMonitor.log"), encoding='utf-8'),
logging.StreamHandler()
]
)
logger = logging.getLogger("T2_ChatMonitor")
class CVDebugTask:
"""
结构化的 CV 语音调试任务,支持分步执行和单元测试
"""
def __init__(self):
self.device = None
self.screenshot_path = os.path.join(WxUtil.OUTPUT_DIR, "T2_ChatMonitor_live_shot.jpg")
self.debug_view_path = os.path.join(WxUtil.OUTPUT_DIR, "T2_ChatMonitor_debug_view.jpg")
self.dialogue_log = []
self.input_pos = None
def step_1_prepare_env(self):
"""步骤1: 环境准备"""
logger.info("--- [Step 1] 环境准备 ---")
WxUtil.setup_script_environment()
return True
def step_2_connect_device(self):
"""步骤2: 连接设备"""
logger.info("--- [Step 2] 连接设备 ---")
self.device = WxUtil.connect_device()
if not self.device:
logger.error("❌ 设备连接失败,请检查手机是否连接且开启了调试模式")
return False
return True
def step_3_capture_screen(self):
"""步骤3: 捕获屏幕截图"""
logger.info("--- [Step 3] 捕获屏幕截图 ---")
try:
if not self.device:
logger.error("❌ 未连接设备,无法截图")
return False
self.device.screenshot(self.screenshot_path)
logger.info(f"✅ 截图已保存: {self.screenshot_path}")
return True
except Exception as e:
logger.error(f"❌ 截图失败: {e}")
return False
async def step_4_analyze_and_process(self, use_existing_image=False):
"""
步骤4: 分析图片并处理语音转换
:param use_existing_image: 是否使用已有的图片进行离线测试
"""
logger.info("--- [Step 4] 分析图片与语音处理 ---")
target_img = self.screenshot_path
if use_existing_image:
if not os.path.exists(target_img):
logger.error(f"❌ 找不到指定的离线图片: {target_img}")
return False
logger.info(f"📂 正在使用离线图片进行测试: {target_img}")
# 调用核心分析逻辑
# 注意即使是离线分析WxUtil 内部也会尝试连接设备以进行长按操作
self.dialogue_log, self.input_pos = await WxUtil.analyze_chat_image(
target_img,
self.debug_view_path,
device=self.device
)
if self.dialogue_log:
logger.info("✅ 任务处理完成,已生成对话日志")
return True
else:
logger.warning("⚠️ 未识别到任何有效的聊天内容")
return False
def step_5_report_results(self):
"""步骤5: 输出最终报告"""
logger.info("--- [Step 5] 结果汇总 ---")
if self.input_pos:
logger.info(f"📍 识别到输入框位置: {self.input_pos}")
if self.dialogue_log:
logger.info("📋 最终对话内容提取结果已输出到控制台 (见上方横线区域)")
else:
logger.warning("❌ 无对话内容输出")
return True
async def run_structured_debug():
"""
按步骤运行完整的调试任务
"""
task = CVDebugTask()
# 顺序执行各步骤
if not task.step_1_prepare_env(): return
if not task.step_2_connect_device(): return
if not task.step_3_capture_screen(): return
# 执行耗时的分析和处理步骤
success = await task.step_4_analyze_and_process()
if success:
task.step_5_report_results()
logger.info("✨ 调试任务全部顺利完成!")
else:
logger.error("❌ 调试任务在处理阶段失败")
if __name__ == "__main__":
# 运行结构化的调试流程
asyncio.run(run_structured_debug())