用Rust + Tesseract OCR 解析验证码

  1. 环境准备
    1.1 安装 Rust
    Rust 采用 rustup 进行管理,使用以下命令安装:

bash

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

bash

rustc --version
1.2 安装 Tesseract OCR
Linux/macOS
bash

sudo apt install tesseract-ocr # Ubuntu
brew install tesseract # macOS
Windows
使用 choco 安装:

powershell

choco install tesseract
然后检查 Tesseract 是否可用:

bash

tesseract --version
1.3 创建 Rust 项目
bash

cargo new captcha_ocr
cd captcha_ocr
1.4 添加 Tesseract 绑定
编辑 Cargo.toml,添加 leptess 依赖:

toml

[dependencies]
leptess = "0.13"
image = "0.24"
2. 代码实现
在 src/main.rs 中编写如下代码:

rust

use leptess::{LepTess, Variable};
use image::{GrayImage, Luma};
use std::path::Path;

/// 进行 OCR 识别
fn recognize_captcha(image_path: &str) -> Result<String, Box> {
// 加载 Tesseract OCR
let mut ocr = LepTess::new(None, "eng")?;
ocr.set_variable(Variable::TesseditPagesegMode, "6")?; // 设定页面分割模式

// 预处理图像(转换为灰度)
let img = image::open(image_path)?.into_luma8();
let processed_path = "processed_captcha.png";
img.save(processed_path)?;

// 进行 OCR 识别
ocr.set_image(processed_path);
let text = ocr.get_utf8_text()?;

Ok(text.trim().to_string())

}

fn main() {
let image_path = "captcha.png"; // 你的验证码图片路径
match recognize_captcha(image_path) {
Ok(text) => println!("识别出的验证码: {}", text),
Err(e) => eprintln!("OCR 识别失败: {}", e),
}
}
3. 代码解析
3.1 加载 Tesseract
rust

let mut ocr = LepTess::new(None, "eng")?;
LepTess::new(None, "eng") 创建 OCR 实例,使用英语模型。

3.2 预处理图像
rust

let img = image::open(image_path)?.into_luma8();
img.save(processed_path)?;
使用 image 库将验证码转换为灰度图,提高 OCR 识别率。

3.3 OCR 解析

ocr.set_image(processed_path);
let text = ocr.get_utf8_text()?;
set_image(processed_path) 设置识别的验证码图像。

get_utf8_text() 获取识别结果。

  1. 运行 OCR 识别
    编译并运行:

cargo run
终端将输出识别的验证码内容。

  1. 提高 OCR 识别率
    5.1 设置合适的 PSM 模式

ocr.set_variable(Variable::TesseditPagesegMode, "6")?;
PSM 6 适用于单行验证码解析。

5.2 进一步图像优化
可以使用 OpenCV 进行二值化:

let binary_img = img.map(|p| if p[0] > 128 { Luma([255]) } else { Luma([0]) });
binary_img.save("binary_captcha.png")?;

posted @ 2025-03-23 22:02  ttocr、com  阅读(11)  评论(0)    收藏  举报