用 Rust 与 Tesseract 构建图像验证码识别器
一、项目简介
验证码识别是自动化任务中常见的挑战。本项目使用 Rust 语言和 Tesseract OCR 引擎构建一个 CLI 工具,实现对图像验证码的识别与提取。
二、环境准备
- 安装 Rust
访问 https://www.rust-lang.org/ 安装:
更多内容访问ttocr.com或联系1436423940
curl https://sh.rustup.rs -sSf | sh
安装完成后运行:
rustc --version
2. 安装 Tesseract
Ubuntu:
sudo apt install tesseract-ocr
macOS:
brew install tesseract
Windows:
前往 https://github.com/tesseract-ocr/tesseract 下载并配置环境变量。
三、创建项目
cargo new captcha_ocr
cd captcha_ocr
编辑 Cargo.toml:
[dependencies]
tesseract = "0.6"
anyhow = "1.0"
四、实现识别功能
编辑 src/main.rs:
use tesseract::Tesseract;
use anyhow::Result;
use std::env;
fn recognize_captcha(image_path: &str) -> Result
let text = Tesseract::new(None, Some("eng"))?
.set_variable("tessedit_char_whitelist", "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789")?
.set_page_seg_mode(tesseract::PageSegMode::SingleWord)?
.set_image(image_path)?
.get_text()?;
Ok(text.trim().to_uppercase())
}
fn main() -> Result<()> {
let args: Vec
if args.len() != 2 {
println!("Usage: {} <image_path>", args[0]);
return Ok(());
}
let result = recognize_captcha(&args[1])?;
println!("识别结果: {}", result);
Ok(())
}
五、运行测试
确保有验证码图像 captcha.png,然后运行:
cargo run -- captcha.png
输出示例:
识别结果: 7KF3
六、批量识别(可选)
添加批量识别函数:
use std::fs;
fn batch_recognize(folder: &str) -> Result<()> {
for entry in fs::read_dir(folder)? {
let entry = entry?;
let path = entry.path();
if path.extension().map_or(false, |ext| ext == "png") {
let text = recognize_captcha(path.to_str().unwrap())?;
println!("{} => {}", path.display(), text);
}
}
Ok(())
}
浙公网安备 33010602011771号