使用 Swift 和 Tesseract OCR 实现验证码识别

news/2025/4/2 5:21:51/文章来源:https://www.cnblogs.com/ocr12/p/18801931

一、简介
验证码识别是自动化测试和数据提取中的常见挑战。使用 Swift 结合 Tesseract OCR 可以在 iOS 或 macOS 应用中进行验证码自动识别。本文将介绍如何使用 Swift 和 Tesseract OCR 实现验证码识别。
更多内容访问ttocr.com或联系1436423940
二、环境准备
2.1 安装 Tesseract OCR
macOS 上安装 Tesseract: 使用 Homebrew 安装:

brew install tesseract
验证安装:

tesseract --version
2.2 安装 SwiftOCR
SwiftOCR 是一个基于 Swift 的开源 OCR 库,可以与 Tesseract 结合使用。
使用 Swift Package Manager 安装: 在项目的 Package.swift 中添加依赖:

dependencies: [
.package(url: "https://github.com/garnele007/SwiftOCR", from: "1.0.0")
]
三、代码实现
3.1 代码结构
图像预处理

验证码识别

识别结果输出

3.2 Swift 代码示例
创建文件 CaptchaOCR.swift:

import Foundation
import SwiftOCR
import Vision
import AppKit

func preprocessImage(imagePath: String) -> NSImage? {
guard let image = NSImage(contentsOfFile: imagePath) else {
print("无法加载图像")
return nil
}

let processedImage = NSImage(size: image.size)
processedImage.lockFocus()let rect = NSRect(origin: .zero, size: image.size)
image.draw(in: rect, from: rect, operation: .sourceOver, fraction: 1.0)// 灰度化处理
let context = NSGraphicsContext.current?.cgContext
context?.setFillColor(NSColor.white.cgColor)
context?.fill(rect)
context?.setBlendMode(.darken)
context?.draw(image.cgImage(forProposedRect: nil, context: nil, hints: nil)!, in: rect)processedImage.unlockFocus()
return processedImage

}

func recognizeCaptcha(imagePath: String) {
guard let processedImage = preprocessImage(imagePath: imagePath) else {
print("预处理失败")
return
}

let swiftOCRInstance = SwiftOCR()swiftOCRInstance.recognize(processedImage) { recognizedString inprint("识别出的验证码: \(recognizedString)")
}

}

// 主程序
let captchaPath = "captcha.png"
recognizeCaptcha(imagePath: captchaPath)
四、运行程序
在终端运行:

swift run CaptchaOCR
示例输出:

识别出的验证码: H4J8K
五、效果优化
5.1 使用 Tesseract 自定义配置
调整 PSM 模式,假设验证码是单行文本:

let swiftOCRInstance = SwiftOCR()
swiftOCRInstance.tesseract.setVariable("tessedit_pageseg_mode", value: "6")
5.2 字符白名单
如果验证码只包含数字和大写字母:

swiftOCRInstance.tesseract.setVariable("tessedit_char_whitelist", value: "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789")
5.3 提高图像清晰度
通过调整对比度和亮度,提升识别率:

context?.setAlpha(0.8)
context?.setBlendMode(.multiply)
六、性能和效果分析
实时性强:Swift 结合 SwiftOCR,在 iOS 和 macOS 上运行速度较快。

识别准确:合理使用 Tesseract 参数能够显著提升识别效果。

兼容性好:适用于 macOS 和 iOS 平台。

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

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

相关文章

数智技术在城市生命线安全管理中的应用与进展

随着城市化进程的加速,城市生命线工程的安全治理变得尤为重要。城市生命线工程,包括燃气、供水、排水、桥梁、道路等关键基础设施,是城市运行的“血脉”和“神经”,其安全性直接关系到城市居民的生活安全和城市的稳定发展。在数字化转型的大背景下,如何利用数智化技术提升…

VMware Workstation Pro 17 安装教程 (超详细-附16版本)

由于VMware已经被博通收购了,现在官网已经下载不了,只能进博通官网下载:Home - Support Portal - Broadcom support portal 博通需要注册登录,注册时163邮箱和新浪邮箱都受限制,无法使用,觉得麻烦的百度网盘下载链接 通过网盘分享的文件:vm 17pro.zip链接: https://pan.…

libgdk-x11-2.0.so.0()(64bit) is needed by mega-11.0.13-1.x86_64

001、问题: libgdk-x11-2.0.so.0()(64bit) is needed by mega-11.0.13-1.x86_64 002、解决方法:dnf install gtk2 003、验证效果[root@PC1 mega]# rpm -ivh mega-11.0.13-1.x86_64.rpm Verifying... ################################# [100%] Pr…

Nacos 2.2.x版本客户端注册监听器时的多网卡问题

背景 在本地环境启动Nacos和SpringBoot应用测试nacos的配置监听特性,Nacos控制台在本地以单机模式启动,SpringBoot应用在IDEA中启动;本地环境有一个VMWare虚拟机实例。 问题 Nacos控制台绑定的IP为VMware虚拟机网卡的IP Nacos控制台启动后绑定的IP为VMware虚拟网卡的IP:192…

libXss.so.1()(64bit) is needed by mega-11.0.13-1.x86_64

001、问题 libXss.so.1()(64bit) is needed by mega-11.0.13-1.x86_64 002、解决方法:yum install libXScrnSaver 003、验证: 刚才的报错消失。

SuperPoint

提出了一种全卷积神经网络架构,用于兴趣点检测和描述,该架构使用一种名为单应性自适应(Homographic Adaptation)的自监督域自适应框架进行训练。我们的实验表明:(1)可以将知识从合成数据集迁移到真实世界的图像上;(2)稀疏兴趣点检测和描述可以作为一个高效的卷积神经网络来实…

Linux 系统中mega软件的安装

001、官方网站:https://www.megasoftware.net/002、下载Linux安装包 (centos系统) 003、

把目光转向新质生产力:高端装备的数字样机技术

在全球化与数字化的大背景下,科技创新已成为重塑生产力结构的核心要素。2023年12月召开的中央经济工作会议上指出:“要以科技创新推动产业创新,特别是以颠覆性技术和前沿技术催生新产业、新模式、新动能,发展新质生产力。” 新质生产力,指创新起主导作用,摆脱传统经济增长…