import Vision import CoreML import CoreGraphics // MARK: - SET SYMBOL ENGINE class SetSymbolEngine { static var model: VNCoreMLModel? = { guard AppConfig.enableSetSymbolDetection else { return nil } return ModelManager.shared.getModel(name: "IYmtgSetClassifier") }() static func recognizeSet(image: CGImage, orientation: CGImagePropertyOrientation = .up) -> String? { guard let model = model else { return nil } let request = VNCoreMLRequest(model: model) request.imageCropAndScaleOption = .scaleFill // FIX: Use regionOfInterest (Normalized 0..1, Bottom-Left origin) // Target: x=0.85 (Right), y=0.36 (Mid-Lower), w=0.12, h=0.09 request.regionOfInterest = CGRect(x: 0.85, y: 0.36, width: 0.12, height: 0.09) let handler = VNImageRequestHandler(cgImage: image, orientation: orientation, options: [:]) do { try handler.perform([request]) guard let results = request.results as? [VNClassificationObservation], let top = results.first else { return nil } return top.confidence > 0.6 ? top.identifier : nil } catch { return nil } } }