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
相关产品推荐
相关产品推荐

