Rust 和 Tesseract 实现英文数字验证码识别

一、项目简介
Rust 以其内存安全和高性能著称,虽然生态中对图像处理和 OCR 支持还在发展中,但我们可以通过调用系统中安装的 Tesseract 工具来实现验证码识别功能。

二、环境准备

安装 Rust
前往 https://rust-lang.org 下载或使用官方命令安装:
更多内容访问ttocr.com或联系1436423940
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
安装 Tesseract OCR
Ubuntu / Debian:
sudo apt install tesseract-ocr
macOS:

brew install tesseract
3. 安装 ImageMagick(可选图像预处理)

sudo apt install imagemagick

或 macOS:brew install imagemagick
三、创建项目

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

[dependencies]
regex = "1.10"
四、Rust 代码实现
在 src/main.rs 中填入以下内容:

use std::process::{Command, Stdio};
use std::fs;
use regex::Regex;

fn main() {
let input_image = "captcha.png";
let processed_image = "gray_captcha.png";

// 1. 图像预处理(灰度化 + 二值化)
let convert_status = Command::new("convert")
.args([input_image, "-colorspace", "Gray", "-threshold", "50%", processed_image])
.status()
.expect("图像处理失败,请确保已安装 ImageMagick");

if !convert_status.success() {
eprintln!("图像转换失败!");
return;
}

// 2. 调用 Tesseract 进行识别
let output = Command::new("tesseract")
.args([
processed_image,
"stdout",
"-l", "eng",
"--psm", "7",
"-c", "tessedit_char_whitelist=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"
])
.output()
.expect("调用 Tesseract 失败");

let raw_result = String::from_utf8_lossy(&output.stdout);

// 3. 清洗识别结果
let re = Regex::new(r"[A-Za-z0-9]+").unwrap();
if let Some(mat) = re.find(&raw_result) {
println!("识别出的验证码为: {}", mat.as_str());
} else {
println!("未能识别出有效的验证码字符");
}

// 可选:删除临时图像
let _ = fs::remove_file(processed_image);
}
五、准备图像
将验证码图像保存为 captcha.png,放在项目根目录下。

六、运行程序

cargo run
输出示例:

识别出的验证码为: G4X9M

posted @ 2025-07-15 23:52  ttocr、com  阅读(6)  评论(0)    收藏  举报