다음을 통해 공유


MLModel.CompileModel(NSUrl, NSError) 메서드

정의

에서 modelUrl모델을 컴파일합니다.

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

매개 변수

modelUrl
NSUrl

컴파일할 모델에 대한 URL입니다.

error
NSError

실패 시 발생한 오류입니다.

반환

특성

설명

비용이 많이 드는 함수입니다. 실행 시간은 모델 크기에 따라 다르지만 개발자는 백그라운드 스레드에서 이 메서드를 실행하고 이 메서드를 반복적으로 실행할 필요가 없도록 조치를 취해야 합니다.

다음 예제에서는 개발자가 모델을 다운로드하고, 컴파일하고, 컴파일된 모델을 앱의 영구 스토리지로 이동하는 방법을 보여 줍니다.

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;
	}
}

적용 대상