首页 > 其他分享 >Rust 和 Tesseract OCR 实现英文数字验证码识别

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

时间:2025-01-12 23:22:27浏览次数:1  
标签:OCR Tesseract image 验证码 识别 Rust tess

Rust 是一门注重内存安全并具有高性能的系统编程语言。它通过并发机制和零成本抽象提供了强大的功能。我们可以利用 Rust 的库来调用 Tesseract OCR 实现验证码识别。

一、安装与配置
安装 Tesseract OCR

同样,首先要在系统中安装 Tesseract OCR。

Ubuntu(Linux):

bash

sudo apt update
sudo apt install tesseract-ocr
macOS:

bash
更多内容访问ttocr.com或联系1436423940
brew install tesseract
Windows: 下载并安装 Tesseract 的 Windows 安装包。

安装 Rust 的 Tesseract 绑定库

我们可以使用 Rust 的库 tesseract 来调用 Tesseract OCR 引擎。首先,在项目中添加 tesseract 依赖。

在 Cargo.toml 文件中添加以下依赖:

toml

[dependencies]
tesseract = "0.6.0"
设置 Rust 项目

在你的 Rust 项目中,使用以下命令创建一个新项目(如果你还没有项目的话):

bash

cargo new captcha_recognition
cd captcha_recognition
然后将 tesseract 添加到 Cargo.toml。

二、Rust 代码实现验证码识别
以下是完整的 Rust 代码,用来识别验证码中的英文数字字符:

rust

use tesseract::Tesseract;
use std::error::Error;

fn main() -> Result<(), Box> {
// 创建 Tesseract 实例
let mut tess = Tesseract::new(None, Some("eng"))?;

// 设置白名单,限制只识别字母和数字
tess.set_variable("tessedit_char_whitelist", "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789")?;

// 加载验证码图片
tess.set_image("captcha.jpg")?;

// 获取识别的文本
let text = tess.get_text()?;

// 输出识别结果
println!("识别结果: {}", text);

Ok(())

}
三、代码解析
创建 Tesseract 实例: 我们通过 Tesseract::new(None, Some("eng")) 创建了一个 Tesseract OCR 实例,指定语言为英文(eng)。

设置字符白名单: 使用 tess.set_variable("tessedit_char_whitelist", "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789") 来限制 Tesseract 只识别字母和数字,减少干扰字符。

加载验证码图片: 使用 tess.set_image("captcha.jpg") 加载我们要识别的验证码图片。

提取识别结果: tess.get_text() 用来从图像中提取文本,返回识别出的验证码内容。

四、处理图像预处理
与其他语言一样,验证码图片可能包含噪声或模糊,影响识别效果。在 Rust 中,可以使用图像处理库如 image 来对图像进行预处理。

安装图像处理库:

在 Cargo.toml 中添加 image 库:

toml

[dependencies]
image = "0.24"
图像预处理:

下面是对图像进行灰度化和二值化的代码:

rust

use image::{DynamicImage, GenericImageView, Luma, LumaA};
use tesseract::Tesseract;

fn preprocess_image(image_path: &str) -> Result<DynamicImage, Box> {
// 打开图像
let img = image::open(image_path)?;

// 转换为灰度图像
let gray_img = img.to_luma8();

// 将图像转换为二值化图像(0 和 255)
let binary_img = gray_img.map(|p| if p[0] > 128 { 255 } else { 0 });

// 保存处理后的图像(可选)
binary_img.save("processed_captcha.png")?;

// 返回处理后的图像
Ok(DynamicImage::ImageLuma8(binary_img))

}

fn main() -> Result<(), Box> {
// 预处理图像
preprocess_image("captcha.jpg")?;

// 创建 Tesseract 实例
let mut tess = Tesseract::new(None, Some("eng"))?;

// 设置白名单
tess.set_variable("tessedit_char_whitelist", "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789")?;

// 加载处理后的图像
tess.set_image("processed_captcha.png")?;

// 获取识别的文本
let text = tess.get_text()?;

// 输出识别结果
println!("识别结果: {}", text);

Ok(())

}

标签:OCR,Tesseract,image,验证码,识别,Rust,tess
From: https://www.cnblogs.com/ocr12/p/18667589

