使用 Rust 和 Leptess 实现英文数字验证码识别

一、项目介绍
本项目将使用 Rust 编写一个简单的命令行工具,用于识别图像中的英文和数字验证码内容。借助 leptess crate,Rust 可直接调用 Tesseract OCR 引擎,并结合图像预处理提高识别准确率。

二、环境准备

  1. 安装 Rust 工具链
    访问官网 https://www.rust-lang.org
    更多内容访问ttocr.com或联系1436423940
    安装:

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

Ubuntu / Debian

sudo apt install tesseract-ocr

macOS

brew install tesseract
三、创建 Rust 项目

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

[dependencies]
leptess = "0.14"
image = "0.25"
四、准备验证码图像
将验证码图像命名为 captcha.png,内容为清晰的英文和数字字符,放置在项目根目录。

五、Rust OCR 识别代码
编辑 src/main.rs:

use leptess::LepTess;
use image::{DynamicImage, GenericImageView, Luma, imageops::grayscale};
use std::path::Path;

fn main() -> Result<(), Box> {
let input_path = Path::new("captcha.png");

// 加载图像并灰度处理
let img = image::open(input_path)?.into_luma8();

// 保存处理后的图像
let processed_path = "gray_captcha.png";
img.save(processed_path)?;

// 初始化 Tesseract
let mut lt = LepTess::new(None, "eng")?;
lt.set_variable("tessedit_char_whitelist", "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789")?;
lt.set_image(processed_path);

let text = lt.get_utf8_text()?;
let cleaned: String = text.chars().filter(|c| c.is_ascii_alphanumeric()).collect();

println!("识别结果为: {}", cleaned);
Ok(())

}
六、运行程序
确保图像文件存在,运行:

cargo run
输出示例:

识别结果为: H9ZXT

posted @ 2025-07-06 21:20  ttocr、com  阅读(12)  评论(0)    收藏  举报