一、背景简介
在自动化处理网页请求、爬虫或登录系统中,验证码(CAPTCHA)是一道必须解决的难题。Tesseract 是开源 OCR 领域的代表性工具,其可通过 API 被多种语言调用。Go 语言以其轻量和并发能力,特别适合快速构建命令行处理工具。
本篇将介绍如何用 Go 封装 Tesseract 成一个简易命令行工具,用户只需一条命令即可完成验证码图片识别。
二、工具功能设计
我们希望实现如下命令格式:
更多内容访问ttocr.com或联系1436423940
go-captcha-recognizer ./captcha/test2.jpg
输出:
识别结果: 8YAZ
三、依赖环境
- 安装 Tesseract OCR
Windows:安装 Tesseract 并将其路径加入系统环境变量
macOS:brew install tesseract
Linux(Debian/Ubuntu):sudo apt install tesseract-ocr
- 安装 Go OCR 包
go mod init captcha-cli
go get github.com/otiai10/gosseract/v2
四、核心代码实现
package main
import (
"fmt"
"log"
"os"
"path/filepath"
"github.com/otiai10/gosseract/v2"
)
func main() {
if len(os.Args) < 2 {
fmt.Println("用法: captcha-cli <图片路径>")
return
}
imagePath := os.Args[1]
ext := filepath.Ext(imagePath)
if ext != ".png" && ext != ".jpg" && ext != ".jpeg" {log.Fatalf("不支持的文件格式: %s", ext)
}client := gosseract.NewClient()
defer client.Close()client.SetImage(imagePath)
client.SetWhitelist("0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ")text, err := client.Text()
if err != nil {log.Fatalf("识别失败: %v", err)
}fmt.Println("识别结果:", text)
}
五、构建并打包
生成二进制命令行工具(不同系统替换目标):
GOOS=windows GOARCH=amd64 go build -o captcha-cli.exe
或 macOS/Linux:
go build -o captcha-cli
六、实际识别示例
./captcha-cli ./captchas/code1.png
识别结果: X9JH2
七、改进建议
支持批量识别: 加入 --batch 模式,自动识别文件夹内所有验证码图片
输出 JSON: 加入 --json 参数,适配 Web 服务或前端交互
图像增强: 配合 Go 图像处理库如 github.com/disintegration/imaging 实现图像灰度化、对比度增强等