用 Rust 和 Tesseract OCR 实现英文数字验证码识别

news/2025/11/24 23:46:53/文章来源:https://www.cnblogs.com/ocr12/p/19266234

验证码识别作为图像处理和字符识别的典型应用,常见于自动化测试、数据采集等场景。本文将介绍如何使用 Rust 编写一个简单的 CLI 工具,结合 Tesseract OCR 引擎识别英文数字验证码。

一、环境准备

  1. 安装 Rust

访问 https://rust-lang.org
安装 Rust 工具链:

curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh

安装完成后,运行:

rustc --version
cargo --version

  1. 安装 Tesseract OCR

确保系统已安装 Tesseract:

Linux(Ubuntu/Debian):

sudo apt install tesseract-ocr

macOS:

brew install tesseract

Windows:

从官网下载安装:https://github.com/tesseract-ocr/tesseract

二、创建项目并添加依赖

创建新项目:

cargo new captcha_ocr
cd captcha_ocr

编辑 Cargo.toml 添加依赖:

[dependencies]
image = "0.25.1"
tempfile = "3.9.0"

三、实现验证码识别程序

在 src/main.rs 中输入如下代码:

use std::process::Command;
use std::fs::File;
use image::{GenericImageView, GrayImage, ImageBuffer, Luma};
use std::path::Path;
use tempfile::tempdir;

fn convert_to_grayscale(input: &str, output: &str) -> Result<(), Box> {
let img = image::open(input)?;
let gray = img.to_luma8();
gray.save(output)?;
Ok(())
}

fn run_tesseract(image_path: &str) -> Result<String, Box> {
let output = Command::new("tesseract")
.arg(image_path)
.arg("stdout")
.arg("-l")
.arg("eng")
.arg("--psm")
.arg("7")
.output()?;

if !output.status.success() {return Err("Tesseract failed".into());
}Ok(String::from_utf8_lossy(&output.stdout).trim().to_string())

}

fn main() -> Result<(), Box> {
let input_path = "captcha.png";
let temp_dir = tempdir()?;
let gray_path = temp_dir.path().join("gray_captcha.png");

println!("将图像转换为灰度...");
convert_to_grayscale(input_path, gray_path.to_str().unwrap())?;println!("使用 Tesseract 识别验证码...");
let result = run_tesseract(gray_path.to_str().unwrap())?;println!("识别结果: {}", result);Ok(())

}

四、运行程序

将你的验证码图片命名为 captcha.png,放在项目根目录下,然后运行程序:

cargo run

示例输出:

将图像转换为灰度...
使用 Tesseract 识别验证码...
识别结果: H9Z7P

五、说明与拓展

image crate 用于图像加载与灰度转换;

tesseract 调用通过 Command 执行外部命令行;

使用 tempfile 创建临时目录,避免污染主目录;

--psm 7 告诉 Tesseract 只识别一行文字,适合大多数验证码;

你可以进一步添加图像二值化、噪点过滤、字符分割等图像预处理逻辑,以提升识别精度。

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

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

相关文章

在Java中调用第三方接口并返回第三方页面

在Java中调用第三方接口并返回第三方页面通常涉及到以下几个步骤:‌发送HTTP请求‌:可以使用多种库来发送HTTP请求,如HttpURLConnection、HttpClient(Apache HttpClient 或 Java 11中的HttpClient)等。‌处理响应…

251124省运会结束啦

周一,天气晴朗,还挺热的

用 C# 和 Tesseract 实现英文数字验证码识别

验证码识别是一项常见的图像处理任务,尤其在自动化测试和数据采集场景中非常实用。本文将介绍如何在 C# 环境下,结合 Tesseract OCR 完成英文数字验证码的自动识别。 一、开发环境准备安装 Visual Studio建议使用 Vi…

有了TCP为什么还需要HTTP?再用RPC?这次彻底讲明白了

记得刚工作那会儿,第一次接触RPC概念时,我内心满是疑惑——明明HTTP用得好好的,为什么要搞出个RPC?直到参与了几个微服务项目后,我才真正能理解它们各自的价值。今天,就让我们一起理清这些协议之间的关系。掘金原…

11.24午夜盘思

1、大盘无忧; 2、情绪方面:中水渔业7连板,如果午后没有打开涨停爆量,当然可以当做空间突破,但打开了涨停,说明连板的接力没那么疯狂,我看了一下连板的晋级率,并没有特别高,所以连板是否宽容,还需要再看一天,…

Spring AI 代码分析(七)--文档的处理

文档处理能力分析 请关注微信公众号:阿呆-bot 1. 工程结构概览 Spring AI 提供了完整的文档处理能力,包括文档读取、文本分块和预处理。这些能力是 RAG 应用的基础。 document-readers/ # 文档读取器…

