Swift实现OCR(光学字符识别)功能
Swift实现OCR(光学字符识别)功能

Swift实现OCR(光学字符识别)功能

在 Swift 中实现 OCR(光学字符识别)功能,最常见、最推荐的方式是使用 Apple 自家的 Vision 框架。它从 iOS 13 / macOS 10.15 开始就支持内建的文字识别(VNRecognizeTextRequest),效果良好且无需第三方依赖。

VNRecognizeTextRequest

初始化方法

let request = VNRecognizeTextRequest(completionHandler: yourHandler)

常用属性

1、recognitionLevel:VNRequestTextRecognitionLevel类型,识别精度,.fast 或 .accurate(默认 .accurate);

2、usesLanguageCorrection:Bool类型,是否开启语言纠错(默认 false);

3、recognitionLanguages:[String]类型,设置识别语言,如 [“en-US”]、[“zh-Hans”] 等;

4、customWords:[String]?类型,可选,自定义词典,提升特定词识别准确率;

5、minimumTextHeight:Float类型,最小文字高度(相对于图像高度),默认 0。

6、revision:Int类型,指定使用的 Vision 版本,自动适配系统默认即可;

7、preferredLanguages:[String]类型,系统优先识别语言,Vision 会基于此匹配最佳语言;

8、automaticallyDetectsLanguage:Bool类型,是否自动语言识别(默认 true);

9、usesCPUOnly:Bool类型,是否禁用 GPU 推理,仅使用 CPU(调试或兼容性)。

使用 Apple Vision 框架实现 OCR(iOS/macOS)

1、导入框架

import Vision
import VisionKit // macOS 不需要

2、创建OCR请求

let request = VNRecognizeTextRequest { (request, error) in
    guard error == nil else {
        print("识别失败:\(error!.localizedDescription)")
        return
    }

    if let observations = request.results as? [VNRecognizedTextObservation] {
        for observation in observations {
            if let candidate = observation.topCandidates(1).first {
                print("识别文字:", candidate.string)
            }
        }
    }
}
request.recognitionLevel = .accurate // 或 .fast
request.usesLanguageCorrection = true
request.recognitionLanguages = ["zh-Hans", "en-US"]

3、传入图像进行识别

guard let cgImage = yourUIImage.cgImage else { return }

let handler = VNImageRequestHandler(cgImage: cgImage, options: [:])

DispatchQueue.global(qos: .userInitiated).async {
    do {
        try handler.perform([request])
    } catch {
        print("执行识别失败:\(error)")
    }
}

其他方式

1、Tesseract OCR(第三方)

支持多语言,跨平台,但集成相对复杂。

使用如 SwiftyTesseract,但是现阶段该GitHub库已经不再维护,作者推荐使用Apple Vision 框架的文本识别功能。

2、Firebase ML Kit

支持 iOS,支持更复杂的文档识别(但非纯本地),需要网络。

总结

iOS 13+ / macOS 10.15+系统版本,推荐使用Vision 框架,简洁、安全、本地运行。

iOS 12 以下系统版本,可考虑 Tesseract。

多语言或跨平台需求:可考虑集成 SwiftyTesseract。

相关文章

1、VNRecognizeTextRequest:https://developer.apple.com/documentation/vision/vnrecognizetextrequest

2、Recognizing Text in Images:https://developer.apple.com/documentation/vision/recognizing-text-in-images

   

如果您认为这篇文章给您带来了帮助,您可以在此通过支付宝或者微信打赏网站开发者。

欢迎加入我们的 微信交流群QQ交流群,交流更多精彩内容!
微信交流群二维码 QQ交流群二维码

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注