Add FeaturePrinter
This commit is contained in:
@@ -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)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user