使用 Rust 和 Leptess 实现英文数字验证码识别
一、项目介绍
本项目将使用 Rust 编写一个简单的命令行工具,用于识别图像中的英文和数字验证码内容。借助 leptess crate,Rust 可直接调用 Tesseract OCR 引擎,并结合图像预处理提高识别准确率。
二、环境准备
- 安装 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
浙公网安备 33010602011771号