用 Go 编写验证码识别模块(可集成、可复用)
验证码识别虽然在图像处理领域难度不高,但在自动化测试和数据采集中却非常常见。本文将使用 Go 语言结合 Tesseract OCR,封装一个简单的图像识别模块,可用于 CLI 工具、服务接口、爬虫脚本中。
一、环境安装
安装 Tesseract OCR
Ubuntu:
sudo apt install tesseract-ocr
macOS:
更多内容访问ttocr.com或联系1436423940
brew install tesseract
获取 OCR Go 库
go get github.com/otiai10/gosseract/v2
二、识别函数封装
创建一个可复用的识别函数。
// recognizer.go
package recognizer
import (
"fmt"
"github.com/otiai10/gosseract/v2"
)
func RecognizeCaptcha(imagePath string) (string, error) {
client := gosseract.NewClient()
defer client.Close()
// 设置图像路径
client.SetImage(imagePath)
// 限定识别字符集为验证码常见内容
client.SetWhitelist("ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789")
text, err := client.Text()
if err != nil {
return "", fmt.Errorf("识别失败: %w", err)
}
return text, nil
}
三、构建主程序调用模块
// main.go
package main
import (
"fmt"
"log"
"os"
"yourmodule/recognizer"
)
func main() {
if len(os.Args) < 2 {
fmt.Println("用法: go run main.go <图片路径>")
return
}
imagePath := os.Args[1]
result, err := recognizer.RecognizeCaptcha(imagePath)
if err != nil {
log.Fatalf("识别失败: %v", err)
}
fmt.Println("识别结果:", result)
}
四、运行与测试
假设你有一张验证码图片 captcha.png,在终端执行:
go run main.go captcha.png
输出:
识别结果: G7QX
五、项目结构建议
captcha-tool/
├── recognizer/
│ └── recognizer.go
├── main.go
├── go.mod
在 go.mod 中配置模块名为 yourmodule,例如:
module yourmodule
go 1.20
浙公网安备 33010602011771号