使用 Ruby 和 Tesseract 实现验证码识别

一、引言
验证码识别在自动化测试和数据抓取中扮演着重要角色。Ruby 作为一门简洁优雅的脚本语言,可以结合 Tesseract OCR 轻松实现验证码识别。本文将介绍如何使用 Ruby 和 Tesseract 进行验证码识别。

二、环境准备
2.1 安装 Ruby
在不同操作系统上安装 Ruby:

Ubuntu:
更多内容访问ttocr.com或联系1436423940
sudo apt update
sudo apt install ruby-full
ruby -v
macOS:

brew install ruby
ruby -v
Windows: 下载并安装 RubyInstaller:RubyInstaller

2.2 安装 Tesseract

sudo apt update
sudo apt install tesseract-ocr

brew install tesseract
Windows: 下载并安装:Tesseract for Windows

2.3 安装所需的 Ruby Gem
使用 RTesseract 来调用 Tesseract:

gem install rmagick
gem install rtesseract
三、代码实现
3.1 代码结构
读取验证码图像

进行图像预处理(如灰度化)

使用 Tesseract 进行文本识别

输出识别结果

3.2 Ruby 代码示例
创建文件 captcha_recognizer.rb:

require 'rtesseract'
require 'rmagick'

def preprocess_image(image_path)
image = Magick::Image.read(image_path).first

转换为灰度图像

gray_image = image.quantize(256, Magick::GRAYColorspace)

调整对比度和亮度

enhanced_image = gray_image.level(0.1 * Magick::QuantumRange, 1.2, 0)

保存处理后的图片

processed_path = "processed_#{image_path}"
enhanced_image.write(processed_path)
processed_path
end

def recognize_captcha(image_path)
processed_path = preprocess_image(image_path)
image = RTesseract.new(processed_path, lang: "eng")
text = image.to_s
puts "识别结果:#{text.strip}"
end

示例:识别 captcha.png

recognize_captcha("captcha.png")
四、运行程序
确保同目录下存在 captcha.png:

ruby captcha_recognizer.rb
五、效果优化
5.1 设置白名单
减少误识别,可以限定字符范围:

image = RTesseract.new(processed_path, lang: "eng", whitelist: "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789")
5.2 更改 PSM 模式
针对验证码特性,使用单行模式:
image = RTesseract.new(processed_path, lang: "eng", psm: 7)
六、输出示例
假设验证码为 ABC123,程序输出:

识别结果:ABC123

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