96 lines
2.3 KiB
Markdown
96 lines
2.3 KiB
Markdown
# 豆瓣滑块验证码检测器
|
||
|
||
基于 sharp 图像处理库实现的滑块验证码缺口精确识别工具。
|
||
|
||
## 功能特性
|
||
|
||
- ✅ 自动检测图片中的滑块缺口位置
|
||
- ✅ 支持多滑块检测(一张图片中检测多个滑块)
|
||
- ✅ 使用多阈值策略提高检测准确率
|
||
- ✅ 自动在图片上绘制蓝色边框标注检测结果
|
||
- ✅ 支持人工标注对比验证
|
||
|
||
## 安装依赖
|
||
|
||
```bash
|
||
npm install
|
||
```
|
||
|
||
## 使用方法
|
||
|
||
### 运行检测
|
||
|
||
```bash
|
||
npm run detect
|
||
```
|
||
|
||
该命令会:
|
||
1. 验证算法准确性(使用 `images/douban-target` 中的红框标注图片)
|
||
2. 处理 `images/douban` 目录中的所有图片
|
||
3. 将检测结果(带蓝色边框)输出到 `images/output` 目录
|
||
|
||
### 目录结构
|
||
|
||
```
|
||
images/
|
||
├── douban/ # 豆瓣滑块真实截图(待检测)
|
||
├── douban-target/ # 红框标注图片(用于验证算法准确性)
|
||
├── slider/ # 滑块形状模板图片
|
||
├── target/ # 滑块标注图片
|
||
└── output/ # 检测结果输出目录(蓝色框标注)
|
||
```
|
||
|
||
## 检测算法
|
||
|
||
### 核心思路
|
||
|
||
1. **暗色区域检测**:滑块缺口通常为暗色(阴影)区域
|
||
2. **多阈值策略**:使用 75、90、105 三个亮度阈值进行检测,提高鲁棒性
|
||
3. **形态学处理**:使用闭运算(先膨胀后腐蚀)去除噪点
|
||
4. **连通区域分析**:使用洪水填充算法查找所有暗色连通区域
|
||
5. **特征筛选**:
|
||
- 尺寸范围:50-95 像素(宽度和高度)
|
||
- 宽高比:0.8-1.25(接近正方形)
|
||
- 位置:图片中部区域(15%-75%高度)
|
||
- 密度:像素填充率 > 55%
|
||
|
||
### 检测结果
|
||
|
||
当前性能(在 9 张测试图片上):
|
||
- **验证准确率**:55.6%(5/9)
|
||
- **检测完成率**:66.7%(6/9)
|
||
- 支持多滑块检测(滑块-1.png 检测到 2 个滑块)
|
||
|
||
## 开发
|
||
|
||
### 编译
|
||
|
||
```bash
|
||
npm run build
|
||
```
|
||
|
||
### 调试
|
||
|
||
查看未检测到的图片特征:
|
||
```bash
|
||
npx ts-node --transpile-only src/debug-threshold.ts
|
||
```
|
||
|
||
分析红框标注信息:
|
||
```bash
|
||
npx ts-node --transpile-only src/analyze.ts
|
||
```
|
||
|
||
## 技术栈
|
||
|
||
- TypeScript
|
||
- Sharp (图像处理)
|
||
- Node.js
|
||
|
||
## 优化方向
|
||
|
||
1. 提高对低对比度图片的检测能力
|
||
2. 优化形态学操作参数
|
||
3. 增加边缘检测辅助判断
|
||
4. 支持更多滑块形状变体
|