用 Rust 和 Tesseract 实现验证码识别工具

一、项目介绍
Rust 是一门注重安全性与性能的系统级编程语言。虽然它不像 Python 那样拥有成熟的图像处理生态,但借助 Tesseract OCR 及一些社区库,我们仍可以构建一个高效的验证码识别工具。

本项目将使用 Rust 调用系统命令 tesseract,实现对验证码图像的识别,并展示如何进行图像预处理以提高识别率。
更多内容访问ttocr.com或联系1436423940
二、开发环境准备

  1. 安装 Rust

curl https://sh.rustup.rs -sSf | sh
或通过 官网 下载。

  1. 安装 Tesseract OCR

sudo apt install tesseract-ocr # Ubuntu
brew install tesseract # macOS
三、新建项目

cargo new captcha_ocr
cd captcha_ocr
修改 Cargo.toml 添加依赖:

[dependencies]
anyhow = "1.0"
四、Rust 调用 Tesseract 识别图像
编辑 src/main.rs:

use std::process::{Command, Stdio};
use anyhow::{Result, Context};
use std::fs;

fn main() -> Result<()> {
let image_path = "captcha.png";

// 确保图像文件存在
if !std::path::Path::new(image_path).exists() {
    println!("找不到图像文件: {}", image_path);
    return Ok(());
}

// 调用 tesseract 命令识别验证码
let output = Command::new("tesseract")
    .arg(image_path)
    .arg("stdout")
    .arg("-l")
    .arg("eng")
    .arg("--psm")
    .arg("7")  // 单行识别
    .stdout(Stdio::piped())
    .output()
    .context("执行 tesseract 失败")?;

let text = String::from_utf8_lossy(&output.stdout).trim().to_string();

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

}
五、运行程序
将验证码图片命名为 captcha.png 并放入根目录:

cargo run
输出示例:

识别结果: 3G9P
六、可选功能:调用 ImageMagick 进行图像预处理
你可以借助 convert 命令对图像进行灰度化、去噪等预处理:

Command::new("convert")
.args(["captcha.png", "-colorspace", "Gray", "-threshold", "60%", "processed.png"])
.status()
.context("图像预处理失败")?;
然后识别 processed.png 即可。

七、增强建议
若要在 Rust 中集成更多图像处理能力,可以使用如下库:

image:基础图像处理

opencv:绑定 OpenCV

leptess:Rust 绑定 Tesseract(需要编译 Tesseract 库)

示例(使用 leptess):

[dependencies]
leptess = "0.14"

use leptess::LepTess;

fn main() -> Result<()> {
let mut lt = LepTess::new(None, "eng")?;
lt.set_image("captcha.png");
let text = lt.get_utf8_text()?;
println!("识别结果: {}", text.trim());
Ok(())
}

posted @ 2025-07-22 18:00  ttocr、com  阅读(28)  评论(0)    收藏  举报