From 7209f4a534def4fd36100bf0f3d04a836636c162 Mon Sep 17 00:00:00 2001 From: yoshikazu Date: Mon, 27 Jul 2026 15:38:11 +0000 Subject: [PATCH] Add FeaturePrinter --- Sources/Photochk/Core/FeaturePrinter.swift | 23 ++++++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 Sources/Photochk/Core/FeaturePrinter.swift diff --git a/Sources/Photochk/Core/FeaturePrinter.swift b/Sources/Photochk/Core/FeaturePrinter.swift new file mode 100644 index 0000000..66963cb --- /dev/null +++ b/Sources/Photochk/Core/FeaturePrinter.swift @@ -0,0 +1,23 @@ +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) + } +}