一、引言
验证码识别在自动化测试和数据抓取中扮演着重要角色。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