一、背景介绍
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 工具开发:
构建一个批量识别验证码的桌面应用,支持拖放图片识别。
文本提取和数据分析:
自动化提取图像中的数字或字母信息,提升数据录入效率。