# captcha-ocr **Repository Path**: ArtfulCoder/captcha-ocr ## Basic Information - **Project Name**: captcha-ocr - **Description**: captcha-ocr 是一个用于识别「简单算术验证码」的 Go 库(例如 3+5=?、7-2、4×6 等)。 它并不是通用 OCR 引擎,而是专门为算术验证码场景做的轻量级工具。 - **Primary Language**: Unknown - **License**: MIT - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2026-03-04 - **Last Updated**: 2026-03-10 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # captcha-ocr

captcha-ocr logo

captcha-ocr

简单算术验证码识别 Golang 库

Go Version License Gitee

一个轻量级、易用、无第三方依赖的算术验证码识别 Golang 库

--- ## 📖 项目简介 `captcha-ocr` 是一个专门用于识别和求解简单算术验证码的 Golang 库(例如 `3+5=?`、`7-2`、`4×6` 等)。本项目不是通用 OCR 引擎,而是针对算术验证码场景进行了专门优化。 ### ✨ 核心特性 - ✅ **轻量级实现** - 无第三方依赖,仅使用 Go 标准库 - ✅ **简单易用** - 提供简洁的 API 接口,几行代码即可使用 - ✅ **模板匹配** - 基于模板匹配的高精度识别算法 - ✅ **多运算符支持** - 支持加、减、乘等基本运算符 - ✅ **图像预处理** - 完整的图像预处理流程(灰度化、二值化、字符分割) - ✅ **嵌入式模板** - 支持内置模板,无需外部文件 - ✅ **灵活配置** - 支持自定义模板目录 - ✅ **完整文档** - 详细的 API 文档和使用示例 - ✅ **高性能** - 处理速度快,适合实时应用场景 --- ## 🚀 快速开始 ### 安装 ```bash go get gitee.com/ArtfulCoder/captcha-ocr/captcha@latest ``` ### 基础用法 ```go package main import ( "fmt" "log" "gitee.com/ArtfulCoder/captcha-ocr/captcha" _ "image/png" // 使 image.Decode 支持 PNG ) func main() { imgPath := "./images/test.png" // 识别验证码并计算结果 result, err := captcha.RecognizeAndCalc(imgPath) if err != nil { log.Fatalf("识别失败: %v", err) } fmt.Println("验证码结果:", result) } ``` 运行示例: ```bash go run ./cmd/demo ``` --- ## 📚 API 文档 ### 核心函数 #### RecognizeAndCalc 使用内置模板识别验证码表达式并计算结果。 ```go func RecognizeAndCalc(imgPath string) (int, error) ``` **参数**: - `imgPath`: 验证码图片路径 **返回值**: - `int`: 计算结果 - `error`: 错误信息 #### RecognizeAndCalcWithTemplates 使用指定目录的模板识别验证码表达式并计算结果。 ```go func RecognizeAndCalcWithTemplates(imgPath, templateDir string) (int, error) ``` #### RecognizeExpr 使用内置模板识别验证码表达式。 ```go func RecognizeExpr(imgPath string) (rune, rune, rune, error) ``` **返回值**: - `rune`: 第一个数字 - `rune`: 运算符 - `rune`: 第二个数字 - `error`: 错误信息 ### 图像处理函数 #### LoadImage 加载图片文件。 ```go func LoadImage(path string) (image.Image, error) ``` #### ToGray 将图片转换为灰度图。 ```go func ToGray(src image.Image) *image.Gray ``` #### Binarize 对灰度图进行二值化处理。 ```go func Binarize(src *image.Gray, threshold uint8) *image.Gray ``` --- ## 🔧 技术原理 ### 验证码识别流程 1. **图像加载与预处理** - 加载图像文件 - 转换为灰度图像 - 二值化处理(阈值 180) - 分割字符(针对 130×28 尺寸的验证码进行固定分割) 2. **字符识别** - 加载字符模板(数字 0-9 和运算符) - 对每个分割出的字符与模板进行匹配 - 使用 L1 像素差算法计算相似度 - 选择最相似的模板作为识别结果 3. **表达式计算** - 解析识别出的数字和运算符 - 执行算术运算 - 返回计算结果 ### 支持的运算符 | 运算符 | 说明 | | ------ | ---------------- | | `+` | 加法 | | `-` | 减法 | | `×` | 乘法 | | `*` | 乘法(替代符号) | --- ## 📁 项目结构 ``` captcha-ocr/ ├── captcha/ # 核心库(package "captcha") │ ├── api.go # API 接口 │ ├── preprocess.go # 图像预处理 │ ├── template.go # 模板加载与字符识别 │ ├── solve.go # 表达式计算 │ └── templates/ # 字符模板图片 ├── char_samples/ # 字符样本/训练样本 ├── cmd/ # 命令行工具和演示程序 │ ├── demo/ # 演示程序 │ ├── exportchars/ # 导出字符工具 │ └── solve/ # 求解工具 ├── images/ # 测试用的验证码图片 ├── docs/ # 文档和资源 │ └── logo.svg # 项目 Logo ├── go.mod # Go 模块依赖管理 ├── LICENSE # MIT 许可证 └── README.md # 项目说明文档 ``` --- ## 🎯 使用场景 - **自动化测试** - 自动识别和解决验证码,用于测试流程 - **Web 服务** - 集成到 Web 服务中,提供验证码自动识别功能 - **爬虫工具** - 用于需要处理验证码的爬虫场景 - **批量处理** - 批量处理大量验证码图片 --- ## ⚠️ 局限性 - 仅适用于简单的算术验证码,不是通用 OCR - 准确性高度依赖于模板质量和图像质量 - 最适合固定尺寸、固定字体的验证码图片 - 默认针对 130×28 尺寸的验证码优化 - 对复杂背景或噪声干扰的处理能力有限 --- ## 🛠️ 开发 ### 环境要求 - Go 1.16+ ### 运行测试 ```bash go test ./... ``` ### 代码检查 ```bash go vet ./... ``` --- ## 🤝 贡献 欢迎贡献代码!请查看 [贡献指南](CONTRIBUTING.md) --- ## 📄 许可证 本项目采用 MIT 许可证 - 查看 [LICENSE](LICENSE) 文件了解详情 --- ## 📧 联系方式 - 作者: ArtfulCoder - Email: undefined788@qq.com - Gitee: https://gitee.com/ArtfulCoder --- ## 🙏 致谢 感谢 Go 语言标准库提供的强大图像处理能力。 ---

Built with ❤️ by ArtfulCoder