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