使用 Rust 解析验证码:结合 Tesseract OCR

  1. 环境准备
    1.1 安装 Rust
    Rust 可以通过 rustup 进行安装:

curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
安装完成后,检查是否安装成功:

rustc --version
1.2 安装 Tesseract OCR
在 Linux/macOS 上,可以使用包管理器安装:

Ubuntu/Debian

sudo apt update
sudo apt install tesseract-ocr libtesseract-dev

macOS

brew install tesseract
验证安装:

tesseract --version
1.3 创建 Rust 项目
初始化 Rust 项目:

cargo new rust_ocr
cd rust_ocr
在 Cargo.toml 添加以下依赖:

[dependencies]
tesseract = "0.8"
image = "0.24" # 用于图像预处理
2. 代码实现
编辑 src/main.rs,编写如下代码:
use tesseract::Tesseract;
use image::{GrayImage, Luma, open};

fn preprocess_image(image_path: &str) -> GrayImage {
let img = open(image_path).expect("无法打开图片").into_luma8();

// 进行二值化处理
let threshold = 128;
let binary_img = img.map(|pixel| {
    if pixel[0] > threshold {
        Luma([255]) // 白色
    } else {
        Luma([0])   // 黑色
    }
});

binary_img

}

fn recognize_captcha(image_path: &str) -> String {
let processed_image = preprocess_image(image_path);
let output_path = "processed_captcha.png";
processed_image.save(output_path).expect("无法保存处理后的图像");

let mut ocr = Tesseract::new(None, "eng").expect("无法初始化 Tesseract");
ocr.set_image(output_path);

let text = ocr.get_text().expect("OCR 识别失败");
text.trim().to_string()

}

fn main() {
let image_path = "captcha.png";
let result = recognize_captcha(image_path);
println!("识别出的验证码: {}", result);
}
3. 代码解析
3.1 预处理验证码

fn preprocess_image(image_path: &str) -> GrayImage
转换为灰度图像 into_luma8()

二值化处理:将像素值低于 128 的设为黑色,其他设为白色。

3.2 OCR 解析

let mut ocr = Tesseract::new(None, "eng").expect("无法初始化 Tesseract");
初始化 Tesseract

设定 OCR 语言 eng

调用 get_text() 获取识别结果

3.3 运行 OCR 解析

let result = recognize_captcha(image_path);
println!("识别出的验证码: {}", result);
调用 recognize_captcha() 进行识别。

  1. 运行程序
    确保 captcha.png 存在于项目目录下,然后运行:

cargo run
程序会加载验证码图片,进行处理,并输出识别出的文本。

  1. 提高 OCR 识别率
    5.1 调整 Tesseract 参数
    可以调整 PSM 模式,提高识别准确率:
    更多内容访问ttocr.com或联系1436423940
    ocr.set_variable("tessedit_pageseg_mode", "6").unwrap();
    适用于验证码等单行文本解析。

5.2 进一步优化
去除噪点:可使用 imageproc 进行高斯模糊处理

字符分割:如果验证码字符粘连,可使用 OpenCV 进行分割

posted @ 2025-03-25 18:29  ttocr、com  阅读(23)  评论(0)    收藏  举报