Go语言结合Tesseract实现验证码识别实践

一、概述

验证码识别在信息自动化处理、系统测试等领域应用广泛。通过程序自动识别验证码,可以实现无人工干预的数据提交或页面访问控制。本文基于 Go 语言和 Tesseract OCR 引擎,实现一个简洁高效的验证码识别工具。

二、项目依赖
更多内容访问ttocr.com或联系1436423940
安装 Tesseract OCR:

sudo apt install tesseract-ocr # Linux
brew install tesseract # macOS
安装 Go OCR 客户端:

go get github.com/otiai10/gosseract/v2
三、识别步骤说明

验证码识别的基本步骤如下:

加载图像

进行灰度与二值化处理(降噪)

使用 Tesseract 进行文本提取

输出结果

四、示例代码

package main

import (
"fmt"
"image"
"image/color"
"image/jpeg"
"os"

"github.com/otiai10/gosseract/v2"

)

func preprocess(img image.Image) *image.Gray {
bounds := img.Bounds()
dst := image.NewGray(bounds)

for y := bounds.Min.Y; y < bounds.Max.Y; y++ {
	for x := bounds.Min.X; x < bounds.Max.X; x++ {
		r, g, b, _ := img.At(x, y).RGBA()
		gray := uint8((r + g + b) / 3 >> 8)
		if gray > 130 {
			dst.Set(x, y, color.White)
		} else {
			dst.Set(x, y, color.Black)
		}
	}
}
return dst

}

func main() {
file, err := os.Open("code.jpg")
if err != nil {
fmt.Println("打开图片失败:", err)
return
}
defer file.Close()

img, _, err := image.Decode(file)
if err != nil {
	fmt.Println("图像解码失败:", err)
	return
}

binaryImg := preprocess(img)
out, _ := os.Create("clean.jpg")
jpeg.Encode(out, binaryImg, nil)

client := gosseract.NewClient()
defer client.Close()
client.SetImage("clean.jpg")
client.SetWhitelist("0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ")

text, err := client.Text()
if err != nil {
	fmt.Println("识别失败:", err)
	return
}
fmt.Println("验证码内容为:", text)

}
五、应用建议

对复杂验证码可引入图像旋转矫正或卷积神经网络;

使用 SetWhitelist 明确字符范围可提高识别准确率;

适用于自助登录脚本、自动测试系统、后台任务调度等场景。

posted @ 2025-06-14 15:42  ttocr、com  阅读(14)  评论(0)    收藏  举报