使用 Perl 结合 Tesseract OCR 进行验证码识别

  1. 环境准备
    1.1 安装 Perl
    Perl 通常默认安装在 Linux 和 macOS 系统中,可使用以下命令检查:
    更多内容访问ttocr.com或联系1436423940

perl -v
如果未安装,可以在 Windows 上通过 Strawberry Perl 安装,或者在 macOS/Linux 上使用:

sudo apt install perl # Ubuntu/Debian
brew install perl # macOS
1.2 安装 Tesseract OCR
Windows
从 Tesseract GitHub 下载并安装
确保 tesseract.exe 在系统 PATH 中
Linux(Ubuntu)
bash

sudo apt install tesseract-ocr
macOS(Homebrew)
bash

brew install tesseract
安装完成后,检查是否成功安装:

bash

tesseract --version
2. 代码实现
创建一个 captcha_reader.pl 文件,写入以下 Perl 代码:

perl

!/usr/bin/perl

use strict;
use warnings;

指定验证码图片路径

my $image_path = "captcha.png"; # 请替换为你的验证码图片路径
my $output_file = "captcha_result";

运行 Tesseract OCR 识别验证码

my $command = "tesseract $image_path $output_file -l eng";
system($command) == 0 or die "无法执行 Tesseract 命令: $!";

读取识别结果

open my $fh, '<', "$output_file.txt" or die "无法打开输出文件: $!";
my $text = do { local $/; <$fh> };
close $fh;

输出识别结果

print "识别出的验证码: $text\n";

清理临时文件

unlink "$output_file.txt";
3. 代码解析
3.1 使用 system() 调用 Tesseract
perl

my $command = "tesseract $image_path $output_file -l eng";
system($command) == 0 or die "无法执行 Tesseract 命令: $!";
system() 调用外部 Tesseract 命令
-l eng 指定使用英文 OCR 识别
captcha.png 是输入图片,captcha_result.txt 是输出 OCR 结果
3.2 读取 OCR 结果
perl

open my $fh, '<', "$output_file.txt" or die "无法打开输出文件: $!";
my $text = do { local $/; <$fh> };
close $fh;
读取 captcha_result.txt 文件,获取 OCR 识别的验证码文本
3.3 删除临时文件
perl
unlink "$output_file.txt";
清理 OCR 结果文件,避免生成多余文件
4. 运行代码
确保 captcha.png 存在于同一目录下,然后运行:

bash

perl captcha_reader.pl
示例输出:

makefile

识别出的验证码: A7G9X
5. 提高 OCR 识别率
5.1 使用 Tesseract PSM 模式
perl

my $command = "tesseract $image_path $output_file -l eng --psm 6";
--psm 6 适用于单行验证码,提高识别率
5.2 设置字符白名单
perl

my $command = "tesseract $image_path $output_file -l eng -c tessedit_char_whitelist=0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
限制 Tesseract 只识别验证码中的数字和大写字母
5.3 预处理图像
去噪点
二值化处理
字符分割

posted @ 2025-03-14 21:24  ttocr、com  阅读(19)  评论(0)    收藏  举报