Exemple #1
0
        /// <summary>
        /// Triggered when UIButtonFilePick is clicked, grabs a frame from an image file.
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private async void UIButtonFilePick_Click(object sender, RoutedEventArgs e)
        {
            // Stop Camera preview
            UICameraPreview.Stop();
            if (UICameraPreview.CameraHelper != null)
            {
                await UICameraPreview.CameraHelper.CleanUpAsync();
            }
            UICameraPreview.Visibility = Visibility.Collapsed;
            UIImageViewer.Visibility   = Visibility.Visible;

            // Disable subsequent trigger of this event callback
            UICameraToggle.IsEnabled   = false;
            UIButtonFilePick.IsEnabled = false;

            await m_lock.WaitAsync();

            try
            {
                // Initialize skill with the selected supported device
                m_skeletalDetectorSkill = await m_skeletalDetectorDescriptor.CreateSkillAsync(m_availableExecutionDevices[UISkillExecutionDevices.SelectedIndex]) as SkeletalDetectorSkill;

                // Instantiate a binding object that will hold the skill's input and output resource
                m_skeletalDetectorBinding = await m_skeletalDetectorSkill.CreateSkillBindingAsync() as SkeletalDetectorBinding;

                var frame = await LoadVideoFrameFromFilePickedAsync();

                if (frame != null)
                {
                    SoftwareBitmapSource source = new SoftwareBitmapSource();
                    await source.SetBitmapAsync(frame.SoftwareBitmap);

                    UIImageViewer.Source = source;
                    UIImageViewer_SizeChanged(null, null);

                    await RunSkillAsync(frame, false);
                }

                m_skeletalDetectorSkill   = null;
                m_skeletalDetectorBinding = null;

                m_currentFrameSourceToggled = FrameSourceToggledType.ImageFile;
            }
            catch (Exception ex)
            {
                await(new MessageDialog(ex.Message)).ShowAsync();
                m_currentFrameSourceToggled = FrameSourceToggledType.None;
            }

            m_lock.Release();

            // Enable subsequent trigger of this event callback
            UIButtonFilePick.IsEnabled = true;
            UICameraToggle.IsEnabled   = true;
        }
Exemple #2
0
 /// <summary>
 /// Initialize the SkeletalDetector skill and binding instances
 /// </summary>
 /// <param name="device"></param>
 /// <returns></returns>
 private async Task InitializeSkeletalDetectorAsync(ISkillExecutionDevice device = null)
 {
     if (device != null)
     {
         m_skill = await m_descriptor.CreateSkillAsync(device) as SkeletalDetectorSkill;
     }
     else
     {
         m_skill = await m_descriptor.CreateSkillAsync() as SkeletalDetectorSkill;
     }
     m_binding = await m_skill.CreateSkillBindingAsync() as SkeletalDetectorBinding;
 }
Exemple #3
0
        private async void CameraHelper_FrameArrived(object sender, FrameEventArgs e)
        {
            await m_lock.WaitAsync();

            try
            {
                // Use a lock to process frames one at a time and bypass processing if busy
                if (m_lock.Wait(0))
                {
                    uint cameraFrameWidth  = UICameraPreview.CameraHelper.PreviewFrameSource.CurrentFormat.VideoFormat.Width;
                    uint cameraFrameHeight = UICameraPreview.CameraHelper.PreviewFrameSource.CurrentFormat.VideoFormat.Height;

                    // Allign overlay canvas and camera preview so that face detection rectangle looks right
                    if (!m_isCameraFrameDimensionInitialized || cameraFrameWidth != m_cameraFrameWidth || cameraFrameHeight != m_cameraFrameHeight)
                    {
                        // Can't bind frames of different sizes to same binding.
                        // As a workaround, recreate the binding for each eval if framesize changed.
                        m_skeletalDetectorBinding = await m_skeletalDetectorSkill.CreateSkillBindingAsync() as SkeletalDetectorBinding;

                        m_cameraFrameWidth  = UICameraPreview.CameraHelper.PreviewFrameSource.CurrentFormat.VideoFormat.Width;
                        m_cameraFrameHeight = UICameraPreview.CameraHelper.PreviewFrameSource.CurrentFormat.VideoFormat.Height;

                        await Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, () =>
                        {
                            UIImageViewer_SizeChanged(null, null);
                        });

                        m_isCameraFrameDimensionInitialized = true;
                    }

                    // Run the skill against the frame
                    SoftwareBitmap copyBitmap = SoftwareBitmap.Convert(e.VideoFrame.SoftwareBitmap, BitmapPixelFormat.Bgra8, BitmapAlphaMode.Premultiplied);
                    m_cachedFrame = VideoFrame.CreateWithSoftwareBitmap(copyBitmap);
                    await RunSkillAsync(m_cachedFrame, true);

                    m_lock.Release();
                }
                e.VideoFrame.Dispose();
            }
            catch (Exception ex)
            {
                // Show the error
                await Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, () => UISkillOutputDetails.Text = ex.Message);

                m_lock.Release();
            }
            finally
            {
                m_lock.Release();
            }
        }
Exemple #4
0
        /// <summary>
        /// Initialize the SkeletalDetector skill and binding instances
        /// </summary>
        /// <param name="device"></param>
        /// <returns></returns>
        private async Task InitializeSkeletalDetectorAsync(ISkillExecutionDevice device = null)
        {
            if (device != null)
            {
                m_skill = await m_descriptor.CreateSkillAsync(device) as SkeletalDetectorSkill;
            }
            else
            {
                m_skill = await m_descriptor.CreateSkillAsync() as SkeletalDetectorSkill;
            }
            m_binding = await m_skill.CreateSkillBindingAsync() as SkeletalDetectorBinding;

            m_inputImageFeatureDescriptor = m_binding["InputImage"].Descriptor as SkillFeatureImageDescriptor;
        }