-
Use model deployment and security with Core ML
Discover how to deploy Core ML models outside of your app binary, giving you greater flexibility and control when bringing machine learning features to your app. And learn how Core ML Model Deployment enables you to deliver revised models to your app without requiring an app update. We'll also walk you through how you can protect custom machine learning models through encryption, and preview your model performance in Xcode.
For more information on working with Core ML, including bringing over models trained in environments like TensorFlow and PyTorch, we also recommend watching "Get your models on device using Core ML Converters.”Recursos
Vídeos relacionados
WWDC20
-
Buscar neste vídeo...
-
-
4:34 - Flower Classifier using Core ML Model Deployment
private func classifyFlower(in image: CGImage) { // Check for a loaded model if let model = flowerClassifier { classify(image, using: model) return } MLModelCollection.beginAccessing(identifier: "FlowerModels") { [self] result in var modelURL: URL? switch result { case .success(let collection): modelURL = collection.entries["FlowerClassifier"]?.modelURL case .failure(let error): handleModelCollectionFailure(for: error) } let result = loadFlowerClassifier(from: modelURL) switch result { case .success(let model): classify(image, using: model) case .failure(let error): handleModelLoadFailure(for: error) } } } func loadFlowerClassifier(from modelURL: URL?) -> Result<FlowerClassifier, Error> { if let modelURL = modelURL { return Result { try FlowerClassifier(contentsOf: modelURL) } } else { return Result { try FlowerClassifier(configuration: .init()) } } } -
20:03 - Compiler flag for encrypting a model
--encrypt "$SRCROOT/HelloFlowers/Models/FlowerStylizer.mlmodelkey" [Production note] or if we're tight for horizontal space we can use this: --encrypt "$SRCROOT/.../FlowerStylizer.mlmodelkey" -
20:50 - Working with an encrypted model
func stylizeImage() { // If we already loaded the model, apply the effect if let model = flowerStylizer { applyStyledEffect(using: model) return } // Otherwise load and apply FlowerStylizer.load { [self] result in switch result { case .success(let model): flowerStylizer = model DispatchQueue.main.async { applyStyledEffect(using: model) } case .failure(let error): handleFailure(for: error) } } } func handleFailure(for error: Error) { switch error { case MLModelError.modelKeyFetch: handleNetworkFailure() default: handleModelLoadError(error) } }
-