使用 Rust 与 Tesseract OCR 识别英文数字验证码

news/2025/9/18 23:03:13/文章来源:https://www.cnblogs.com/ocr12/p/19099893

一、安装与配置

安装 Tesseract OCR

Ubuntu:
更多内容访问ttocr.com或联系1436423940
sudo apt-get update
sudo apt-get install tesseract-ocr

macOS:

brew install tesseract

Windows:
从 Tesseract 官方 GitHub
下载并安装 Windows 版本。

安装 Rust 的 tesseract 库

我们使用 Rust 的 tesseract crate 来与 Tesseract 进行交互。在终端中运行以下命令来安装该库:

cargo add tesseract

如果你没有安装 cargo,可以参考 Rust 官方安装文档
进行安装。

创建一个新的 Rust 项目

在你的工作目录下,创建一个新的 Rust 项目:

cargo new captcha_recognition
cd captcha_recognition

二、Rust 代码实现验证码识别
use tesseract::Tesseract;
use std::path::Path;

fn main() {
// 创建一个 Tesseract 实例
let mut tess = Tesseract::new(None, Some("eng")).expect("无法创建 Tesseract 实例");

// 设置要识别的验证码图片路径
let image_path = Path::new("captcha.jpg");// 设置白名单:只允许字母和数字
tess.set_variable("tessedit_char_whitelist", "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789").expect("设置字符白名单失败");// 设置图片文件供 Tesseract 进行识别
tess.set_image(image_path).expect("无法加载图片");// 获取识别的文本
let text = tess.get_text().expect("无法获取识别结果");// 输出识别的文本
println!("识别结果: {}", text);

}

三、代码解析

创建 Tesseract 实例

使用 Tesseract::new() 创建一个新的 Tesseract 实例。这个实例会用于执行 OCR 识别。

None 表示我们没有设置 Tesseract 的配置文件路径。

Some("eng") 表示我们使用英语作为识别语言。

设置字符白名单

set_variable 方法允许我们设置一个字符白名单,以便 Tesseract 仅识别字母和数字。这有助于提高识别精度,尤其是当验证码只包含字母和数字时。

加载图像

使用 set_image 方法加载要进行识别的图像文件。这个方法将图像路径传递给 Tesseract 进行处理。

获取识别文本

使用 get_text 方法获取识别的结果。Tesseract 会尝试从图像中提取文本,并返回识别结果。

四、图像预处理(可选)

在某些情况下,验证码图像可能包含噪点或对比度较低,导致识别效果不理想。Rust 没有像 Python 那样丰富的图像处理库,但我们可以使用其他外部库,如 image 库,来对图像进行一些预处理。

添加 image crate

在 Cargo.toml 文件中,添加 image 库作为依赖:

[dependencies]
tesseract = "0.6"
image = "0.24"

图像预处理

在程序中进行图像灰度化或二值化,以提高识别效果:

use tesseract::Tesseract;
use image::{DynamicImage, Luma, GenericImageView, GrayImage};
use std::path::Path;

