使用 Go 语言和 Tesseract 实现验证码识别

news/2024/12/17 13:18:29/文章来源:https://www.cnblogs.com/ocr12/p/18612143

步骤
安装 Tesseract OCR 引擎

在使用 Go 编写验证码识别时,仍然需要安装 Tesseract OCR 引擎。你可以通过以下命令在 Linux 上安装 Tesseract:

bash
更多内容访问ttocr.com或联系1436423940
sudo apt-get update
sudo apt-get install tesseract-ocr
对于 macOS,可以通过 Homebrew 安装:

bash

brew install tesseract
安装完成后,可以通过 tesseract -v 来验证是否成功安装。

安装 Go 的 Tesseract 包

Go 语言有一个封装的 Tesseract 包,名为 github.com/otiai10/gosseract。你可以通过以下命令安装它:

bash

go get github.com/otiai10/gosseract
编写 Go 代码

创建一个 Go 文件,假设为 captcha-recognition.go,并编写以下代码:

go

package main

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

func main() {
// 创建 Tesseract 客户端
client := gosseract.NewClient()
defer client.Close()

// 设置图像路径
imagePath := "path_to_your_captcha_image.png" // 替换为你的验证码图片路径// 设置 Tesseract 语言(可选,默认是英文)
err := client.SetLanguage("eng") // 可以改为其他语言,如 "chi_sim" 用于简体中文
if err != nil {log.Fatalf("设置语言失败: %v\n", err)
}// 设置图片文件
err = client.SetImage(imagePath)
if err != nil {log.Fatalf("加载图片失败: %v\n", err)
}// 获取识别结果
text, err := client.Text()
if err != nil {log.Fatalf("识别失败: %v\n", err)
}// 输出识别的验证码
fmt.Println("识别的验证码是: ", text)

}
运行代码

将验证码图片放置在 Go 项目目录中,或者将 imagePath 变量中的路径替换为你的验证码图片路径。
执行 Go 程序:
bash

go run captcha-recognition.go
你将看到控制台输出识别到的验证码文本,或者错误信息。

代码解析:
gosseract.NewClient():这是创建 Tesseract 客户端的函数,用于与 Tesseract 引擎进行交互。
SetImage():这个方法用来指定要识别的图像文件。
SetLanguage():指定使用的语言模型,默认为英文。如果需要识别其他语言的验证码,可以设置为对应的语言代码,例如 chi_sim(简体中文)。
Text():返回识别结果的文本内容。
可选的图像预处理:
为了提高识别的准确度,特别是当验证码图像有噪声或者不清晰时,可以对图像进行预处理。Go 提供了丰富的图像处理库,例如 image 和 image/color 等,你可以在读取图像后对其进行二值化、去噪、调整对比度等处理。

go

package main

import (
"image"
"image/color"
"log"
"os"
"github.com/nfnt/resize"
_ "image/jpeg"
_ "image/png"
)

func preprocessImage(imagePath string) (image.Image, error) {
file, err := os.Open(imagePath)
if err != nil {
return nil, err
}
defer file.Close()

img, _, err := image.Decode(file)
if err != nil {return nil, err
}// 将图像转换为灰度图像
bounds := img.Bounds()
grayImage := image.NewGray(bounds)
for y := bounds.Min.Y; y < bounds.Max.Y; y++ {for x := bounds.Min.X; x < bounds.Max.X; x++ {c := img.At(x, y)grayImage.Set(x, y, color.GrayModel.Convert(c))}
}// 可以添加更多的处理步骤,如二值化、去噪等
// 这里只做了灰度化的简单处理,具体可以根据需求添加。return grayImage, nil

}
在主函数中,你可以调用 preprocessImage() 来预处理图像,然后将处理后的图像传递给 Tesseract:

go

// 图像预处理
processedImage, err := preprocessImage(imagePath)
if err != nil {
log.Fatalf("图像预处理失败: %v\n", err)
}

// 设置预处理后的图像
client.SetImageFromImage(processedImage)

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

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

相关文章

C#调用Python代码的方式(二),以PaddleOCR-GUI为例

