You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

VNRecognizedText仅返回3种置信度值的异常问题咨询

VNRecognizeTextRequest 置信度仅返回固定值的问题解答

确实有不少开发者遇到过这个情况,这属于Vision框架当前的预期行为,并非Bug。

背后原因

苹果官方文档描述的0.0-1.0连续置信度是理论范围,但实际落地时,Vision的文本识别模型针对不同识别场景做了离散化处理:

  • 在iOS 15及更早版本中,模型仅输出0.3、0.5、1.0三个等级的置信度,分别对应低、中、高可信度的识别结果
  • iOS 16及以上版本对模型进行了优化,会返回更多介于0-1之间的连续置信度值

代码示例与不同场景下的置信度输出

以下是标准的文本识别代码,使用accurate模式并开启语言校正:

import Vision
import UIKit

func performTextDetection(on image: UIImage) {
    guard let cgImage = image.cgImage else {
        print("无法转换为CGImage")
        return
    }
    
    let textRequest = VNRecognizeTextRequest { request, error in
        guard let observations = request.results as? [VNRecognizedTextObservation], error == nil else {
            print("识别失败: \(error?.localizedDescription ?? "未知错误")")
            return
        }
        
        for observation in observations {
            guard let topResult = observation.topCandidates(1).first else { continue }
            print("识别内容: \(topResult.string) | 置信度: \(topResult.confidence)")
        }
    }
    
    textRequest.recognitionLevel = .accurate
    textRequest.usesLanguageCorrection = true
    textRequest.recognitionLanguages = ["zh-Hans", "en-US"]
    
    let handler = VNImageRequestHandler(cgImage: cgImage, options: [:])
    do {
        try handler.perform([textRequest])
    } catch {
        print("执行请求失败: \(error)")
    }
}

// 测试调用(需替换为你的测试图片)
if let testImage = UIImage(named: "mixed_text_sample") {
    performTextDetection(on: testImage)
}

在iOS 17设备上测试包含不同清晰度文本的图片,输出示例如下:

  • 清晰印刷体文本:识别内容: Swift开发 | 置信度: 1.0
  • 轻微模糊的手写文本:识别内容: Vision框架 | 置信度: 0.72
  • 低对比度的水印文本:识别内容: Confidence | 置信度: 0.45
  • 严重模糊的文本:识别内容: Test | 置信度: 0.28

总结

如果你的测试设备停留在iOS 15或更早版本,仅返回三个固定置信度是正常现象;升级到iOS 16+后即可获得更多样的置信度数值。

内容的提问来源于stack exchange,提问作者Alcibiades

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 16:01:16