在 Swift 中使用 Tesseract OCR 解析验证码


1. 环境准备
1.1 安装 Xcode
在 macOS 上开发 Swift 代码,建议安装最新版 Xcode,可以通过 App Store 下载。

1.2 安装 Tesseract OCR
在 macOS 上,我们可以使用 Homebrew 安装 Tesseract:

brew install tesseract
然后检查安装是否成功:

tesseract --version
1.3 添加 Tesseract OCR Swift 库
我们使用 TesseractOCRiOS 作为 Swift 绑定库,在 Xcode 项目的 Podfile 中添加:

pod 'TesseractOCRiOS'
然后运行:

pod install
确保你的 Xcode 项目使用 CocoaPods 进行依赖管理。

2. 代码实现
在 Swift 项目中,创建一个新的 Swift 文件 OCRProcessor.swift,并添加以下代码:

import UIKit
import TesseractOCR

class OCRProcessor {
    
    /// 预处理图像:灰度化 + 二值化
    func preprocessImage(_ image: UIImage) -> UIImage? {
        guard let cgImage = image.cgImage else { return nil }
        let ciImage = CIImage(cgImage: cgImage)
        
        // 应用灰度滤镜
        let grayscaleFilter = CIFilter(name: "CIColorControls")
        grayscaleFilter?.setValue(ciImage, forKey: kCIInputImageKey)
        grayscaleFilter?.setValue(0.0, forKey: kCIInputSaturationKey)
        
        // 应用二值化处理
        let thresholdFilter = CIFilter(name: "CIThresholdToAlpha")
        thresholdFilter?.setValue(grayscaleFilter?.outputImage, forKey: kCIInputImageKey)
        
        if let outputImage = thresholdFilter?.outputImage {
            let context = CIContext()
            if let cgImageResult = context.createCGImage(outputImage, from: outputImage.extent) {
                return UIImage(cgImage: cgImageResult)
            }
        }
        return nil
    }
    
    /// OCR 识别验证码
    func recognizeText(from image: UIImage) -> String? {
        guard let tesseract = G8Tesseract(language: "eng") else { return nil }
        
        tesseract.engineMode = .tesseractOnly
        tesseract.pageSegmentationMode = .singleLine
        tesseract.image = image
        tesseract.recognize()
        
        return tesseract.recognizedText
    }
}
3. 代码解析
3.1 预处理图像
灰度化处理 通过 CIColorControls 去除颜色干扰:

grayscaleFilter?.setValue(0.0, forKey: kCIInputSaturationKey)
二值化(Thresholding) 提高字符对比度:


let thresholdFilter = CIFilter(name: "CIThresholdToAlpha")
3.2 OCR 解析
加载 Tesseract OCR:

guard let tesseract = G8Tesseract(language: "eng") else { return nil }
设定 Tesseract 识别模式:


tesseract.engineMode = .tesseractOnly
tesseract.pageSegmentationMode = .singleLine
执行 OCR 识别:

tesseract.image = image
tesseract.recognize()
4. 运行 OCR 识别
在 ViewController 中调用 OCR 处理类:


import UIKit

class ViewController: UIViewController {
    let ocrProcessor = OCRProcessor()
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        if let image = UIImage(named: "captcha.png") {
            if let processedImage = ocrProcessor.preprocessImage(image) {
                if let recognizedText = ocrProcessor.recognizeText(from: processedImage) {
                    print("识别出的验证码: \(recognizedText)")
                } else {
                    print("OCR 识别失败")
                }
            }
        }
    }
}
5. 提高 OCR 识别率
5.1 选择更合适的 PSM
更多内容访问ttocr.com或联系1436423940
tesseract.pageSegmentationMode = .singleChar
适用于单字符验证码,提高精准度。

5.2 进一步优化图像
去噪

字符分割

使用更好的 Tesseract 训练数据

6. 运行项目
确保 captcha.png 存在于 Assets 目录中,然后运行 Xcode 项目,你将会在控制台看到验证码识别结果。

猜你喜欢

转载自blog.csdn.net/asfdsgdf/article/details/146446348
今日推荐