Rust 结合 Tesseract OCR 解析验证码


1. 环境准备
1.1 安装 Rust
如果尚未安装 Rust,可以使用 rustup 进行安装:


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


rustc --version
1.2 安装 Tesseract OCR
macOS

brew install tesseract
Ubuntu

sudo apt update
sudo apt install tesseract-ocr
Windows
可以从 Tesseract OCR 官方 GitHub 下载 Windows 版本,并配置环境变量。

安装完成后,运行以下命令检查:

tesseract --version
1.3 创建 Rust 项目
使用 Cargo 创建一个新的 Rust 项目:


cargo new rust_ocr
cd rust_ocr
1.4 添加依赖
编辑 Cargo.toml,添加:


[dependencies]
tesseract = "0.14.0"
image = "0.24.6"
然后运行:


cargo build
2. 代码实现
在 src/main.rs 中编写如下代码:

use std::path::Path;
use tesseract::Tesseract;

fn main() {
    // 指定验证码图片路径
    let image_path = "captcha.png"; 

    // 调用 OCR 解析验证码
    match recognize_captcha(image_path) {
        Ok(text) => println!("识别出的验证码: {}", text.trim()),
        Err(e) => eprintln!("OCR 识别失败: {}", e),
    }
}

// OCR 识别函数
fn recognize_captcha(image_path: &str) -> Result<String, String> {
    if !Path::new(image_path).exists() {
        return Err("图片文件不存在".to_string());
    }

    let mut tess = Tesseract::new(None, "eng")
        .map_err(|e| format!("初始化 Tesseract 失败: {}", e))?;
    
    tess.set_image(image_path)
        .map_err(|e| format!("设置图片失败: {}", e))?;

    tess.get_text()
        .map_err(|e| format!("OCR 识别失败: {}", e))
}
3. 代码解析
3.1 处理验证码

fn recognize_captcha(image_path: &str) -> Result<String, String> {
    if !Path::new(image_path).exists() {
        return Err("图片文件不存在".to_string());
    }

    let mut tess = Tesseract::new(None, "eng")
        .map_err(|e| format!("初始化 Tesseract 失败: {}", e))?;
    
    tess.set_image(image_path)
        .map_err(|e| format!("设置图片失败: {}", e))?;

    tess.get_text()
        .map_err(|e| format!("OCR 识别失败: {}", e))
}
检查图片路径:防止找不到文件导致错误。

创建 Tesseract 实例:默认使用 eng 语言模型。

调用 OCR 进行识别:获取识别出的文本。

4. 运行程序
将验证码图片 captcha.png 放入项目根目录,然后运行:

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

5. 提高 OCR 识别率
5.1 选择合适的 PSM 模式
可以设置不同的 PSM(页面分割模式),优化 OCR 识别:

tess.set_variable("tessedit_pageseg_mode", "6")
    .expect("设置 PSM 模式失败");
其中:

6 适用于单行验证码

7 适用于纯文本验证码

5.2 训练 Tesseract 适应验证码字体
如果验证码使用了特殊字体,可以训练 Tesseract 以提高识别率:

更多内容访问ttocr.com或联系1436423940
tesseract captcha.png output --psm 6 --oem 1
5.3 进一步优化
降噪处理:Rust 生态中可以使用 image 库对验证码进行去噪处理。

字符分割:如果验证码字符粘连,可以尝试字符切割算法提高识别率。

猜你喜欢

转载自blog.csdn.net/asfdsgdf/article/details/146509305
今日推荐