当前位置: 首页 > news >正文

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

一、背景介绍

Swift 是 Apple 推出的现代化编程语言,广泛应用于 iOS 和 macOS 应用开发。结合 Tesseract OCR,可以在移动和桌面应用中高效地识别验证码。本文将展示如何使用 Swift 结合 Tesseract OCR 实现验证码自动识别。

二、环境准备
2.1 安装 Homebrew(macOS)
更多内容访问ttocr.com或联系1436423940
如果尚未安装 Homebrew,可以使用以下命令安装:

/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

2.2 安装 Tesseract OCR

通过 Homebrew 安装 Tesseract:

brew install tesseract

2.3 Swift Package Manager 添加依赖

编辑项目的 Package.swift 文件:

// swift-tools-version:5.7
import PackageDescription

let package = Package(
name: "CaptchaOCR",
platforms: [
.macOS(.v12)
],
dependencies: [
.package(url: "https://github.com/SwiftyTesseract/SwiftyTesseract.git", from: "2.0.0")
],
targets: [
.executableTarget(
name: "CaptchaOCR",
dependencies: ["SwiftyTesseract"]
)
]
)

三、代码实现
3.1 创建 Swift 文件

在项目根目录下创建 Sources/CaptchaOCR/main.swift:

import Foundation
import SwiftyTesseract
import AppKit

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

// 灰度化
let grayscale = NSImage(size: image.size)
grayscale.lockFocus()
image.draw(in: NSRect(origin: .zero, size: image.size),from: NSRect(origin: .zero, size: image.size),operation: .sourceOver,fraction: 1.0)
grayscale.unlockFocus()// 保存灰度图像(可选)
let outputPath = "processed_captcha.png"
let bitmapRep = NSBitmapImageRep(data: grayscale.tiffRepresentation!)
let pngData = bitmapRep?.representation(using: .png, properties: [:])
try? pngData?.write(to: URL(fileURLWithPath: outputPath))return grayscale

}

func recognizeCaptcha(imagePath: String) {
let tesseract = SwiftyTesseract(language: .english)

guard let preprocessedImage = preprocessImage(imagePath: imagePath) else {print("图像预处理失败")return
}tesseract.performOCR(on: preprocessedImage) { result inswitch result {case .success(let text):print("识别出的验证码: \(text.trimmingCharacters(in: .whitespacesAndNewlines))")case .failure(let error):print("OCR 识别失败: \(error)")}
}

}

let imagePath = "captcha.png"
recognizeCaptcha(imagePath: imagePath)

四、运行程序
4.1 运行 Swift 项目

在项目根目录运行以下命令:

swift run

4.2 运行效果

程序将识别图像中的验证码并输出:

识别出的验证码: A8K3D

五、识别优化
5.1 设置字符白名单

Tesseract 可以配置仅识别字母和数字:

tesseract.setVariable(.tesseditCharWhitelist, value: "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789")

5.2 使用特定页面分割模式(PSM)
tesseract.setVariable(.pageSegmentationMode, value: "6")

六、应用场景

iOS 自动化测试:
使用 Swift 和 Tesseract 实现验证码自动填充,加快测试流程。

macOS 工具开发:
构建一个批量识别验证码的桌面应用,支持拖放图片识别。

文本提取和数据分析:
自动化提取图像中的数字或字母信息,提升数据录入效率。

http://www.rkmt.cn/news/11896.html

相关文章:

  • 校园交友|基于SprinBoot+vue的校园交友网站(源码+数据库+文档) - 实践
  • 告别单张保存!PPT 图片无损批量提取,这 3 种方法亲测有效!
  • ?模拟赛(2) 赛后总结
  • 【C语言】C语言预处理详解,从基础到进阶的全面讲解 - 指南
  • 掌握C2重定向器:红蓝队攻防实战指南
  • Avalonia:开发Android应用
  • 多GPU本地布署Wan2.2-T2V-A14B文本转视频模型 - yi
  • 软工9.25
  • P8367 [LNOI2022] 盒
  • Polar2025秋季个人挑战赛web-writeup
  • 通过【开题答辩过程】以《基于JavaEE的创意产品众筹平台的设计与实现》为例,不会开题答辩的能够进来看看
  • 如何在CentOS 7上安装bzip2-1.0.6-13.el7.x86_64.rpm RPM包(详细步骤)
  • 2025年Java常见面试题
  • 实用指南:k8s 跟 nacos 关于服务注册以及服务发现
  • AT_agc021_d [AGC021D] Reversed LCS
  • adb shell 常用文件命令
  • 你所不知道的Spring的@Autowired实现细节
  • Java文件编程
  • 苏联的经典数学教材
  • redis实现分布式锁1
  • 深入解析:SQL 字符串函数高频考点:LIKE 和 SUBSTRING 的区别
  • Etcd详解:Kubernetes的大脑与记忆库 - 实践
  • go 语法里变量前面增加、*区别
  • 20250922_QQ_backdoor
  • 卓伊凡的第一款独立游戏-unity安装运行设置以及熟悉整体unity游戏开发和unity editor【02】-优雅草卓伊凡
  • 9.24(补)
  • 亚马逊与AWS如何通过漏洞赏金计划构建深度安全防御
  • 详细介绍:锚定效应(解释+类型区分+商业及生活应用+如何避免)
  • 【JavaEE】SpringIoC与SpringDI - 详解
  • 24.Linux硬盘分区管理 - 详解