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
浙公网安备 33010602011771号