一个用于识别滑块验证码位置的Python包
Project description
SliderSolver
一个用于识别滑块验证码缺口位置的 Python 包。通过图像处理技术,自动识别缺口在背景图中的位置,并返回缺口左边缘到背景图左边缘的距离。
功能特点
- 🎯 精准定位:使用 OpenCV 模板匹配算法精确识别缺口位置
- 🖼️ 边缘检测:基于 Canny 边缘检测提高匹配准确率
- 📊 可视化结果:自动在背景图上标记识别位置
- 🚀 简单易用:仅需两行代码即可完成识别
安装
从源码安装
git clone https://github.com/SkyAerope/SliderSolver.git
cd SliderSolver
pip install -e .
使用 pip 安装
pip install slider-solver-cv
依赖
- Python >= 3.7
- opencv-python >= 4.5.0
- numpy >= 1.19.0
- pillow >= 8.0.0
使用方法
基本用法
from slider_solver import SliderSolver
# 创建求解器实例
solver = SliderSolver(
bg_img_path='path/to/background.png', # 背景图路径
front_img_path='path/to/slider.png' # 缺口图路径
)
# 计算缺口位置
distance = solver.detect_distance()
print(f'缺口位置: {distance}px')
带可视化的完整示例
from slider_solver import SliderSolver
import os
def solve_slider_captcha():
# 图片路径
bg_img = 'images/background.png'
slider_img = 'images/slider.png'
# 检查文件是否存在
if not os.path.exists(bg_img) or not os.path.exists(slider_img):
print("错误:图片文件不存在")
return
# 创建求解器
solver = SliderSolver(bg_img, slider_img)
# 计算位置
distance = solver.detect_distance()
print(f'✅ 识别成功!缺口位置在 x = {distance}px')
# 可选:绘制标记线并保存结果图片
result_path = solver.draw_line(distance, bg_img)
print(f'📁 结果图片已保存到: {result_path}')
return distance
if __name__ == '__main__':
solve_slider_captcha()
自定义保存路径
from slider_solver import SliderSolver
solver = SliderSolver('background.png', 'slider.png')
distance = solver.detect_distance()
# 指定自定义的保存路径
result_path = solver.draw_line(
x=distance,
bg_img_path='background.png',
target_path='output/marked_result.png' # 可选,不指定则自动生成
)
print(f'结果保存到: {result_path}')
API 说明
SliderSolver 类
__init__(bg_img_path, front_img_path)
初始化求解器。
参数:
bg_img_path(str): 背景图片的文件路径front_img_path(str): 缺口图片的文件路径
detect_distance()
检测缺口在背景图中的 x 坐标位置。
返回值:
int: 缺口距离左边界的像素距离
示例:
solver = SliderSolver('bg.png', 'slider.png')
distance = solver.detect_distance() # 返回如: 120
draw_line(x, bg_img_path, target_path=None)
在背景图上绘制红色竖线标记位置。
参数:
x(int): 竖线的 x 坐标bg_img_path(str): 背景图片路径target_path(str, 可选): 结果图片保存路径,不指定则自动生成(添加_result后缀)
返回值:
str: 保存的结果图片路径
示例:
result_path = solver.draw_line(120, 'bg.png') # 自动保存为 bg_result.png
# 或指定路径
result_path = solver.draw_line(120, 'bg.png', 'output/marked.png')
工作原理
- 读取图片:加载背景图和缺口图
- 预处理:去除缺口图的透明边界
- 灰度转换:将图片转换为灰度图
- 边缘检测:使用 Canny 算法检测边缘
- 模板匹配:使用 TM_CCOEFF_NORMED 方法进行匹配
- 返回结果:返回匹配到的 x 坐标
- 可选可视化:调用
draw_line()方法绘制标记线
项目结构
SliderSolver/
├── src/
│ └── slider_solver/
│ ├── __init__.py # 包初始化文件
│ └── solver.py # 核心实现
├── tests/ # 测试目录
│ ├── __init__.py # 测试包初始化
│ ├── test_solver.py # 单元测试
│ └── test_images/ # 测试图片
│ ├── bg1.png # 测试背景图1
│ ├── bg2.png # 测试背景图2
│ ├── t1.png # 测试滑块图1
│ └── t2.png # 测试滑块图2
├── setup.py # 安装配置(传统方式)
├── pyproject.toml # 现代 Python 包配置
├── requirements.txt # 依赖列表
├── README.md # 使用文档
├── LICENSE # 许可证
└── .gitignore # Git 忽略规则
开发与测试
安装开发依赖
# 安装所有依赖(包括测试工具)
pip install -r requirements.txt
运行测试
# 运行所有测试
pytest tests/ -v
# 运行特定测试
pytest tests/test_solver.py::TestSliderSolver::test_detect_distance_case1 -v
# 显示详细输出
pytest tests/ -v -s
测试覆盖的功能
- ✅ 基本的距离检测功能
- ✅ 多组图片组合测试
- ✅ 默认路径的标记线绘制
- ✅ 自定义路径的标记线绘制
- ✅ 无效路径的错误处理
- ✅ 初始化参数验证
许可证
本项目采用 Apache-2.0 许可证。详见 LICENSE 文件。
贡献
欢迎提交 Issue 和 Pull Request!
作者
- GitHub: @SkyAerope
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
slider_solver_cv-0.1.0.tar.gz
(10.1 kB
view details)
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file slider_solver_cv-0.1.0.tar.gz.
File metadata
- Download URL: slider_solver_cv-0.1.0.tar.gz
- Upload date:
- Size: 10.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.11.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
00b202b99d9437d9a9cba7738ff95bc215c76e2cd8a797a2ad98edaa7f9e99a3
|
|
| MD5 |
145dbf84e63c53fcc36c37d7ba638962
|
|
| BLAKE2b-256 |
617adee3728909085e01a8052a0e57e7ef1183ac19f2f4842c8a4afa911f4c7b
|
File details
Details for the file slider_solver_cv-0.1.0-py3-none-any.whl.
File metadata
- Download URL: slider_solver_cv-0.1.0-py3-none-any.whl
- Upload date:
- Size: 9.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.11.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a2e2000b35108995048fa5035042d1ad847ca16001a9fe2a743e9f3faaad6c52
|
|
| MD5 |
a513897635ebcf586bbdaf283719f730
|
|
| BLAKE2b-256 |
4d9ee68975887bb32d8636e6168eea8c4ae9569c8792f88cf07e67105cd5b445
|