# wxunreadmsg **Repository Path**: io123/wxunreadmsg ## Basic Information - **Project Name**: wxunreadmsg - **Description**: 微信未读信息识别 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2026-03-12 - **Last Updated**: 2026-03-14 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 微信未读消息角标检测 纯 Dart 实现的微信聊天列表截图未读消息检测工具。无任何第三方依赖。 ![img.png](doc/image/img.png) ![img.png](doc/image/img1.png) ## 功能 - 检测截图中红色角标(带白色数字的),自动过滤纯红点 - 支持圆形和椭圆形角标(单位数、两位数均可识别) - 自适应不同分辨率(以 1080px 宽为基准自动缩放) - 返回角标坐标、聊天项区域、建议点击位置 - 输出标记后的截图(绿框=角标,蓝框=聊天项) ## 核心算法 1. 提取红色连通域作为候选区域 2. 对每个候选区域,查找内部被红色完全包围的白色连通域(即数字笔画) 3. 有内部白色连通域 → 带数字的角标 ✓,没有 → 纯红点 ✗ ## 快速开始 ### 环境要求 - Dart SDK >= 3.0.0 - macOS(图片格式转换依赖 `sips` 命令) ### 启动 Web 服务 ```bash bash start_server.sh ``` 访问 http://localhost:8080 ,拖拽截图上传即可检测。 ### 命令行检测 ```bash dart run bin/find_unread.dart <图片路径> ``` 输出 JSON 到 stdout,调试日志到 stderr。 ### 运行测试 ```bash bash run_test.sh # 测试 images/ 下所有图片 bash run_test.sh <图片路径> # 测试指定图片 ``` ## 集成到其他项目 使用 `BadgeUtil` 工具类,传入图片 base64 即可: ```dart import 'lib/badge_util.dart'; final result = BadgeUtil.detectFromBase64(imageBase64); print(result.toJson()); // 坐标 JSON print(result.markedImageBase64); // 标记后图片 base64 ``` 详见 [INTEGRATION.md](INTEGRATION.md)。 ## 项目结构 ``` lib/ badge_util.dart # 工具类入口(集成用这个) badge_detector.dart # 核心检测算法 bmp_image.dart # BMP 图像读写 bin/ server.dart # Web 服务(上传截图 + 在线检测) find_unread.dart # 命令行工具(输出 JSON) main.dart # 命令行工具(输出标记图) start_server.sh # 启动服务脚本 run_test.sh # 测试脚本 images/ # 测试图片 test_output/ # 测试输出 ``` ## 输出示例 ```json { "size": {"width": 2070, "height": 1672}, "unreadCount": 5, "unreadUsers": [ { "index": 0, "badge": {"x": 190, "y": 99, "width": 32, "height": 32}, "badgeCenter": {"x": 205, "y": 114}, "chatItem": {"x": 0, "y": 76, "width": 745, "height": 163}, "clickTarget": {"x": 372, "y": 157} } ] } ```