用 Go 和 Tesseract 实现验证码识别

news/2025/4/1 8:02:38/文章来源:https://www.cnblogs.com/ocr12/p/18800082

一、引言
验证码识别在自动化操作和爬虫领域有着重要作用,Go 语言以其高效和简洁而广受欢迎。通过结合 Tesseract OCR,我们可以在 Go 中快速实现验证码识别。本文将介绍如何用 Go 和 Tesseract 进行验证码识别。

二、环境准备
2.1 安装 Go
首先,确保本地安装了 Go:

go version
2.2 安装 Tesseract OCR
Linux (Ubuntu):

sudo apt update
sudo apt install tesseract-ocr libtesseract-dev
Windows:

下载 Tesseract Windows 版本。

配置环境变量。

macOS:

brew install tesseract
三、创建 Go 项目
创建一个新的 Go 项目:

mkdir captcha_ocr
cd captcha_ocr
go mod init captcha_ocr
安装 Tesseract 绑定:

go get github.com/otiai10/gosseract/v2
四、代码实现
4.1 代码结构
加载验证码图像

图像预处理(可选)

使用 Tesseract 进行验证码识别

打印识别结果

4.2 代码示例
创建 main.go 文件,写入以下代码:

package main

import (
"fmt"
"log"
"github.com/otiai10/gosseract/v2"
)

func recognizeCaptcha(imagePath string) string {
client := gosseract.NewClient()
defer client.Close()

// 设置验证码图片路径
client.SetImage(imagePath)// 设置语言为英文
client.SetLanguage("eng")text, err := client.Text()
if err != nil {log.Fatalf("识别失败: %v", err)
}return text

}

func main() {
captchaPath := "captcha.png" // 替换为验证码图片路径
result := recognizeCaptcha(captchaPath)
fmt.Printf("识别出的验证码: %s\n", result)
}
五、运行程序
构建和运行程序:

go run main.go
六、优化识别率
6.1 字符白名单
设置白名单可以提升识别效率:

client.SetWhitelist("ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789")
6.2 更改页面分割模式
Tesseract 支持多种页面分割模式 (PSM):

client.SetPageSegMode(gosseract.PSM_SINGLE_LINE)
6.3 图像预处理
可以使用 OpenCV 或 ImageMagick 进行图像二值化和去噪,生成更清晰的验证码图像。

预处理完成后再传递给 Tesseract,可以显著提升识别准确率。

七、示例输出
假设验证码图像内容为 "AB123":

识别出的验证码: AB123

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/907921.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java面试基础

一、Java基础语法 1.1 环境搭建与开发 1、JDK、JRE、JVM的关系和区别?(高频plus)JDK:Java Development Kit,Java开发工具包,包含了JRE和一系列Java开发工具。 JRE:Java Runtime Environment,Java程序的运行环境,包含JVM、Java核心类库等。JRE只能用来运行Java应用程序…

day41 Ansible剧本的语法

day41--ansible剧本的学习 1.剧本的主题的内容剧本就是两大部分的知识点 -ansible 模块(以及模块的参数) -yaml语法3.工作以后 维护公司的剧本 -看剧本,看懂了,维护,修改 -修改各种的参数,文件的路径,文件的名字,服务的端口名字(就是该ansible各种的参数,参数的值)2。…

Windows系统迁移用户目录

Windows系统随着使用时间的延长,系统盘空间占用会越来越大,对于一些硬盘空间有限的主机而言,C盘空间剩余就越来越少,稍不注意可以可能就被占满了,导致系统都无法启动。正好我自己的笔记本电脑也遇到了同样的问题,因此就想把C:\Users目录迁移到其他分区中。 在实践中,使用…

iphone---苹果手机传输文件

使用手机,拍了一些照片和剪辑了一些视频,但是总感觉将手机里面的图片及视频传到电脑里面和麻烦,今天试了一下用U盘传,效率还可以,但是其中也遇到了一些问题,就在这里记录下: 传输方法:插入U盘,选择图片或文件,点击【分享】选择【存储到“文件”】点击【左上角浏览】…

Python+硅基流动API实现小说转有声读物

一、注册硅基流动账号获取文本转语音api 1.注册登录硅基流动注册、登录硅基流动查看apikey查看赠送的免费额度点击文档中心2.查看文本转语音api查看文本转语音api查看api使用指南查看文本转语音api的python调用方法二、python实现文本转语音功能 1.python调用api实现文本转语音…

蓝绿部署深度解析:从理论到实践的全方位学习指南

一、蓝绿部署的基本概念 (一)定义 蓝绿部署是一种软件发布策略,通过设置两个相同的环境(“蓝色”和“绿色”),最大限度地减少停机并降低与部署新版本应用程序相关的风险。 (二)工作原理 蓝绿部署的核心思想是将应用程序的部署过程分为两个阶段:测试阶段和生产阶段。在…

Elasticsearch 高级

Elasticsearch 高级建议阅读顺序:Elasticsearch 入门 Elasticsearch 搜索 Elasticsearch 搜索高级 Elasticsearch高级(本文)1. nested 类型 1.1 介绍 Elasticsearch 中的 nested 类型允许你在文档内存储复杂的数据结构,比如一个用户可能有多个地址,或者一个博客文章可能有…

mysql日志写马

mysql日志写马 条件 1.全局变量general_log为ON。 mysql有两个全局变量:general_log指的是日志保存状态,值为ON/OFF,general_log_file指的是日志的保存路径。 只有当general_log为ON时,日志才会被记录进去,所以我们要先打开这个全局变量,使用命令查看全局变量状态‘ show…

滚动部署学习指南:从理论到实践,掌握关键技术和流程

一、滚动部署概述 (一)定义 滚动部署是一种逐步更新应用实例的策略,通过逐批次替换旧版本实例来完成版本升级,以减少服务中断时间并降低更新风险。 (二)应用场景 滚动部署适用于需要高可用性和低风险的软件更新场景,例如 Web 应用程序更新、移动应用后端服务更新以及云原…

ctfshow-web入门-爆破(web21-web28)

web21 打开后要求登录附件是一个密码字典使用bp抓包,将抓到的东西进行base64解码发现是admin:密码的键值对添加payload,padload类型为自定义迭代器,位置1为admin:位置2为导入的字典添加base64编码和取消url编码然后开始攻击,发现长度和其他不同的包,查看响应,发现flagweb…

灰度发布学习大纲:从理论到实践,掌握关键技术和流程

一、灰度发布概述 1. 定义与别名灰度发布:一种渐进式的软件发布策略,也被称为金丝雀发布(Canary Release)。 目的:通过逐步向用户群体推送更新,降低新版本引入的潜在风险,提升用户体验,实现不停机的热迁移。2. 灰度发布的优势降低风险:逐步验证新版本的稳定性。 快速反…

代码随心录第三天|Leecode 203.移除链表元素 707.设计链表 206.反转链表

1、Leecode 203.移除链表元素 题目链接:https://leetcode.cn/problems/remove-linked-list-elements/description/ 题目描述:解题思路:移除操作就是让节点next指针直接指向下下一个节点,因为单链表的特殊性,只能指向下一个节点,所以头节点需要单独考虑,这种方法是直接使…