图片相似度 swift
Image similarity in swift
swift 视觉相似性特征能够为 2 个图像之间的差异分配一个数字。
其中图像之间的方差为 0,表示图像相同。
随着数量的增加,图像之间的差异越来越大。
我想做的是将其转化为相似度百分比。例如,一张图片与另一张图片有 80% 的相似度。
关于如何安排逻辑来完成此操作的任何想法:
import UIKit
import Vision
func featureprintObservationForImage(atURL url: URL) -> VNFeaturePrintObservation? {
let requestHandler = VNImageRequestHandler(url: url, options: [:])
let request = VNGenerateImageFeaturePrintRequest()
do {
try requestHandler.perform([request])
return request.results?.first as? VNFeaturePrintObservation
} catch {
print("Vision error: \(error)")
return nil
}
}
let apple1 = featureprintObservationForImage(atURL: Bundle.main.url(forResource:"apple1", withExtension: "jpg")!)
let apple2 = featureprintObservationForImage(atURL: Bundle.main.url(forResource:"apple2", withExtension: "jpg")!)
let pear = featureprintObservationForImage(atURL: Bundle.main.url(forResource:"pear", withExtension: "jpg")!)
var distance = Float(0)
try apple1!.computeDistance(&distance, to: apple2!)
var distance2 = Float(0)
try apple1!.computeDistance(&distance2, to: pear!)
这取决于你想如何扩展它。如果您只想要百分比,您可以使用 Float.greatestFiniteMagnitude 作为最大值。
1-(distance/Float.greatestFiniteMagnitude)*100
更好的解决方案可能是设置一个较低的上限,高于该上限的所有内容的相似度仅为 0%。
1-(min(distance, 10)/10)*100
这里的人为上限是10,但它可以是任意数字。
swift 视觉相似性特征能够为 2 个图像之间的差异分配一个数字。 其中图像之间的方差为 0,表示图像相同。 随着数量的增加,图像之间的差异越来越大。
我想做的是将其转化为相似度百分比。例如,一张图片与另一张图片有 80% 的相似度。 关于如何安排逻辑来完成此操作的任何想法:
import UIKit
import Vision
func featureprintObservationForImage(atURL url: URL) -> VNFeaturePrintObservation? {
let requestHandler = VNImageRequestHandler(url: url, options: [:])
let request = VNGenerateImageFeaturePrintRequest()
do {
try requestHandler.perform([request])
return request.results?.first as? VNFeaturePrintObservation
} catch {
print("Vision error: \(error)")
return nil
}
}
let apple1 = featureprintObservationForImage(atURL: Bundle.main.url(forResource:"apple1", withExtension: "jpg")!)
let apple2 = featureprintObservationForImage(atURL: Bundle.main.url(forResource:"apple2", withExtension: "jpg")!)
let pear = featureprintObservationForImage(atURL: Bundle.main.url(forResource:"pear", withExtension: "jpg")!)
var distance = Float(0)
try apple1!.computeDistance(&distance, to: apple2!)
var distance2 = Float(0)
try apple1!.computeDistance(&distance2, to: pear!)
这取决于你想如何扩展它。如果您只想要百分比,您可以使用 Float.greatestFiniteMagnitude 作为最大值。
1-(distance/Float.greatestFiniteMagnitude)*100
更好的解决方案可能是设置一个较低的上限,高于该上限的所有内容的相似度仅为 0%。
1-(min(distance, 10)/10)*100
这里的人为上限是10,但它可以是任意数字。