使用 Ruby 实现英文数字验证码的识别

news/2025/1/7 16:53:57/文章来源:https://www.cnblogs.com/ocr12/p/18654773

在 Ruby 中,我们可以使用 rtesseract gem,它是 Tesseract OCR 的一个接口。下面是如何在 Ruby 中实现验证码的识别。

  1. 安装所需依赖
    首先,在你的 Gemfile 中添加 rtesseract 和 mini_magick 依赖。mini_magick 用于处理图像,rtesseract 用于 OCR 识别。

ruby
更多内容访问ttocr.com或联系1436423940
gem 'rtesseract'
gem 'mini_magick'
运行以下命令安装依赖:

bash

bundle install
2. 代码实现
以下是完整的 Ruby 代码示例:

ruby

require 'rtesseract'
require 'mini_magick'

图像预处理:将图像转换为灰度图像并提高对比度

def preprocess_image(input_path, output_path)
image = MiniMagick::Image.open(input_path)
image = image.colorspace("Gray") # 转换为灰度图像
image = image.sharpen("0x1") # 提高图像对比度

image.write(output_path)
puts "图像预处理完成,保存至:#{output_path}"
end

使用 Tesseract 识别验证码

def recognize_captcha(image_path)
ocr = RTesseract.new(image_path)
ocr.to_s.strip # 返回识别结果并去掉多余的空白字符
end

主程序

input_image_path = 'captcha_image.png'
processed_image_path = 'processed_captcha.png'

图像预处理

preprocess_image(input_image_path, processed_image_path)

识别验证码

result = recognize_captcha(processed_image_path)

输出识别结果

puts "识别结果:#{result}"
3. 代码解析
图像预处理:

使用 MiniMagick 读取图像并将其转换为灰度图像(colorspace("Gray")),以便去除不必要的颜色信息,减少噪点。
使用 sharpen 方法增强图像的对比度,帮助 OCR 引擎更清晰地识别字符。
将处理后的图像保存为新的文件。
验证码识别:

使用 RTesseract.new(image_path) 创建一个 Tesseract OCR 对象,并通过 ocr.to_s 进行识别,最终返回识别到的文本。
主程序:

先进行图像预处理,然后使用 Tesseract OCR 引擎识别处理后的图像并输出结果。
4. 运行环境要求
安装 Tesseract OCR: 确保系统中已安装 Tesseract OCR 引擎。安装方法可以参考 Tesseract GitHub 页面。

配置环境变量: 你可能需要确保 tesseract 命令在系统的 PATH 中,或者在代码中显式设置 RTesseract 的 bin_path:

ruby

RTesseract.bin_path = '/path/to/tesseract'
5. 运行示例
假设我们有一个包含英文数字的验证码图像 captcha_image.png,运行以下命令来识别该验证码:

bash

ruby captcha_recognizer.rb
输出将会类似:

图像预处理完成,保存至:processed_captcha.png
识别结果:1234

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/864851.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Centos中keytool不起作用的解决方法.240109

​keytool是Java开发中用于管理密钥和证书的工具,可以用于生成密钥、创建证书请求、导入和导出证书等操作。你可以在Oracle官网上下载和安装JDK,然后在JDK的 bin目录下找到 keytool 工具。 因此,我们首先要给centos装jdk yum -y install java-1.8.0-openjdk* 然后在执行keyt…

【npm】npm warn ERESOLVE overriding peer dependency——版本冲突,降级

这里警告的远远是由于 @eslint 和 eslint-loader@2.2.1 之间版本冲突。eslint-loader支持的eslint版本在`>=1.6.0 <7.0.0`。可用输入 npm list eslint 查看当前依赖的具体问题。 所有,我们可以给wsint降级,选择1.6.0~7.0.0(不包含7.0.0)之间的版本。输入 npm view es…

群晖 MariaDB10 开启远程登录.240109

