返回

使用 Vision 框架中的 VNRecognizeTextRequest.accurate 提取单词级别的边框,提升文本识别精度

IOS

在 Vision 框架中使用 VNRecognizeTextRequest.accurate 提取单词级别的边框

引言

文本识别是计算机视觉领域的一项关键技术,它使机器能够从图像和文档中提取有意义的信息。苹果的 Vision 框架为 iOS 和 macOS 开发者提供了强大的文本识别功能。本文将重点介绍如何使用 VNRecognizeTextRequest.accurate 在 Vision 框架中提取单词级别的边框,从而实现更精确的文本识别。

识别模式的选择

Vision 框架提供两种文本识别模式:.fast.accurate.fast 模式速度较快,但识别精度较低,而 .accurate 模式识别精度更高,但速度较慢。对于要求高精度的应用,例如从法律文件或医学文档中提取文本,建议使用 .accurate 模式。

使用 VNRecognizeTextRequest.accurate

VNRecognizeTextRequest.accurate 是一种识别请求,用于从图像中提取文本。它接受一张图像作为输入,并返回一个 VNRecognizedTextObservation 数组,其中包含有关图像中识别的文本的信息。每个 VNRecognizedTextObservation 对象包含一个 boundingBox 属性,它指定文本边界框的标准化坐标。

要使用 VNRecognizeTextRequest.accurate,需要遵循以下步骤:

  1. 创建一个 VNRecognizeTextRequest 对象,并将其识别级别设置为 .accurate
  2. 创建一个 VNImageRequestHandler 对象,并使用待识别图像的 CGImage 初始化它。
  3. 使用 perform() 方法在图像处理程序上执行识别请求。
  4. 处理识别请求的结果,提取 VNRecognizedTextObservation 对象及其边界框。

提取单词级别的边框

VNRecognizeTextRequest.accurate 默认返回文本块的边框。要提取单词级别的边框,需要进一步处理 VNRecognizedTextObservation 对象。一种方法是使用 stringForRange() 方法获取特定单词的子字符串,然后从其 boundingBox 属性中提取相应的边框。

代码示例

以下 Swift 代码示例展示了如何使用 VNRecognizeTextRequest.accurate 提取单词级别的边框:

import Vision

// Create a VNRecognizeTextRequest object
let request = VNRecognizeTextRequest()
request.recognitionLevel = .accurate

// Create a VNImageRequestHandler object
let handler = VNImageRequestHandler(cgImage: image.cgImage!)

// Perform the recognition request
try handler.perform([request])

// Get the recognized text observations
let observations = request.results as! [VNRecognizedTextObservation]

// Iterate over the observations
for observation in observations {
    // Get the bounding box for each word
    for word in observation.topCandidates(1) {
        let boundingBox = observation.boundingBox(for: word)
        // ...
    }
}

结论

通过使用 VNRecognizeTextRequest.accurate 并进一步处理 VNRecognizedTextObservation 对象,可以在 Vision 框架中提取单词级别的边框。这对于需要高精度的文本识别应用至关重要,例如文档扫描和文本分析。

常见问题解答

1. 如何提高单词边框的准确性?
使用 accurate 识别模式并确保图像质量良好。

2. 可以从图像中提取任意数量的单词边框吗?
是的,你可以提取图像中所有单词的边框,但对于复杂的图像,可能需要进一步处理以过滤掉错误的检测结果。

3. 除了 accurate 识别模式外,还有其他提高识别精度的技术吗?
考虑使用预处理技术,例如图像增强和噪声去除,以及后处理技术,例如文本行分割和连词假设。

4. 如何将提取的单词边框与图像中的单词对齐?
可以使用 VNImageRectForNormalizedRect() 方法将标准化坐标转换为图像坐标。

5. 有没有开源库可以简化单词边框提取过程?
有许多开源库可以帮助简化 Vision 框架的文本识别,例如 Tesseract OCR 和 OpenCV。