利用 Swift + Vision 实现图像预处理与文本识别利用 Swift + Vision 实现图像预处理与文本识别
图像处理和识别技术是现代 iOS 应用中常见的核心能力之一,从自动扫描文档到识别验证码,图像预处理的质量直接影响最终的识别效果。本文将使用 Swift 结合 Vision 和 Core Image,介绍如何在 iOS/macOS 环境中完成图像处理与文本识别流程。
一、技术选型
Swift:Apple 官方推荐语言,适合 iOS/macOS 应用开发。
Core Image:强大的图像处理框架,用于灰度化、滤波、二值化等。
Vision:Apple 提供的高阶计算机视觉框架,可用于文本检测与识别。
二、图像预处理流程
我们使用 Core Image 实现图像的灰度化与二值化:
import UIKit
import CoreImage
func preprocessImage(_ image: UIImage) -> CIImage? {
guard let ciImage = CIImage(image: image) else { return nil }
// 灰度化
let grayscaleParams: [String: Any] = [
kCIInputImageKey: ciImage
]
let grayscale = CIFilter(name: "CIPhotoEffectMono", parameters: grayscaleParams)?.outputImage
// 二值化(自适应阈值替代)
let thresholdFilter = CIFilter(name: "CIColorClamp")!
thresholdFilter.setValue(grayscale, forKey: kCIInputImageKey)
thresholdFilter.setValue(CIVector(x: 0.9, y: 0.9, z: 0.9, w: 1), forKey: "inputMaxComponents")
thresholdFilter.setValue(CIVector(x: 0.1, y: 0.1, z: 0.1, w: 0), forKey: "inputMinComponents")
return thresholdFilter.outputImage
}更多内容访问ttocr.com或联系1436423940
三、文本识别流程(OCR)
处理完图像后,我们使用 Vision 框架识别其中的文本:
import Vision
func recognizeText(from ciImage: CIImage) {
let handler = VNImageRequestHandler(ciImage: ciImage, options: [:])
let request = VNRecognizeTextRequest { (request, error) in
guard let observations = request.results as? [VNRecognizedTextObservation] else { return }
for observation in observations {
if let topCandidate = observation.topCandidates(1).first {
print("识别结果:\(topCandidate.string)")
}
}
}
request.recognitionLevel = .accurate
request.usesLanguageCorrection = true
do {
try handler.perform([request])
} catch {
print("识别失败:\(error)")
}
}
四、完整使用流程示例
func processAndRecognize(image: UIImage) {
guard let processedCIImage = preprocessImage(image) else {
print("图像预处理失败")
return
}
recognizeText(from: processedCIImage)
}
调用示例:
if let inputImage = UIImage(named: "captcha.png") {
processAndRecognize(image: inputImage)
}
浙公网安备 33010602011771号