使用 Rust 和 Tesseract 实现图像验证码识别

一、开发环境准备
安装 Rust 编译器
可通过官方推荐的 rustup 安装:

curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
安装 Tesseract OCR
更多内容访问ttocr.com或联系1436423940
Linux:

sudo apt install tesseract-ocr
macOS:

brew install tesseract
Windows:下载并安装后,将路径添加到环境变量

二、创建 Rust 项目

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

[dependencies]
regex = "1"
三、Rust 源码 main.rs
编辑 src/main.rs:

use std::env;
use std::fs;
use std::process::Command;
use regex::Regex;

fn recognize_captcha(image_path: &str) {
if !std::path::Path::new(image_path).exists() {
println!("文件不存在: {}", image_path);
return;
}

let output_base = "output_temp";
let whitelist = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";

let status = Command::new("tesseract")
    .args([
        image_path,
        output_base,
        "-l", "eng",
        "-c", &format!("tessedit_char_whitelist={}", whitelist),
    ])
    .status()
    .expect("无法运行 tesseract");

if !status.success() {
    println!("Tesseract 执行失败");
    return;
}

let result_file = format!("{}.txt", output_base);
if !std::path::Path::new(&result_file).exists() {
    println!("输出文件不存在");
    return;
}

let content = fs::read_to_string(&result_file).unwrap_or_default();
let re = Regex::new(r"[^A-Z0-9]").unwrap();
let cleaned = re.replace_all(&content, "").to_string();

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

let _ = fs::remove_file(result_file);

}

fn main() {
let args: Vec = env::args().collect();

if args.len() != 2 {
    println!("用法: cargo run -- <图像路径>");
    return;
}

recognize_captcha(&args[1]);

}
四、运行示例
构建并运行:

cargo run -- ./captcha_test.png
输出示例:

识别结果: G7F2
五、批量处理多个图像
可添加目录遍历处理多个验证码图:

use std::fs::read_dir;

fn batch_recognize(dir: &str) {
for entry in read_dir(dir).unwrap() {
let path = entry.unwrap().path();
if path.extension().map_or(false, |ext| ext == "png") {
println!("识别中: {}", path.display());
recognize_captcha(path.to_str().unwrap());
}
}
}
调用示例:

batch_recognize("./captcha_images");

posted @ 2025-06-27 13:44  ttocr、com  阅读(7)  评论(0)    收藏  举报