Java调用第三方接口的方法

.方式一:通过JDK网络类Java.net.HttpURLConnection (1)HttpClientUtil工具类 public class HttpClientUtil { //以post方式调用对方接口方法 public static String doPost(String pathUrl, String data){ …

2025留学代写危机应对指南:5家靠谱机构助你重返校园

2025留学代写危机应对指南:5家靠谱机构助你重返校园留学期间因代写被抓,不仅可能面临挂科、处分,更会影响签证合法性与学业连续性,严重时甚至被遣返。这类危机的处理需精准把握海外院校学术诚信政策、申诉流程及沟…

2025美国大学停学应对全攻略:5大靠谱机构助你重返学术轨道

2025美国大学停学应对全攻略:5大靠谱机构助你重返学术轨道美国高校以严格的学术标准和管理体系著称,不少中国留学生因学术表现不佳、出勤问题或文化适应障碍遭遇停学危机。停学不仅打乱留学计划,更可能影响签证状态…

2025美国紧急转学机构推荐深度解析:靠谱机构认准这些核心优势,危机中重启留学之路​

2025美国紧急转学机构推荐深度解析:靠谱机构认准这些核心优势,危机中重启留学之路​美国留学期间,因学业适应、专业匹配、院校环境等问题需要紧急转学的情况屡见不鲜。紧急转学时间紧、院校空缺信息多变,且需精准匹…

第35天(中等题 数据结构)

打卡第三十五天 2道中等题题目:思路:先统计每个数字的出现次数,遍历数组,对于每个数字 i,检查 target - i 是否存在且还有剩余次数,找到一对就减少两个数字的计数 代码: class Solution { public:vector<vec…

2025美国留学求职机构实力解析:你的职场Offer引路人在哪?

2025美国留学求职机构实力解析:你的职场Offer引路人在哪?美国作为全球教育与就业的核心高地,其留学申请的复杂性与职场竞争的激烈程度双重叠加,让专业的留学求职机构成为学子们的重要助力。优质机构不仅能攻克院校…

Universal Fit 3-Button Metal Flip Remote Key (5pcs/lot) – KEYDIY KD NB29-3 for Euro/American Cars

Universal Remote Keys for European & American Vehicles: The KD NB29-3 Solution Problem: The Key Replacement Headache For automotive repair shops and car owners in Europe and America, finding reliab…

2025美国科研中介TOP5解析:从课题对接至成果落地全程护航

2025美国科研中介TOP5解析:从课题对接至成果落地全程护航美国顶尖高校的申请中,优质科研经历已成为核心竞争力,而科研课题匹配、教授资源对接、成果转化等环节的专业性,让美国科研中介成为学子的重要助力。本文综合…

根据缺少的文件查找deb包

有时候运行程序会出现有的文件找不到但是你又不知道在哪个包里面的问题。 下载这个可能需要fq。 sudo apt install apt-file sudo apt-file update # 寻找libncurses.so.5的deb包 sudo apt-file find libncurses.so.5 …

第一个Vue2程序

在文件开头引入 Vue<script src = "../js/vue.js"></script>创建 Vue 托管的容器<div id="app"> </div>创建 Vue 并挂载到 id 为 app 的 html 元素上new Vue({template :…

2025美国留学生求职中介TOP5:厚仁教育领衔,精准匹配名企资源

2025美国留学生求职中介TOP5:厚仁教育领衔,精准匹配名企资源美国作为全球职业发展高地,其求职市场竞争激烈、招聘流程独特,签证政策与身份规划更是留学生求职的关键壁垒。专业的美国求职中介能凭借本土资源、行业经…

2025年11月美国付费实习中介实力榜:谁为你的职场竞争力加码?实战派机构都有这些特质

2025年11月美国付费实习中介实力榜:谁为你的职场竞争力加码?实战派机构都有这些特质美国作为全球职业发展高地,优质实习经历是留学生突破就业壁垒的核心竞争力。但美国企业实习申请流程严苛、人脉资源壁垒高,专业的…

CF1097F Alex and a TV Show

Sol 思路挺曲折的。 以下所有公式均表示模 \(2\) 意义下的答案。 假设 \(s_i\) 表示集合 \(s\) 的 \(i\) 的出现次数对 \(2\) 取模的余数。 如果没有 \(3\) 操作直接 bitset 就可以了。 令 \(V\) 表示值域上限。考虑 \…

Git 最速上手

配置git身份git config --globle user.name "用户名" git config --globle user.email "邮箱"初始化本地 Git 仓库git init将项目文件添加到暂存区git add ." . " 会将当前目录下所有文…