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