youpaishidifu
503de361c5
修复KB搜索质量差+增加OCR病句过滤
...
1. 改进内容相关性检查:高匹配度(≥10.0)但无共同词时拒绝匹配
- 用户问PVP击杀播报,KB返回json格式说明(匹配度9.53)→ 拒绝
- 增加body内容检查,防止TF-IDF误匹配
2. 增加OCR病句过滤:
- 病句1:句子以动词结尾但缺少宾语(如'将其修正后重三')
- 病句2:句子以'三'结尾(OCR误读'试'为'三')
- 病句3:句子缺少主语且无标点
- 病句直接过滤,不触发查库
2026-07-29 22:11:08 +08:00
youpaishidifu
db64918761
改进内容相关性检查:增加body内容匹配,增强日志诊断
...
- _has_content_relevance 增加 content/body 检查,防止TF-IDF匹配到heading无关但body相关的section
- 增加 score 参数传递,用于日志记录
- 日志增加 doc_body 预览,便于诊断匹配失败原因
2026-07-29 21:56:14 +08:00
youpaishidifu
fae6d5184f
修复OCR截历史消息自言自语: 变形命令过滤 + 首次轮询基线\n\n问题: OCR阅读历史帮助文档触发错误回复 + 首次启动时历史消息全部触发回复\n\nFix1: OCR误读斜线为字母(4处过滤)\n /sdfl→Isdfl /import→Jimport 均不被^/[A-Za-z]拦截\n - OCR级+Poll级: 含sdfl关键词的行以字母开头→变形命令跳过\n - OCR级+Poll级: 大写字母+4+小写+含CJK+>10字符→变形命令跳过\n 覆盖Isdfl update更新插件、Jimport导入cdk等所有OCR变形命令行\n\nFix2: 首次成功轮询基线拦截\n 检测_last_new_msg_time[platform]==0判断是否首次见消息\n 首次消息列表全部标记基线→加_seen_messages但skip_on_message\n 不触发KB搜索/自动回复\n 下一轮有真正的增量消息才触发回复
2026-07-29 21:23:32 +08:00
youpaishidifu
d72d994db1
修复2问题: 斜线英文命令触发回复 + 微信Electron安全发送\n\n问题1: 斜线开头英文命令碎片触发自动回复\n 日志: /sdfl undo撤销导入 匹配度9.53触发了回复\n 旧过滤: 只拦>=2个/cmd, /sdfl只有1个→漏过\n 修复(OCR+Poll双级):\n - _process_ocr_output新增: re.match(r'^/[A-Za-z]', line)→跳过\n - _poll_on_new_messages同级新增\n 不拦/兑换码(斜线后中文), 只拦/register /sdfl等英文命令\n\n问题2: 微信SetForegroundWindow异常+Electron闪崩风险\n 日志: SetForegroundWindow/SwitchToThisWindow异常 code=0\n WeChat也是Electron, AttachThreadInput+SendMessage同TIM风险\n 修复:\n - _paste_and_send_tim→_paste_and_send_safe, 加platform参数\n 硬编码[qq]改为[platform]避免写错字典key\n 清理return True后不可达死代码\n - _paste_and_send路由: wechat也走安全路径\n Electron双平台(TIM+微信)统一走SwitchToThisWindow+前台确认→keybd_event\n 无AttachThreadInput、无SendMessage同步点击
2026-07-29 20:14:47 +08:00
youpaishidifu
b1ca2f058c
修复OCR截图BitBlt卡死DWM→整机冻结2-3分钟
...
根因: ImageGrab.grab() 底层用 GDI BitBlt 从 DWM 合成表面截屏。
_ensure_visible(SwitchToThisWindow) 触发 DWM 窗口激活合成后,
紧接着 BitBlt 在 DWM 繁忙时阻塞等待→DWM 死锁→桌面冻结 2-3 分钟
→DWM 重启→部分使用 GPU 的软件崩溃
修复(新增 _safe_screenshot):
- daemon 线程内 ImageGrab.grab(), join(timeout=3.0) 超时等待
- 超时后线程 is_alive→返回 None, 跳过本轮(日志: BitBlt 可能卡在 DWM)
- 不会 cancel 线程(无法取消阻塞的 C 调用), 但 daemon 特性确保:
进程退出时自动终止, 正常运行时 GDI 调用最终完成+线程自动回收
- _ensure_visible 后 sleep 从 0.1s 增加到 0.4s, 给 DWM 完成窗口合成
降低 BitBlt 在 DWM 繁忙时调用的概率
2026-07-29 18:49:34 +08:00
youpaishidifu
ef227eb7b0
修复2个问题: OCR拼接合并 + 微信定位冻结3-5s
...
问题1: OCR拼接合并 (2处改动)
- easyocr_worker.py: ' '.join→'\n'.join, 各检测区域用换行而非空格拼接
避免 '兑换码导入错误时如何处置?游戏专用小筑憩-草一' 式合并
- _process_ocr_output 尾部新增 _split_merged_ocr_text:
在中文句尾标点([。?!?])后紧跟CJK处拆分,两侧CJK>=3且非续接语气词
将合并文本分为多条消息,各自独立参与KB匹配
问题2: 微信 _fresh_window 冻结3-5s (2处改动)
- _poll: 对wechat跳过 _fresh_window(ControlFromHandle构建Electron UIA树冻结)
用 win=None 代替
- _read_messages(wechat): 接收window=None, OCR失败后惰性创建UIA控件
大多数轮次 OCR 读到消息就直接返回,不碰UIA树
2026-07-29 18:11:29 +08:00
youpaishidifu
722d2a5438
双引擎OCR并发: Windows OCR + EasyOCR同时跑最多等10秒,谁先出用谁
...
之前: Windows OCR串行等完→再串行等EasyOCR(微信端甚至无超时)。
EasyOCR子进程挂起=OCR整条链路都卡死。
改为 _ocr_dual_engine 方法:
- Windows OCR + EasyOCR 通过 ThreadPoolExecutor 同时跑
- concurrent.futures.wait(timeout=10.0, ALL_COMPLETED) 等最多10秒
- 两引擎都在10秒内出结果→_pick_ocr_text质量对比选优
- 只有一个在10秒内出结果→直接用那个
- 都超时→返回空
- Windows OCR bad allocation 自动降级到原图重试(在worker线程内处理)
两个平台调用点(_ocr_read_qq / _ocr_read_wechat)都改为调_ocr_dual_engine。
微信端同时补上im_original备份(之前缺bad allocation降级)。
2026-07-29 17:51:52 +08:00
youpaishidifu
68d364a0c6
修复TIM在回复冷却期因OCR空返回→回退到剪贴板路径(AttachThreadInput)→崩进程→永久罢工
...
根因链:
1. _paste_and_send_tim回复成功→_self_reply_cooldown_until[qq]=15s
2. 冷却期每轮_ocr_read_qq返回[]但未设_ocr_unchanged
3. _read_messages穿过_ocr_unchanged检查→落到_read_via_clipboard_once
4. _read_via_clipboard_once调_ensure_foreground→_attach_set_foreground→AttachThreadInput
5. TIM Electron进程崩溃→_ensure_hwnd再找不到→QQ永久罢工
修复(两处):
- _ocr_read_qq冷却返回时也设_ocr_unchanged[qq]=True,阻挡fallthrough
- _read_messages对tim变体在OCR空时直接return[],跳过所有fallback
2026-07-29 17:34:03 +08:00
youpaishidifu
431b49d88c
截图路径回退项目目录+QQ随机错峰轮询+尾部时间戳不过滤
2026-07-29 16:45:11 +08:00
youpaishidifu
5b31b66f01
QQ轮询加速+故障降级:EasyOCR超时8s/原图降级/截图存TEMP
2026-07-29 16:15:48 +08:00
youpaishidifu
659f667d74
OCR过滤:加多/cmd指令列表碎片检测 + 内容相关性检查防偶然匹配
2026-07-29 15:29:42 +08:00
youpaishidifu
47bd990f76
fix: 急停WH_KEYBOARD_LL钩子两个致命bug修复
...
1. hmod参数必须为NULL: GetModuleHandleW(None)返回Python.exe模块句柄≠NULL,
导致SetWindowsHookExW静默失败,钩子从未安装成功。改用None(0)。
2. 安装钩子前先创建消息队列: PeekMessageW强制创建线程消息队列,
WH_KEYBOARD_LL回调通过GetMessage投递,无消息队列则回调永远不到达。
新增启动成功日志: [急停] 底层键盘钩子安装成功,ESC 急停已激活
2026-07-29 14:23:47 +08:00
youpaishidifu
c243549169
fix: 急停改用底层键盘钩子WH_KEYBOARD_LL,全局生效
...
GetAsyncKeyState 依赖消息泵,daemon 线程无消息循环,只有 CMD 有焦点时才能偶然读到 ESC。
改用 SetWindowsHookExW(WH_KEYBOARD_LL) 系统级底层键盘钩子:
- 不依赖窗口焦点,任何进程按 ESC 都能捕获(游戏全屏/浏览器/桌面)
- 钩子回调运行在安装钩子的线程消息泵(GetMessage)
- 线程退出时 PostThreadMessageW(WM_QUIT) 唤醒 GetMessage 阻塞
- 卸载钩子 + 释放回调引用防 GC 延迟崩溃
2026-07-29 14:13:44 +08:00
youpaishidifu
b2dc72e7b5
fix: 剪贴板hash去重 + 双击ESC急停 + 截图日志完善
...
1. 剪贴板hash去重: _read_via_clipboard_once计算md5(content),
同平台内容未变则跳过,防止QQ读到微信遗留的过时剪贴板数据
答非所问(跨平台stale数据)问题修复
2. 双击ESC急停: _esc_check_loop daemon线程每150ms轮询ESC键,
两次ESC间隔<500ms触发_emergency_stop: 设置_running=False、
杀死EasyOCR子进程、清空发送锁、回调GUI更新状态、
用户可点击开关重新启动。急停后不退出程序。
3. 截图日志完善:
- 日志打印完整路径(用户可直接定位)
- 统一keep=60(QQ+微信共享清理池,双平台不互删)
- 移除微信冗余二次保存(wechat_ocr_*重复save)
- 修复silent except→打出save失败日志
2026-07-29 13:11:00 +08:00
youpaishidifu
afbcd109f0
fix: poll first变量修复 + KB添加安装动词 + 绿色气泡OCR拦截\n\n1. Poll first变量修复: first=True初始化但循环体内从未设为False→\n 所有new_items都被当作第一条处理。加first=False只处理首条。\n2. KB action_verbs_all添加"安装": "云背包插件怎么安装"\n verb+obj提取安装+云背包插件→优先匹配"安装方法"section\n3. 绿色气泡OCR拦截三层:\n - OCR级: |管道符+CJK混合过滤(正常聊天从不混用|和中文)\n - Poll级: 同|管道符+CJK过滤兜底\n - _is_reply_fragment阈值降低: raw 8→6, CJK 6→5\n - OCR line filter阈值同步降低: raw 8→6, CJK 6→5\n 绿色气泡被OCR啃成"GU |进行配置..."的乱码现在pipe过滤\n 即可拦截或SequenceMatcher阈值降低后匹配replied_texts\n- 提交git.ypshidifu.cn
2026-07-29 12:42:23 +08:00
youpaishidifu
3b8117977b
fix: 白色气泡柱检测拦截CMD窗口误截图
...
_has_user_colors 新增一层: 左35%区域按行统计白色像素密度。
用户气泡在左侧形成多行多列白色密集区(气泡柱), CMD窗口/非聊
天截图即使有零星白字也不会在同一行出现≥3白色采样点。日志输
出行白色分布数组用于调参: [qq] 无白色气泡柱(r=[0,1,0,2,0,...])
跳过(非聊天截图)
2026-07-29 12:05:06 +08:00
youpaishidifu
b160514729
fix: QQ独立轮询线程 + 调试截图前置 + 游戏UI乱码过滤补全
...
1. QQ独立轮询线程: QQ从_run_loop移到_qq_poll_loop独立daemon线程,
不再被微信OCR(~15-20s/轮)阻塞。QQ响应从~34s降到~3-5s。
EasyOCR子进程加_easyocr_lock保护并发访问。
2. 调试截图前置: QQ/微信的ocr_debug截图移至颜色+哈希检查之前,
即使像素/哈希跳过也有图可查。日志打印截图文件名。
_read_messages各路径增加'消息来源: xxx → N条'日志追踪。
3. 游戏UI乱码过滤补全: 剪贴板路径和poll级去重循环追加
CJK+下划线英文/CJK+大写英文组合过滤,堵住clipboard/UIA兜底漏过的乱码。
2026-07-29 11:44:25 +08:00
youpaishidifu
21f2426492
fix: QQ裁剪回退0.25 + 轮询加速2周期
...
1. QQ cap_left 0.50→0.25 回退到5de2521状态,消息面板覆盖左半侧,用户消息不再被切掉
颜色检测+md过滤负责拦截bot回复残片,无需用0.50避开会话列表
2. QQ降频4周期→2周期(~8s→~4s),用户消息响应加快
2026-07-29 10:46:09 +08:00
youpaishidifu
30e8e0ccc3
fix: <br>HTML标签 md检测 + 游戏UI乱码过滤 + 无消息气泡跳过OCR
...
1. _is_markdown_document: 增加<br>HTML换行标记检测,bot回复中<br>残片不再触发查库
2. OCR过滤: 增加游戏UI/非聊天文本乱码过滤,含下划线英文(CJK+_组合)和
CJK后跟大写英文(玩家Ierite 比武Mtp)特征两项,拦截群中游戏插件输出残缺
3. _has_user_colors: 左右半区白色像素合计<20且bot色<3时认为无可见消息气泡,跳过本轮OCR
2026-07-29 10:17:50 +08:00
youpaishidifu
94cd3ca448
修复颜色检测+自身冷却+QQ裁切+2324异常 4项:QQ cap_left 0.25→0.50(避会话列表) / _has_user_colors改左右半区策略 / 回复后同平台15s冷却 / 2324行try-except兜住SetForegroundWindow崩溃
2026-07-29 00:53:36 +08:00
youpaishidifu
718f67804c
修复KB搜索3项:疑问词不当降权 + 文档聚合tiebreaker + section弱匹配不计入
2026-07-29 00:09:22 +08:00
youpaishidifu
4da415f9c5
修复KB匹配:action_verbs_all去掉怎么/如何等疑问词,避免sdf1_login含'怎么办'被惩罚更少反超beibao
2026-07-29 00:01:28 +08:00
youpaishidifu
0452246c73
修复多发+剪贴板安全 4项:模糊阈值0.85→0.75/CJK子串8→6/同poll只处理第一项/设剪贴板后回读校验/读剪贴板时检查发送锁防竞争
2026-07-28 23:37:01 +08:00
youpaishidifu
e2a1fe2a68
修复OCR 3项:微信裁切左移到34% + 颜色像素检测(蓝=QQ绿=微信=仅bot跳过) + bot回复残留因颜色检测一并隔离
2026-07-28 23:11:19 +08:00
youpaishidifu
a093528888
修复2个问题:微信OCR hash碰撞(aHash→dHash+5秒强制刷新) + KB搜索动词+对象精准匹配防误召回
2026-07-28 22:28:29 +08:00
youpaishidifu
1ccaa926fd
4项修复:CJK比例乱码过滤/跨平台冷却30s/SequenceMatcher加强(原始文本匹配+CJK阈值6)/split阶段回复残片预检;加_reply_fragment复用方法;回复前缀后缀变体追踪
2026-07-28 21:48:55 +08:00
youpaishidifu
768b3da214
修复3个bug:加import sys修复子进程崩溃;加消息漫游到UI子串黑名单;加结构化数据面板过滤拦截QQ指令面板(3+中文冒号键值对);同步到Poll过滤层级
2026-07-28 21:19:47 +08:00
youpaishidifu
7102821127
EasyOCR GPU crash隔离:子进程隔离GPU推理,崩溃只杀子进程不冻电脑;新增easyocr_worker.py常驻worker;主进程降级到Windows OCR
2026-07-28 19:24:33 +08:00
youpaishidifu
94cf619f3d
OCR截屏JSON/YAML配置块剥离:新增_strip_json_yaml_blocks方法在切行前剥离JSON对象块/key-value行/YAML列表;OCR行过滤和Poll过滤加JSON/YAML语法兜底;修复微信右侧配置面板与用户消息搅合导致消息丢失
2026-07-28 18:58:54 +08:00
youpaishidifu
f3cdb142b8
OCR行过滤加*开头和*配对残片丢弃,修复*如有错误、*x但不衢...x*漏网
2026-07-28 18:42:10 +08:00
youpaishidifu
06ead20a6d
增强md语法过滤:全面拦截**加粗/###数字标题/编号列表/引用块/分隔线/表格行;提取函数过滤**残片;OCR行过滤兜底md语法;轻量化前台操作避免截图卡顿
2026-07-28 18:23:46 +08:00
youpaishidifu
d3d35ceb55
修复OCR自我回环:无中文乱码过滤、微信唤前台截图、SequenceMatcher阈值10
...
1. 无中文乱码过滤:非中文且长度>10且非/开头的行一律丢弃。
解决URL-only因OCR吃掉https://前缀漏网(如hpsllimgypshidifu...)
2. 微信OCR加唤前台:在截图前调用_ensure_foreground,
避免终端窗口遮挡导致OCR读到自身日志文字。
3. SequenceMatcher阈值12→10:
与已回复文本公共子串11字,旧阈值12差一字漏网。10字安全覆盖。
OCR/Poll双重部署。正常用户消息公共子串≤1字,无影响。
2026-07-28 17:57:33 +08:00
youpaishidifu
30d2b497a8
Fix OCR self-feed loop: bold md detect, repeat-char garbage, SequenceMatcher reply fragment catch
...
- _is_markdown_document: add bold **text** detection before len<10 gate
- Garbage filter: 5+ consecutive same char detect (LLLLL/11111)
- OCR filter + Poll filter: SequenceMatcher longest common CJK substring >=12 chars
vs replied_texts. Catches TTTT八X1r以...工单]、**使用**权 fragments
that exact/substring/fuzzy match miss due to OCR noise prefix.
2026-07-28 17:42:07 +08:00
youpaishidifu
ba139113b1
修复OCR md碎片漏网:短列表项/- 玩家义务/漏过、尾部#草残留
...
- _is_markdown_document: 行首列表项(- /*)、checkbox([V])、
md链接缺括号([text]( )检查移到len<10之前,短碎片不漏
- 时间戳分割else分支: 新增尾部#标题清理(\s+#[\u4e00-\u9fff]...$)
- 提取后重检: extraction出的文本再走_is_markdown_document,
纯md碎片丢弃
- 过滤循环兜底: line进入texts.append前再扫一次尾部#标题+
2026-07-28 16:48:56 +08:00
youpaishidifu
42db2ad5b8
新增三层OCR过滤: URL-only/UI子串黑名单/浏览状态去锚
...
- URL-only: 无中文+含https? → 拦截OCR面板图片URL碎片(含OCR乱码httpsLlimgypshidifu)
- UI子串黑名单: 启用监控/数据看板/债券总和/应用设置/php管理员 → 含任一即丢弃
- 浏览状态去锚: ^(浏览|...) → (?:浏览|...) 拦截"启用监控浏览243个文档"等混合碎片
- 黑名单补充: 手机(Smart-Dump漏网)
- FutureWarning修复: [[\d] → \[\d
- Poll级安全阀同步新增URL-only+UI子串过滤
2026-07-28 16:31:38 +08:00
youpaishidifu
4895379d6d
修:微信UI元素过滤 + 发送失败冷却防卡死
...
问题1:微信OCR读左侧会话列表按钮(游戏中心/视频号/通讯录等),
触发KB匹配→尝试回复→窗口切换→Ctrl+C都响应很久。
修复1:
- 微信截图左边界从32%移到40%(跳过左侧UI按钮列)
- 新增微信UI元素黑名单正则:游戏中心|视频号|直播|看一看|搜一搜|朋友圈|通讯录|收藏|设置|发现|我|摇一摇|小程序|支付|卡包|表情|公众号|服务
问题2:UI文本触发回复→发送失败→下一轮OCR又读到相同文本→
又触发→又失败→无限循环卡死。
修复2:
- 新增_failed_send_cooldown字典(msg_hash→失败时间)
- 失败后60秒内不重试同一条消息
- 失败文本立即加入seen_messages防止OCR重新触发
- 清理过期冷却条目(TTL 60秒)
2026-07-28 13:11:43 +08:00
youpaishidifu
f5bfcb56eb
修:OCR随机字符垃圾(如544UUJ1W H V=YJ~JL:e)漏过过滤
...
问题:EasyOCR对头像/表情/特殊UI区域输出无意义字母数字符号组合,
_is_ocr_console_garbage对无中文文本阈值>20,刚好漏过20字符的乱码。
修复:
1. 无中文阈值从>20降到>15
2. 新增随机字符检测:无中文+特殊字符>15%+字母数字混杂→垃圾
3. _process_ocr_output逐行过滤同步添加该检测
2026-07-28 12:30:08 +08:00
youpaishidifu
ababfc88ad
修:PostMessage键盘导致QQ NT发送乱码字符
2026-07-28 11:30:28 +08:00
youpaishidifu
3a7a05f973
修:OCR全角括号md碎片导致KB死循环
...
问题:OCR将英文括号识别为全角(()形式,[官方下载](?https...
此类碎片漏过 _is_markdown_document 检测,进入KB匹配触发回复。
修复:
1. _is_markdown_document: 新增 ]( 和 [text]( 检测(全角括号md链接)
2. OCR行级过滤: 新增 ]( 碎片丢弃
3. _extract_user_text_from_md_fragment: 新增全角括号md标记分割
4. KB scoring: 短查询(≤3分词)降权,防碎片得分反超真实消息
2026-07-27 21:48:44 +08:00
youpaishidifu
8d5e9b7e17
修:OCR md 残留死循环 - checkbox/[V]残片 + 断链检测
...
问题:bot md回复被OCR识别后再次进入自动回复管道,形成死循环。
[V] GitHu [V] gitee... 等checkbox碎片和 [text](url 断链碎片
未触发现有 md 检测,导致自言自语。
修复:
1. 行级OCR过滤:含2+个 [V] 标记的行直接丢弃
2. _is_markdown_document 加两条:
- checkbox 标记 [V]/[v]/[x]/[V ] 等 → md 残留
- 断链 [text]( → QQ群聊不用此语法
2026-07-27 21:22:35 +08:00
youpaishidifu
25073c35f1
requirements.txt: 添加 easyocr/torch/torchvision 依赖
2026-07-27 20:52:09 +08:00
youpaishidifu
79b739f59d
md表格细胞值提取加固+replied子串包含过滤 CUDA Torch 安装 2>&1
2026-07-27 19:47:39 +08:00
youpaishidifu
17bfe35520
_poll: qq找窗去子线程,纯Win32直接跑在_run_loop线程
2026-07-27 19:27:22 +08:00
youpaishidifu
e723ce582e
OCR checkbox残片过滤 + EasyOCR GPU自动检测
2026-07-27 19:02:58 +08:00
youpaishidifu
dc2e1f4105
EasyOCR:主线程预加载+torch.set_num_threads(1)防段错误
2026-07-27 18:52:31 +08:00
youpaishidifu
906c89f2f9
加faulthandler+OCR阶段心跳日志排查崩溃
2026-07-27 18:28:31 +08:00
youpaishidifu
5ecfa09017
窗口查找改纯PID+OCR垃圾过滤+md短标题修复
2026-07-27 18:18:36 +08:00
youpaishidifu
a0e932276a
替换:文本指纹→截图像素签名(8x8感知hash),屏幕不变整轮跳过+跳过fallback+不计空读
2026-07-27 17:06:56 +08:00
youpaishidifu
e90cea7343
修复:OCR环路五个靶点—①##中文(md检测)②位置0##不提取③跨轮指纹去重④引擎标签⑤回复标题去##追踪
2026-07-27 16:30:37 +08:00
youpaishidifu
24146f34d9
重大:新增微信OCR读取 + 提取_process_ocr_output共用方法 + 导航噪声过滤 + 垃圾计数改为dict
2026-07-27 15:55:55 +08:00