Compartir a través de


MLModel.CompileModel(NSUrl, NSError) Método

Definición

Compila el modelo en modelUrl.

[Foundation.Export("compileModelAtURL:error:")]
public static Foundation.NSUrl CompileModel (Foundation.NSUrl modelUrl, out Foundation.NSError error);
static member CompileModel : Foundation.NSUrl *  -> Foundation.NSUrl

Parámetros

modelUrl
NSUrl

Dirección URL de un modelo que se va a compilar.

error
NSError

En caso de error, el error que se produjo.

Devoluciones

Atributos

Comentarios

Se trata de una función costosa. El tiempo de ejecución varía según el tamaño del modelo, pero los desarrolladores deben ejecutar este método en un subproceso en segundo plano y tomar medidas para evitar la necesidad de ejecutar este método repetidamente.

En el ejemplo siguiente se muestra cómo un desarrollador puede descargar un modelo, compilarlo y mover el modelo compilado al almacenamiento permanente de la aplicación:

NSUrl CompileModel(string modelName)
{
	var downloadedFile = modelName + ".mlmodel";
	var fileUrl = NSUrl.FromFilename(downloadedFile);
	NSError err = null;
	var compiledUrl = MLModel.CompileModel(fileUrl, out err);
	if (err != null)
	{
		throw new Exception(err.ToString());
	}
	return compiledUrl;
}

NSUrl StoreModel(NSUrl sourceUrl)
{
	var fileManager = NSFileManager.DefaultManager;
	NSError err = null;
	var appSupportDirectory = fileManager.GetUrl(NSSearchPathDirectory.ApplicationSupportDirectory, NSSearchPathDomain.User, sourceUrl, true, out err);
	if (err != null)
	{
		throw new Exception(err.ToString());
	}

	// Create a permanent URL in appSupportDirectory
	var destinationUrl = appSupportDirectory.Append(sourceUrl.LastPathComponent, true);
	NSUrl resultingUrl = null;

	var destPath = destinationUrl.AbsoluteString;
	// If the compiled model directory exists, replace it
	if (System.IO.Directory.Exists(destinationUrl.Path))
	{
		fileManager.Replace(destinationUrl, sourceUrl, null, NSFileManagerItemReplacementOptions.None, out resultingUrl, out err);
	}
	else
	{
		fileManager.Copy(sourceUrl, destinationUrl, out err);
	}
	if (err != null)
	{
		throw new Exception(err.ToString());
	}
	return resultingUrl;
}

private async Task<NSUrl> DownloadAndStoryCoreMLModelAsync()
{
  var modelName = "SomeModel";
	var sourceUrl ="https://Contoso.org/SomeModel.mlmodel";
	using (var wc = new WebClient())
	{
		await wc.DownloadFileTaskAsync(sourceUrl, modelName +".mlmodel");
		var compiledModelPath = CompileModel(modelName);
		var finalPath = StoreModel(compiledModelPath);
    return finalPath;
	}
}

Se aplica a