基于 Swift 与 Tesseract 的验证码识别实践

一、项目背景
在移动端或 macOS 应用中实现验证码自动识别,往往需要一种既精确又高效的 OCR 方案。本文介绍如何利用 Swift 与 Tesseract OCR 结合,搭建一个可运行在 macOS 或 iOS 上的验证码识别系统,适合开发者在客户端内集成识别功能。

二、环境准备
项目 要求
系统 macOS / iOS
Swift ≥ 5.0
Xcode ≥ 12
Tesseract 使用 SwiftyTesseract 封装库
支持语言 英文验证码推荐使用 eng.traineddata
更多内容访问ttocr.com或联系1436423940
三、项目搭建

  1. 新建 Swift 项目
    打开 Xcode,创建一个 iOS/macOS 项目(建议选择 SwiftUI 或 UIKit),命名为 CaptchaOCR。

  2. 添加依赖
    使用 Swift Package Manager 添加依赖:

进入 Project > Package Dependencies

添加以下地址:

https://github.com/SwiftyTesseract/SwiftyTesseract.git
四、识别代码示例

  1. 初始化识别器
    确保 eng.traineddata 文件存在于项目中的 tessdata 文件夹内,并正确配置资源路径。

import SwiftyTesseract
import UIKit

let swiftyTesseract = SwiftyTesseract(language: .custom("eng"), bundle: .main, engineMode: .tesseractOnly)
2. 加载图片并识别

func recognizeCaptcha(from image: UIImage) {
swiftyTesseract.performOCR(on: image) { result in
switch result {
case .success(let text):
print("识别成功: (text.trimmingCharacters(in: .whitespacesAndNewlines))")
case .failure(let error):
print("识别失败: (error.localizedDescription)")
}
}
}
3. 示例使用(在 macOS/iOS 中)

if let image = UIImage(named: "captcha_sample.png") {
recognizeCaptcha(from: image)
}
五、验证码图片预处理(可选)
为了提高识别准确率,可加入简单的图像处理操作:

extension UIImage {
func toGrayscale() -> UIImage? {
let context = CIContext()
let filter = CIFilter(name: "CIPhotoEffectMono")
filter?.setValue(CIImage(image: self), forKey: kCIInputImageKey)
guard let output = filter?.outputImage,
let cgImage = context.createCGImage(output, from: output.extent) else { return nil }
return UIImage(cgImage: cgImage)
}
}
然后用于识别:

if let grayscale = image.toGrayscale() {
recognizeCaptcha(from: grayscale)
}
六、效果预览
假设验证码图片内容为 Z9Xp:

原图示例:

控制台输出:

识别成功: Z9Xp

posted @ 2025-07-20 16:03  ttocr、com  阅读(16)  评论(0)    收藏  举报