Tam*_*ury 6 ios swift ios-vision
我想知道两个图像有多相似。为此,我使用VNGenerateImageFeaturePrintRequest并从图像生成VNFeaturePrintObservation 。然后,对于两个不同的图像,我使用它们的VNFeaturePrintObservation计算特征距离。不幸的是,iOS 16.0 和 iOS 17.0 的计算距离不同,因此未达到我的阈值。
我尝试获取如下图像的 featurePrintObservation,
let requestHandler = VNImageRequestHandler(cgImage: cgImage, options: [:])
let request = VNGenerateImageFeaturePrintRequest()
do {
try requestHandler.perform([request])
self.feature = request.results?.first
} catch {
print("Vision error: \(error)")
}
Run Code Online (Sandbox Code Playgroud)
然后我尝试计算两个特征之间的距离,如下所示,
try! feature1.computeDistance(&visionDistance, to: feature2)
Run Code Online (Sandbox Code Playgroud)
对于相同的两个图像,iOS 16.0 和 iOS 17.0 的输出结果“visionDistance”是不同的(例如,iOS 16.3.1 中为“ 22.66224 ”,iOS 17.0.1 中为“ 1.2178229 ”)。我想知道VNFeaturePrintObservation在 iOS 17.0 中是否发生了变化,如果发生变化,有什么方法可以通用两个 iPhone 操作系统的计算吗?
我和一个同事写了一篇详细的文章介绍VNGenerateImageFeaturePrintRequestiOS16和iOS17之间的区别(你可以在Medium上找到它)。
总结一下差异:
VNFeaturePrintObservation是包含 2048 的非标准化Float向量。此外,该computeDistance(_:to:)方法还计算这些向量之间的直接欧几里得距离。
作为结果:
所以,是的,这种变化可能会很烦人。revision请注意,您可以通过将实例的属性设置VNGenerateImageFeaturePrintRequest为VNGenerateImageFeaturePrintRequestRevision1(距离值不会完全相同,但您会得到轻微的、不显着的差异)来在 iOS17 上重现 iOS16 的行为。
如果您只需要支持 iOS17,我建议您优先选择 iOS17VNGenerateImageFeaturePrintRequestRevision2算法,因为比较归一化向量更有意义(归一化向量之间的距离与其余弦距离密切相关,余弦距离是数据分析中向量相似度的流行度量)。
| 归档时间: |
|
| 查看次数: |
257 次 |
| 最近记录: |