前言 前面介绍了在C#中使用Progress类调用Python脚本的方法,但是这种方法在需要频繁调用并且需要进行数据交互的场景效果并不好,因此今天分享的是C#调用Python代码的方式(二):使用pythonnet调用Python代码。 pythonnet介绍 Python.NET 是一个包,为 Python 程序员提供了与…

在线教育系统厂家电话

为了方便您直接对接相关业务,下面提供几个在线教育相关企业的联系电话,请自行选择合适的服务商联系。若想直接获取更多信息或定制化的产品方案,请拨打以下联系电话:- 顺企网在线教育直播软件开发平台联系人:张生;联系方式:电话 15989102540(说明您来自顺企网,可获得优…

如何解决Git合并冲突?

讲个故事先: 一个晴朗的日子,Alex 把远程版本库的修改拉到他的本地版本库。 他修改了名为 abc.txt 的文件,将其暂存(staged),提交(committed),最后推送(pushed)回远程版本库。 同时,Tina 不知道 Alex 对abc.txt文件的修改,在该文件的 相同区域 做了一些修改,并尝…

MongoDB备份脚本

#!/bin/bash #backup MongoDB #mongodump命令路径 DUMP=/home/mongodb/bin/mongodump #临时备份目录 OUT_DIR=/home/mongodb_bak/mongodb_bak_now #备份存放路径 TAR_DIR=/home/mongodb_bak/mongodb_bak_list #获取当前系统时间 DATE=`date +%Y_%m_%d` #数据库账号 DB_USER=roo…

SQL Server创建用户一直提示用户已存在的解决办法

背景:复制的老数据库,创建账号onlyread时,一直提示数据库里有这个用户名。报错如下:“用户、组或角色onlyread在当前数据库中已存在。”解决方法: 1. 查询数据库,是否有这个用户 -- 查询是否存在指定的用户、组或者角色 SELECT * FROM sys.database_principals WHERE na…

jquery目录树插件

file-explore是一款简单的jquery目录树插件。它使用嵌套的无序列表作为目录树的结构,结合font-awesome图标可以制作出非常漂亮的jquery目录树效果。在线预览 下载使用方法 在页面中引入file-explore.css和font-awesome文件,以及jquery和file-explore.js文件。<link rel=&…

SQL Server的数据库备份与还原

数据库备份分类 备份分类完全备份:(常用方式)备份整个数据库,包含用户表、系统表、索引、视图和存储过程等所有数据库对象。 因而,占用不少时间和空间,这种方式不建议太频繁,一般一周一次。差异备份:也叫增量备份。它不使用事务日志,相反,它使用整个数据库的一种新映…

vue-实现组件是否显示还是隐藏

比如我们在home页面需要这个标签在city页面不需要这个标签我们可以在router里面添加meta属性在需要的组件页面导入route实力获取meta属性的值

教育行业办公软件排行榜揭晓!J 人备考该选谁?

在教育领域,高效的办公软件对团队协作和个人学习意义重大。尤其对于 J 人,其偏好秩序与规划,可视化团队协作办公软件能助其在教育教培团队运作和个人公考备考中精准把控进程。本文将盘点 6 款此类软件,助力相关人士做出合适选择。 一、板栗看板 板栗看板是教育办公软件中的…

github克隆代码报错

报错一: git clone https://github.com/PanJiaChen/vue-admin-template.git报错 Cloning into vue-admin-template... fatal: unable to access https://github.com/PanJiaChen/vue-admin-template.git/: Failed to connect to github.com port 443 after 21219 ms: Timed out…

Vulnhub 靶场 DevGuru: 1

前期准备 靶机地址:https://www.vulnhub.com/entry/devguru-1,620/ kali攻击机IP:192.168.11.128 靶机IP:192.168.11.130 一、信息收集 1.使用nmap对目标靶机进行扫描开了 22、80、8585 端口。发现 git 目录,且提示做解析: 192.168.11.130 devguru.local 2. 80 端口发现用…

proxifier 抓取指定客户端软件数据包

背景 想要抓取指定Windows 客户端软件的数据包;过滤掉全局代理的无序数据包。 下载地址 https://www.proxifier.com/ 配置步骤 1. 配置 Proxy Servers2. 代理服务配置 3.Proxification Rules 配置需要监听的小程序,选择上一步配置的代理服务 任务管理器章选择想要抓包的进程…