模板匹配打了满分,消息却差点发错群
2026-08-08
max_val = 1.00。
满分匹配。OpenCV 告诉我,它百分之百确定找到了目标。
然后鼠标点下去,界面切到了——文件传输助手。
那条研讨会通知差一点就发出去了。发给了一个不存在的人。
先把结论放在这儿:满分只说明”在你圈定的范围里找到了最像的东西”,不说明”这就是你要找的东西”。ROI 圈错了,满分反而更危险。
下面把整件事拆成三段讲:坑是怎么埋的、我怎么绕错了一次、最后怎么跑通的。
背景:腾总要干的事
「腾总」是我自建的一个技能,定位很明确——把”最新一场腾讯会议 → 按角色生成多版文案 → 用微信桌面版自动发给对应联系人”固化成一键流程。
走个人微信桌面版,是为了绕开企业微信那边的规模限制。
问题就出在”自动发给对应联系人”这一步。
第一段:坑是怎么埋的
broadcast.py 里的 group 分支,思路是用 OpenCV 模板匹配定位「群聊」那一行的多人头像图标,找到就点进去。
思路没毛病,两个参数配错了:
错误一,ROI 圈的位置不对。
group_icon_search_roi = [50, 350, 350, 450] # 逻辑坐标
→ [100, 700, 700, 900] # 物理坐标
这块区域实际覆盖的是左侧聊天列表,根本不是搜索浮层里的「群聊」分类区。
错误二,模板图裁错了。
group_icon_template.png 是从屏幕下半部裁的,裁到的其实是聊天列表里的某个头像,不是搜索浮层里的群聊图标。
于是就出现了那个荒诞的结果:在一块错误的区域里,拿一张错误的模板图,找到了一个完美吻合的错误目标。1.00。
点下去,切到了聊天列表中下部的另一个聊天——文件传输助手。
说白了,模板匹配没骗我。它老老实实回答了我问的问题,只是我问错了问题。
第二段:我绕了一次,被否了
群聊分支不可靠之后,我临时改了个旁路方案:send_only.py。
跳过 open_chat 这一步,要求使用者先在微信里手动切到目标群,脚本只负责激活窗口、粘贴、截图、发送。
安全,可靠,不会发错。
反馈是一句话:
「你要我自己切,要这个自动化干嘛?」
这句话我认。要的是全自动,不是半自动。send_only 只能当兜底,不能当主方案。
问题回到原点——定位这一步必须自己解决。
第三段:最终方案,已实测跑通
不走模板匹配了。改成让 agent 用视觉判断来定位,而且每一步都截图确认。
流程是这样:
- 激活微信 → 截图当前状态
- 用 PIL 裁切左侧聊天列表底部(物理 y=1800–2214,x=0–700),读这张裁切图,视觉定位目标群那一行的精确物理坐标
- 转成逻辑坐标(Retina 屏 ÷2),
pyautogui.click点进群 → 截图确认右侧顶部标题就是目标群 - 点输入框 → 清空 → 粘贴 → 再截一张哨兵图
- 读哨兵截图,确认聊天对象和内容都对 →
touch output/.tengzong_send放行 → 回车发送 → 最终截图留证
实测:1710×1107 的屏幕下,目标群在列表倒数第二项,逻辑坐标 (130, 992),点击成功进入,没有误发。
核心差别在哪?
模板匹配只回答”像不像”,视觉确认回答的是”对不对”。前者是相似度,后者是语义。在”发错人代价很高”的场景里,只有后者能用。
顺手记三个小坑
这三个跟主线无关,但都真实卡过我:
| 坑 | 细节 |
|---|---|
| 物理 vs 逻辑像素 | pyautogui.screenshot() 返回物理像素(Retina 2x = 3420×2214),pyautogui.click 用的是逻辑坐标。裁切按物理算,点击坐标要 ÷scale。混用必错 |
| 剪贴板同步 | osascript 设完剪贴板要 sleep 1.0 再 command+v,否则可能粘到旧内容。后台进程里尤其明显 |
| emoji 方括号代码 | 微信桌面版粘贴方括号表情代码会部分转换——实测 [玫瑰] 变成 🌹,但 [嘿哈] 不转,仍然显示方括号文字。要统一效果,先小范围测 |
一条一直没松过的安全线
不管方案怎么改,这几条从头到尾没动过:
- 默认发送前截图确认,绝不静默群发
- 联系人重名或未命中,暂停报错退出,绝不猜测发给谁
- 只操作本机微信 UI,不读取上传聊天隐私,不落库凭证
第一条今天救了我一次。如果没有那张哨兵截图,那条通知已经躺在文件传输助手里了。
可复用的一条经验
在会造成不可撤销后果的自动化里,置信度不能当验收标准,只能当参考。
max_val=1.00 这种数字有很强的心理暗示——它看起来像结论,其实只是一个中间量。真正的验收标准只有一个:在执行不可逆动作之前,用一个独立于定位逻辑的手段,再确认一次目标是对的。
截图哨兵就是那个独立手段。多花一次截图的钱,买的是”消息不会发错人”。这笔账,任何时候都划算。
发表评论: