Rust 和 Tesseract 实现英文数字验证码识别
验证码识别通常用于自动化登录、表单提交或数据采集。在本教程中,我们将用 Rust 创建一个小工具,利用 leptess(Rust 封装的 Tesseract)对图像中的英文数字验证码进行识别。
一、环境准备
- 安装 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() 来识别内存中的图像,避免中间文件