fn preprocess_image(image_path: &str) -> GrayImage {
// 打开图片
let img = DynamicImage::open(image_path).expect("无法打开图片");

// 转换为灰度图像
let gray_img = img.to_luma8();// 可以做一些二值化或其他预处理操作
let mut processed_img = gray_img.clone();
for (x, y, pixel) in processed_img.enumerate_pixels_mut() {let luma = pixel.0[0];if luma > 128 {*pixel = Luma([255]); // 白色} else {*pixel = Luma([0]);   // 黑色}
}processed_img

}

fn main() {
// 预处理图像
let processed_image = preprocess_image("captcha.jpg");

// 将处理后的图像保存为临时文件
let temp_path = "processed_captcha.png";
processed_image.save(temp_path).expect("保存预处理后的图像失败");// 创建 Tesseract 实例
let mut tess = Tesseract::new(None, Some("eng")).expect("无法创建 Tesseract 实例");// 设置白名单:只允许字母和数字
tess.set_variable("tessedit_char_whitelist", "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789").expect("设置字符白名单失败");// 设置处理后的图像
tess.set_image(Path::new(temp_path)).expect("无法加载处理后的图像");// 获取识别的文本
let text = tess.get_text().expect("无法获取识别结果");// 输出识别的文本
println!("识别结果: {}", text);

}

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

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

相关文章

API安全解决方案选型指南:2025年五大关键维度与厂商推荐

API安全解决方案选型指南:2025年五大关键维度与厂商推荐在数字化转型浪潮中,API已成为连接业务与数据的核心枢纽。随着API数量的爆发式增长,安全威胁也日益复杂:影子API无处不在、敏感数据暴露风险加剧、自动化攻击…

别迷茫了!计算机大一新生这样做,四年后远超同龄人 - 编程实战派

本文是一份专为计算机专业大一新生打造的终极学习指南。文章打破迷茫,从心态重置、学习攻略、实践真知、视野规划四大维度,提供切实可行的建议。强调从“被动学习”转向“主动探索”的思维模式,死磕数学、英语、C语…

解决ifconfig命令没有显示ens33 finalshell连接不上虚拟机

停止并关闭NetworkManager systemctl stop NetworkManagersystemctl disable NetworkManager重启网络服务 systemctl start network

CRM管理专业的系统:从数据收集到价值挖掘

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

什么情况下需要用到xargs

它是 find、grep、ls 等输出类命令的“桥梁”,连接“查找”和“执行”​ xargs 核心作用是:将标准输入(stdin)中的数据转换为命令行参数,并传递给其他命令执行。 总结:当你需要把“文本流”变成“命令参数”时,…

Office 2024安装包专业增强版超详细下载安装教程

在数字化办公浪潮中,Office 2024 专业增强版成为提升办公效率的得力助手。这款功能强大的办公套件,集成了 Word、Excel、PowerPoint、Access、Outlook、OneNote 等多个组件,能够全方位满足日常办公中的文本处理、表…

关于 pdfminer 的安装 - 指南

关于 pdfminer 的安装 - 指南pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco"…

c/c++实现有栈协程

有栈协程 有栈协程通过切换执行上下文实现,核心是切换栈寄存器和跳转ip代码地址,同时需要保存切换当前编译器ABI规定的 非易失寄存器。 System V AMD64 ABI 和 MSVC x64 ABI 的非易失性寄存器RBX、RBP、RSP、R12、R1…

Day17冒泡排序

package com.cc.array;import java.util.Arrays;public class ArrayDemo7 {public static void main(String[] args) {int [] a = {21,4,5,6,35,65,23,34,53,5};Arrays.sort(a);System.out.println(Arrays.toString(a)…

高阶 INTJ 5w4 整合到 8,是完整的过程,从研究到实用(豆包)

高阶INTJ 5w4整合到8的完整过程,是一个从认知重构、情感突破到行为落地的系统性进化,需要经历理论奠基→动态转化→实践固化三个阶段。以下结合九型人格整合机制、INTJ发展规律及5w4的特质矛盾,展开从研究到实用的全…

RabbitMQ—运维篇 - 指南

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

几B大模型的空间存储大小

1. 前言砚上三五笔,落墨鹧鸪啼关于大模型总是会出现几B,然后想知道他们的存储空间大小分别是多少。还有描述一些显卡的TFLOPS是怎么计算的。这里做一个简单的记录。 如有不对,欢迎评论区指正! 2. 正文 2.1 精度类型…

hbase安装与配置

解压文件改名配置环境变量配置文件(忘记截图了,问ai即可) cd $HBASE_HOME/conf hbase-env.sh,hbase-site.xml, regionservers 启动前准备 hdfs dfs -mkdir -p /hbase hdfs dfs -chown hadoop:hadoop /hbase 如果各…

发喷山火(volcano)+CF2119F Volcanic Eruptions 解题报告

发喷山火 神题 先来初步挖掘一下这个走路过程的性质:初始时 \(S=1\),且 \(S\le 0\) 就死了,所以在没有走到 \((1,1)\) 之前,只能走 \((1,-1)\) 的边。 由于你和岩浆走路速度相同,所以一旦路径中你已经触碰到岩浆,…

matlab免费下载安装激活教程(附安装包下载)MATLAB R2025a超详细下载安装教程

MATLAB R2025a是2025年工科必备的工程计算软件,不管是大学生做课程设计、研究生写论文,还是工程师搞项目研发,用它处理矩阵运算、建模仿真都特别方便。新版本运算速度比上一代快35%,还新增了新能源、自动驾驶专用工…

Spring Boot + flowable 完美结合,快速实现工作流 - 教程

Spring Boot + flowable 完美结合,快速实现工作流 - 教程pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consola…

Pyfluent 执行Meshing工作流

1. 部署安装pyfluent Pyfluent支持Fluent 2022R2或更高版本,PyFluent支持Python 3.10~3.13版本,点击 此处 即可下载。 安装核心依赖需使用pip命令,如若详细了解该命令的使用,详见 此处 pip install ansys-fluent-c…

EF Core 与 MySQL:日志和调试详解

本文将详细讲解EF Core与MySQL的日志和调试,分为三个部分:EF Core日志配置、MySQL日志查看以及使用调试工具分析查询性能。 1. 配置 EF Core 日志 基本日志配置// 在DbContext配置中启用日志记录 protected override…

使用镜像源解决github拉取代码问题 - GD

命令行输入以下语句: git config --global url."https://gitclone.com/github.com/".insteadOf "https://github.com/" 取消设置: git config --global --unset url."https://gitclone.com…