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

验证码识别通常用于自动化登录、表单提交或数据采集。在本教程中,我们将用 Rust 创建一个小工具,利用 leptess(Rust 封装的 Tesseract)对图像中的英文数字验证码进行识别。

一、环境准备

  1. 安装 Rust
    访问官方安装脚本:

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

rustc --version
2. 安装 Tesseract OCR 引擎

Ubuntu / Debian

sudo apt install tesseract-ocr

macOS

brew install tesseract

Windows

下载:https://github.com/tesseract-ocr/tesseract
确保安装成功,并且 tesseract 命令可用。

二、创建 Rust 项目

cargo new captcha_ocr
cd captcha_ocr
编辑 Cargo.toml 添加依赖:

[dependencies]
leptess = "0.5"
image = "0.24"
三、编写识别代码
编辑 src/main.rs:

use leptess::{LepTess, Variable};
use image::DynamicImage;
use std::path::Path;

fn main() {
// 图像路径
let image_path = "captcha.png";

// 初始化 Tesseract
let mut lt = LepTess::new(None, "eng").expect("初始化 Tesseract 失败");

// 设置只识别数字和英文
lt.set_variable(Variable::TesseditCharWhitelist, "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789")
    .expect("设置识别白名单失败");

// 加载图像并识别
lt.set_image(Path::new(image_path));
let text = lt.get_utf8_text().expect("OCR 识别失败");

println!("识别结果:{}", text.trim());

}
四、准备验证码图像
将验证码图像(如 captcha.png)放在项目根目录。图像应为常见的英文数字验证码(例如:6H7K9)。

五、运行程序

cargo run

识别结果:6H7K9
六、识别效果优化建议
Rust 的图像处理库支持多种预处理方式,可增强验证码识别率:

使用 image 库进行灰度化:

let img = image::open("captcha.png").unwrap().grayscale();
img.save("gray_captcha.png").unwrap();
对灰度图进行二值化、自适应阈值等增强操作(可通过 imageproc 库实现)

使用 leptess.set_image_from_mem() 来识别内存中的图像,避免中间文件

posted @ 2025-06-12 23:02  ttocr、com  阅读(9)  评论(0)    收藏  举报