​情况:MariaDB设置了TCP/IP的端口,但是还是无法进行远程访问。解决方法: 一、使用ssh登录群晖,并进入MariaDB安装目录 cd /volume1/@appstore/MariaDB10/usr/local/mariadb10/bin 二、使用root登录 MariaDB,然后进行修改 mysql -u root -p MariaDB [(none)]> use mysq…

软件最难的不是开发程序,而是需求.240109

最近几个月,关于人工智能的惊人文章在互联网泛滥。这也引发了很多人的担心——软件开发人员可能很快就会失业,被人工智能取代。他们想象所有的企业高管和产品研究人员将绕过大多数或所有的软件开发人员,直接要求人工智能构建他们想要或需要的东西。但作为一个拥有15年一线开…

项目管理不再是难题:一揽子解决方案助你轻松前行

项目管理中的痛点涉及多个方面,但通过优化资源分配、建立有效的沟通机制、加强时间管理、完善风险控制、简化变更管理以及加强利益相关者期望管理等措施,可以有效地解决这些痛点,确保项目的顺利进行和成功完成。一、项目管理的核心要素 ● 范围管理:明确项目的范围和目标,…

如何修改网站的模板?

修改网站的模板是提升网站外观和用户体验的重要步骤。以下是详细的步骤和建议:备份原始模板:在进行任何修改之前,确保备份原始模板文件。 使用版本控制系统(如Git)来管理文件变更。选择合适的工具:根据网站的技术栈选择合适的工具。常见的工具包括文本编辑器(如Notepad+…

如何使用Dreamweaver修改网站模板?

Dreamweaver(DW)是一款功能强大的网页设计工具,可以帮助您轻松修改网站模板。以下是详细的步骤和建议:安装和启动Dreamweaver:确保已安装Dreamweaver软件。 启动Dreamweaver并打开您的网站项目。定位模板文件:在Dreamweaver的“文件”面板中,找到并打开需要修改的模板文…

如何登录网站后台并修改代码?

登录网站后台并修改代码是网站维护和开发过程中常见的任务。以下是详细的步骤和注意事项:获取后台登录信息:确保您拥有网站后台的登录凭证,包括用户名和密码。 如果忘记了登录信息,可以联系网站管理员或技术支持。登录后台:打开浏览器,输入网站后台的URL,通常是http://域…

如何修改网站模板?

修改网站模板是提升网站外观和用户体验的重要步骤。以下是详细的步骤和注意事项:备份原始模板:在进行任何修改之前,确保备份原始模板文件。 使用版本控制系统(如Git)来管理文件变更。选择合适的工具:根据网站的技术栈选择合适的工具。常见的工具包括文本编辑器(如Notepa…

CAD中的四个关系,HardOwner,SoftOwner,HardPointer,SoftPointer

起因:在学习在CAD中附加自定义的数据的时候,发现的一个知识点。在组码表中,330,340,350,360四个键分别对应四种关系。如下图:在DataCell里也有类似的操作:总结起来,就是在CAD中,我们可以人为地给两个DBObject建立某种关系,即:软指针,硬指针,软所有者,硬所有者。…

如何调整网站的搜索关键词,以提高搜索引擎排名和用户体验?

在优化网站关键词时,需要考虑以下几个方面:关键词研究:使用工具如Google Keyword Planner、Ahrefs或SEMrush进行关键词研究。 分析竞争对手的关键词策略,找出潜在的机会词。 确保关键词与网站内容高度相关,并且符合用户搜索习惯。页面优化:在页面标题(Title Tag)、元描…

kubeadm 快速搭建 Kubernetes 集群

快速搭建 K8s 集群角色 ipk8s-master-01 192.168.111.170k8s-node-01 192.168.111.171k8s-node-02 192.168.111.172服务器需要连接互联网下载镜像软件 版本Docker 24.0.0(CE)Kubernetes 1.28初始化配置 关闭防火墙 systemctl stop firewalld && systemctl disable fi…