相关文章

  • Go 语言与 Tesseract OCR 实现英文数字验证码识别
    Go语言本身不直接支持图像识别,但可以通过调用TesseractOCR引擎来进行图像识别。我们可以使用Go的tesseract包来实现这一功能。一、安装与配置安装TesseractOCR首先,你需要在系统中安装TesseractOCR。安装方法和前面一样:Ubuntu(Linux):bash更多内容访问ttocr.com或联......
  • Go 语言与 Tesseract OCR 识别英文数字验证码
    一、安装与配置安装TesseractOCR你需要先安装TesseractOCR引擎。具体步骤如下:Ubuntu:bashsudoapt-getupdatesudoapt-getinstalltesseract-ocrmacOS:bashbrewinstalltesseractWindows:可以从TesseractGitHub下载并安装Tesseract。安装Go的Tesseract......
  • rust学习十六.3、并发-线程之间共享数据
    线程之间共享数据,即go中部分人所憎恶的方式!然而,这个方式并非没有其优点,否则操作系统也不提供这种实现方式。 闲言少序,上正文!一、概述 *1.当我们大谈基于信道通信时,应该指的是应用级别。如果是操作系统,应该还是会有多种措施的,否则rust的源头在哪里来着。 *2.rust共享内......
  • 【Rust】枚举与模式匹配
    目录思维导图一、概述1.枚举的定义与使用2.特殊枚举:Option4.模式匹配5.iflet构造二、枚举1.枚举的定义与作用2.IP地址的枚举示例示例代码3.结构体与枚举的组合示例代码4.枚举变体的灵活性示例代码5.枚举的方法代码示例:6.Option枚举的优势标准库......
  • Java生成Word文档之 XDocReport 和 Poi-tl
    近期参与的多个项目中,均涉及根据预定义模板生成Word文档以供前端下载的需求。以往,我们通常采用将Word文档转换为XML格式,并通过代码赋值变量的方式来实现这一功能。尽管此方法在技术层面可行,但当面对篇幅较长且包含大量变量的文档时,其弊端便显露无遗:代码冗长繁杂,模板维护困难,不利......
  • 【PaddleOCR 踩坑记录】FatalError: `Illegal instruction` is detected by the opera
    背景需要使用GPU版的PaddleOCR安装步骤如下:参考官方文档condacreate--nameocrcondaactivateocrpipinstallpaddlepaddle-gpupipinstallpaddleocr问题出现报错如下:(ocr)user@user:~/Desktop/ocr$paddleocr--image_dir./imgs/11.jpg--use_angle_cls......
  • 移植Android百度OCR:百度超轻量级中文OCR Android模型整合到自有工程中的问题与解决
    文章目录移植百度超轻量级中文OCR模型到Android项目的踩坑经历步骤一:下载并准备模型工程目录简介TestInferOcrTask步骤二:问题总结软件闪退识别结果为空log日志一直提示权限未赋予步骤三解决方案总结参考资料移植百度超轻量级中文OCR模型到Android项目的踩坑经历......
  • Rust 结构体部分字段的可变借用
    问题复现,假设我们有一个简单的Point结构体:structPoint{x:f64,y:f64,}implPoint{pubfnx_mut(&mutself)->&mutf64{&mutself.x}pubfny_mut(&mutself)->&mutf64{&mutself.y}}......
  • rust学习十六.2、并发-利用消息传递进行线程间通讯
    通过信道是rust的解决线程之间通信的2个工具之一,另外1个是是共享内存状态。rust推出这个,明显地是因为受到go之类的影响。在书籍中,作者提到go编程文档中的内容:不要通过共享内存来通讯;而是通过通讯来共享内存(Donotcommunicatebysharingmemory;instead,sharememorybyco......
  • PDF如何提取文字?OCR技术快速识别提取PDF中的文字内容!这种简单方法一定要知道!
    在日常工作中,我们常常会遇到PDF文档和图纸中的文字无法直接复制粘贴的问题,尤其是那些文字呈现为打散线条或扫描图片形式的文件,给我们的工作带来诸多不便。不过别担心,PDF快速看图软件的“提取文字”功能(基于OCR技术)就能轻松解决这个难题,下面就为大家详细介绍其使用教程。一......