【问题标题】:Knowing when MediaCapture is previewing了解 MediaCapture 何时预览
【发布时间】:2017-09-30 09:08:25
【问题描述】:

我正在使用MediaCapture 制作一个简单的照片应用程序。我希望应用程序在网络摄像头完成启动并显示预览后立即自动开始倒计时。一切都很好,除了倒计时在相机预览出现之前开始。这是我的代码的要点...

mediaCapture = new MediaCapture();
await mediaCapture.InitializeAsync();
previewElement.Source = mediaCapture;
await mediaCapture.StartPreviewAsync();
startCountdown();

xaml:

<CaptureElement x:Name="previewElement"  Visibility="Visible" FlowDirection="RightToLeft"/>

有什么方法可以检查相机何时完全启动并且预览显示图像?

【问题讨论】:

    标签: c# uwp


    【解决方案1】:

    在寻找答案时,我偶然发现了effects,并发现 MediaCapture 内置了face detection。当检测到人脸时,可以肯定地说相机已启动。

    //setup face detection
    var definition = new FaceDetectionEffectDefinition();
    definition.SynchronousDetectionEnabled = false;
    definition.DetectionMode = FaceDetectionMode.HighPerformance;
    faceDetection = (FaceDetectionEffect)await mediaCapture.AddVideoEffectAsync(definition, MediaStreamType.Photo);
    faceDetection.DesiredDetectionInterval = TimeSpan.FromMilliseconds(33);
    faceDetection.FaceDetected += FaceDetection_FaceDetected;
    faceDetection.Enabled = true;
    
    ...
    
    private async void FaceDetection_FaceDetected(FaceDetectionEffect sender, FaceDetectedEventArgs args) {
    
        if(args.ResultFrame.DetectedFaces.Count() > 0) {
            Debug.WriteLine(string.Format("Detected {0} faces", args.ResultFrame.DetectedFaces.Count()));
            await Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () => HighlightDetectedFaces(args.ResultFrame.DetectedFaces));
            if (!countdownStarted)
                await Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () => startCountdown());
        }
    }
    

    虽然这不是我问题的答案,但它是我问题的解决方案。

    【讨论】:

      猜你喜欢
      • 2016-11-15
      • 1970-01-01
      • 2016-12-05
      • 1970-01-01
      • 2015-02-08
      • 1970-01-01
      • 1970-01-01
      • 2014-10-26
      • 1970-01-01
      相关资源
      最近更新 更多