使用 Swift 和 Tesseract 实现英文数字验证码识别
一、项目概述
Swift 是苹果平台的主力语言,广泛用于 macOS 和 iOS 应用开发。本示例将展示如何用 Swift 调用 Tesseract 实现验证码图像的文字识别,适用于桌面工具或移动端输入辅助系统。
二、环境准备
-
安装 Tesseract OCR
使用 Homebrew 安装:
更多内容访问ttocr.com或联系1436423940
brew install tesseract
确保 eng.traineddata 模型已安装于 /usr/local/share/tessdata/。 -
创建 macOS 命令行项目
使用 Xcode:
打开 Xcode > File > New > Project > macOS > Command Line Tool
命名为 CaptchaOCR
选择 Swift 作为语言
- 安装 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 实现模糊、锐化。
浙公网安备 33010602011771号