Ejemplo n.º 1
0
        // -----------------------------------------------------------------------
        // KEY SAMPLE CODE STARTS HERE
        // -----------------------------------------------------------------------
        private async Task DetectMotion(string subscriptionKey, string originalFilePath)
        {
            _dataContext.IsWorking  = true;
            _dataContext.SourceUri  = null;
            _dataContext.ResultText = null;

            Helpers.Log(LogIdentifier, "Start motion detection");
            VideoServiceClient client = new VideoServiceClient(subscriptionKey);

            client.Timeout = TimeSpan.FromMinutes(10);

            using (FileStream originalStream = new FileStream(originalFilePath, FileMode.Open, FileAccess.Read))
            {
                // Creates a video operation of motion detection
                Helpers.Log(LogIdentifier, "Start uploading video");
                MotionDetectionOperationSettings settings = new MotionDetectionOperationSettings
                {
                    SensitivityLevel   = MotionDetectionOperationSettings.SensitivityLevels.Medium,
                    DetectLightChange  = true,
                    FrameSamplingValue = 1,
                    MergeTimeThreshold = 0.0
                };
                Operation operation = await client.CreateOperationAsync(originalStream, settings);

                Helpers.Log(LogIdentifier, "Uploading video done");

                // Starts querying service status
                OperationResult result = await client.GetOperationResultAsync(operation);

                while (result.Status != OperationStatus.Succeeded && result.Status != OperationStatus.Failed)
                {
                    Helpers.Log(LogIdentifier, "Server status: {0}, wait {1} seconds...", result.Status, QueryWaitTime.TotalSeconds);
                    await Task.Delay(QueryWaitTime);

                    result = await client.GetOperationResultAsync(operation);
                }
                Helpers.Log(LogIdentifier, "Finish processing with server status: " + result.Status);

                // Processing finished, checks result
                if (result.Status == OperationStatus.Succeeded)
                {
                    // Gets output JSON
                    _dataContext.SourceUri       = new Uri(originalFilePath);
                    _dataContext.ResultText      = Helpers.FormatJson <MotionDetectionResult>(result.ProcessingResult);
                    _dataContext.FrameHighlights = GetHighlights(result.ProcessingResult).ToList();
                }
                else
                {
                    // Failed
                    Helpers.Log(LogIdentifier, "Fail reason: " + result.Message);
                }
                _dataContext.IsWorking = false;
            }
        }
        /// <summary>
        /// Function to create video operation settings. Emotion operations should not have any settings
        /// </summary>
        /// <param name="operation">The currently selected API operation</param>
        /// <returns>Returns default <see cref="VideoOperationSettings"/> for the currently selected operation</returns>
        public VideoOperationSettings CreateVideoOperationSettings(AvailableOperations operation)
        {
            VideoOperationSettings videoOperationSettings = null;

            switch (operation)
            {
            case AvailableOperations.Emotion:
                videoOperationSettings = null;
                break;

            case AvailableOperations.FaceDetection:
                videoOperationSettings = new FaceDetectionOperationSettings();
                break;

            case AvailableOperations.Stabilization:
                videoOperationSettings = new VideoStabilizationOperationSettings();
                break;

            case AvailableOperations.MotionDetection:
                videoOperationSettings = new MotionDetectionOperationSettings()
                {
                    DetectLightChange  = true,
                    FrameSamplingValue = 10,
                    MergeTimeThreshold = 10,
                    SensitivityLevel   = MotionDetectionOperationSettings.SensitivityLevels.Medium
                };
                break;

            case AvailableOperations.Thumbnail:
                videoOperationSettings = new VideoThumbnailOperationSettings()
                {
                    FadeInFadeOut = true,
                    MaxMotionThumbnailDurationInSecs = 10,
                    OutputAudio = true,
                    OutputType  = VideoThumbnailOperationSettings.OutputTypes.Video
                };
                break;

            default:
                break;
            }

            return(videoOperationSettings);
        }