验证码是一种常见的防机器人机制,其中英文数字混合验证码广泛出现在登录、注册等界面。本文将展示如何使用 Ruby 语言编写一个验证码识别程序,借助 Tesseract OCR 引擎来提取图像中的文本。
一、环境准备
- 安装 Ruby
更多内容访问ttocr.com或联系1436423940
可以从官网下载安装:https://www.ruby-lang.org
验证安装:
ruby -v
gem -v
- 安装 Tesseract
使用系统包管理器安装:
Ubuntu / Debian
sudo apt install tesseract-ocr
macOS
brew install tesseract
- 安装 Ruby 库
我们使用 rmagick(图像处理) 和 rtesseract(OCR 封装):
gem install rmagick
gem install rtesseract
如果遇到 rmagick 安装问题,需确保本机已安装 ImageMagick。
二、准备验证码图片
将一张命名为 captcha.png 的英文数字验证码图像放到当前目录。建议图像背景清晰、文字无干扰。
三、编写识别代码
创建文件 ocr_recognizer.rb:
require 'rmagick'
require 'rtesseract'
include Magick
1. 加载并灰度处理图像
img = Image.read("captcha.png").first
gray_img = img.quantize(256, GRAYColorspace)
gray_img.write("gray_captcha.png")
2. 使用 Tesseract 进行识别
image = RTesseract.new("gray_captcha.png", lang: "eng", processor: "text")
result = image.to_s.strip
puts "识别结果为: #{result}"
四、运行程序
ruby ocr_recognizer.rb
示例输出:
识别结果为: 7B4KX
五、识别效果优化建议
若验证码干扰较强,建议增加以下步骤:
二值化处理(如阈值分割)
图像放大(增强识别清晰度)
白名单字符过滤(例如仅识别 A-Z, a-z, 0-9)
字体倾斜校正(可借助 OpenCV 与 Tesseract 组合)