24 lines
924 B
Swift
24 lines
924 B
Swift
import Foundation
|
|
import Vision
|
|
|
|
/// Vision の feature print で「見た目の近さ」を測る。
|
|
///
|
|
/// `perform(on: URL)` は Vision 側が ImageIO でデコードするため、HEIC や RAW もそのまま渡せる。
|
|
enum FeaturePrinter {
|
|
static func compute(for url: URL) async throws -> FeaturePrintObservation {
|
|
var request = GenerateImageFeaturePrintRequest()
|
|
// 縦横比が違う版(トリミング・リサイズ)でも比較できるよう、切り取らずに収める。
|
|
request.cropAndScaleAction = .scaleToFit
|
|
return try await request.perform(on: url)
|
|
}
|
|
|
|
/// 距離は 0 が同一。比較できない組み合わせでは nil を返す。
|
|
static func distance(
|
|
_ a: FeaturePrintObservation?,
|
|
_ b: FeaturePrintObservation?
|
|
) -> Double? {
|
|
guard let a, let b else { return nil }
|
|
return try? a.distance(to: b)
|
|
}
|
|
}
|