Swift 结合 Tesseract 进行验证码识别

  1. 环境准备
    1.1 安装 Swift

如果使用 macOS,Swift 已预装,可通过以下命令检查:

swift --version

如果没有安装,可以从 Swift 官方网站
下载并安装。

1.2 安装 Tesseract OCR

macOS (使用 Homebrew 安装 Tesseract):

brew install tesseract

Linux (Ubuntu 示例):

sudo apt update
sudo apt install tesseract-ocr

Windows (使用 Scoop):

scoop install tesseract

检查 Tesseract 是否安装成功:

tesseract --version

1.3 创建 Swift 项目

创建一个 Swift 命令行项目:

mkdir SwiftOCR
cd SwiftOCR
swift package init --type executable

然后在 Package.swift 文件中添加 SwiftyTesseract 依赖:

// swift-tools-version:5.5
import PackageDescription

let package = Package(
name: "SwiftOCR",
dependencies: [
.package(url: "https://github.com/SwiftyTesseract/SwiftyTesseract.git", from: "2.0.0")
],
targets: [
.target(
name: "SwiftOCR",
dependencies: ["SwiftyTesseract"]
)
]
)

  1. 代码实现

在 Sources/SwiftOCR/main.swift 中编写以下代码:

import Foundation
import SwiftyTesseract
import AppKit

// 定义 Tesseract 识别器
let tesseract = SwiftyTesseract(language: .english)

// 读取图像
let imagePath = "captcha.png" // 确保此路径下有验证码图片
guard let image = NSImage(contentsOfFile: imagePath) else {
print("无法加载图片")
exit(1)
}

// 进行 OCR 识别
tesseract.performOCR(on: image) { result in
switch result {
case .success(let text):
print("识别出的验证码: (text)")
case .failure(let error):
print("OCR 识别失败: (error)")
}
}

  1. 代码解析
    3.1 读取图像
    let imagePath = "captcha.png"
    guard let image = NSImage(contentsOfFile: imagePath) else {
    print("无法加载图片")
    exit(1)
    }

使用 NSImage 读取本地图片

如果图像不存在,则终止程序

3.2 OCR 解析
let tesseract = SwiftyTesseract(language: .english)
tesseract.performOCR(on: image) { result in
switch result {
case .success(let text):
print("识别出的验证码: (text)")
case .failure(let error):
print("OCR 识别失败: (error)")
}
}

初始化 SwiftyTesseract 并设置语言

调用 performOCR 进行识别

使用 switch 语句处理识别结果

  1. 运行程序

将验证码图片 captcha.png 放入项目目录,然后运行:

swift run

程序会加载验证码图片,进行 OCR 解析,并输出识别出的文本。

  1. 提高 OCR 识别率
    5.1 调整 Tesseract 参数
    let tesseract = SwiftyTesseract(language: .custom("eng"), bundle: .main)
    tesseract.performOCR(on: image)

5.2 进一步图像优化

去除噪点

调整对比度

字符分割,提高单字符识别率

posted @ 2025-09-08 14:56  ttocr、com  阅读(12)  评论(0)    收藏  举报