/// <summary> /// Factory method for instantiating and initializing the skill. /// </summary> /// <param name="executionDevice"></param> /// <returns></returns> public IAsyncOperation <ISkill> CreateSkillAsync(ISkillExecutionDevice executionDevice) { return(AsyncInfo.Run(async(token) => { // Create a skill instance with the executionDevice supplied var skillInstance = await NeuralStyleTransformerSkill.CreateAsync(this, executionDevice, styleChoice); return skillInstance as ISkill; })); }
/// <summary> /// Creates and initializes a NeuralStyleTransformerSkill instance /// </summary> /// <param name="descriptor"></param> /// <param name="device"></param> /// <returns></returns> internal static IAsyncOperation <NeuralStyleTransformerSkill> CreateAsync( ISkillDescriptor descriptor, ISkillExecutionDevice device, StyleChoices Mode) { return(AsyncInfo.Run(async(token) => { // Create instance var skillInstance = new NeuralStyleTransformerSkill(descriptor, device); // Load WinML model var modelName = "candy.onnx"; switch (Mode) { case StyleChoices.Candy: modelName = "candy.onnx"; break; case StyleChoices.Mosaic: modelName = "mosaic.onnx"; break; case StyleChoices.Pointilism: modelName = "pointilism.onnx"; break; case StyleChoices.RainPrincess: modelName = "rain_princess.onnx"; break; case StyleChoices.Udnie: modelName = "udnie.onnx"; break; } var modelFile = await StorageFile.GetFileFromApplicationUriAsync(new Uri($"ms-appx:///NeuralStyleTransformer/Models/{modelName}")); var winmlModel = LearningModel.LoadFromFilePath(modelFile.Path); // Create WinML session skillInstance.m_winmlSession = new LearningModelSession(winmlModel, GetWinMLDevice(device)); // Create output frame _outputFrame?.Dispose(); _outputFrame = new VideoFrame(BitmapPixelFormat.Bgra8, NeuralStyleTransformerConst.IMAGE_WIDTH, NeuralStyleTransformerConst.IMAGE_HEIGHT); return skillInstance; })); }