使用 Swift 和 Tesseract 实现英文数字验证码识别

一、项目概述
Swift 是苹果平台的主力语言,广泛用于 macOS 和 iOS 应用开发。本示例将展示如何用 Swift 调用 Tesseract 实现验证码图像的文字识别,适用于桌面工具或移动端输入辅助系统。

二、环境准备

  1. 安装 Tesseract OCR
    使用 Homebrew 安装:
    更多内容访问ttocr.com或联系1436423940
    brew install tesseract
    确保 eng.traineddata 模型已安装于 /usr/local/share/tessdata/。

  2. 创建 macOS 命令行项目
    使用 Xcode:

打开 Xcode > File > New > Project > macOS > Command Line Tool

命名为 CaptchaOCR

选择 Swift 作为语言

  1. 安装 Swift Tesseract 封装库(例如 G8Tesseract)
    如果是 Cocoa 应用,也可以通过 CocoaPods:

pod init
添加:

pod 'TesseractOCRiOS'
然后:

pod install
但在命令行项目中,我们可以直接用 shell 执行 tesseract 命令。

三、验证码识别 Swift 示例(使用 Process 执行 Tesseract)
main.swift

import Foundation

let imagePath = "captcha.png"
let processedPath = "gray_captcha.png"

// Step 1: 图像预处理(灰度化 + 二值化) - 依赖 ImageMagick
let convert = Process()
convert.executableURL = URL(fileURLWithPath: "/usr/local/bin/convert")
convert.arguments = [imagePath, "-colorspace", "Gray", "-threshold", "50%", processedPath]

do {
try convert.run()
convert.waitUntilExit()
} catch {
print("图像处理失败: (error)")
exit(1)
}

// Step 2: 调用 Tesseract 识别
let tesseract = Process()
let pipe = Pipe()

tesseract.executableURL = URL(fileURLWithPath: "/usr/local/bin/tesseract")
tesseract.arguments = [processedPath, "stdout", "-l", "eng", "--psm", "7", "-c", "tessedit_char_whitelist=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"]
tesseract.standardOutput = pipe

do {
try tesseract.run()
tesseract.waitUntilExit()

let data = pipe.fileHandleForReading.readDataToEndOfFile()
if let result = String(data: data, encoding: .utf8) {
    let cleaned = result.trimmingCharacters(in: .whitespacesAndNewlines)
        .replacingOccurrences(of: "[^A-Za-z0-9]", with: "", options: .regularExpression)
    print("识别出的验证码为: \(cleaned)")
}

} catch {
print("Tesseract 识别失败: (error)")
}
四、运行程序
将验证码图像 captcha.png 放入项目目录,确保安装了 ImageMagick(brew install imagemagick)。

在 Xcode 中运行或在终端中:

swift run
输出示例:

识别出的验证码为: H39KX
五、适用场景
Swift macOS 工具类小程序

iOS 辅助工具(结合 UIImagePickerController 拍照识别)

内部平台登录验证码自动识别插件

六、可拓展方向
使用 VisionKit 实现 iOS 实时图像流识别;

加入训练模型识别特定验证码字体;

图像处理增强模块,用 CIImage 实现模糊、锐化。

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