Esempio n. 1
0
        private void Slider_OnManipulationStarted(object sender, ManipulationStartedRoutedEventArgs e)
        {
            _isManipulating = true;

            Execute.BeginOnThreadPool(async() =>
            {
                TimeSpan processedPosition;
                while (_isManipulating)
                {
                    var position = _lastPosition;
                    if (position != null && processedPosition != position)
                    {
                        var thumbnailWidth  = _videoProperties.Orientation == VideoOrientation.Normal || _videoProperties.Orientation == VideoOrientation.Rotate180 ? (int)_videoProperties.Width : (int)_videoProperties.Height;
                        var thumbnailHeight = _videoProperties.Orientation == VideoOrientation.Normal || _videoProperties.Orientation == VideoOrientation.Rotate180 ? (int)_videoProperties.Height : (int)_videoProperties.Width;
                        var photo           = await _composition.GetThumbnailAsync(position.Value,
                                                                                   thumbnailWidth,
                                                                                   thumbnailHeight,
                                                                                   VideoFramePrecision.NearestFrame);

                        processedPosition = position.Value;
                        Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () =>
                        {
                            RaiseThumbnailChanged(new ThumbnailChangedEventArgs {
                                Thumbnail = photo
                            });
                        });
                    }

//#if DEBUG
//                    VibrateController.Default.Start(TimeSpan.FromMilliseconds(50));
//#endif
                }
            });
        }
Esempio n. 2
0
        private void Slider_OnManipulationStarted(object sender, ManipulationStartedEventArgs e)
        {
            _isManipulating = true;

            Telegram.Api.Helpers.Execute.BeginOnThreadPool(async () =>
            {
                TimeSpan processedPosition;
                while (_isManipulating)
                {
                    //return;
                    var position = _lastPosition;
                    if (position != null && processedPosition != position)
                    {
                        var thumbnailWidth = _videoProperties.Orientation == VideoOrientation.Normal || _videoProperties.Orientation == VideoOrientation.Rotate180 ? (int)_videoProperties.Width : (int)_videoProperties.Height;
                        var thumbnailHeight = _videoProperties.Orientation == VideoOrientation.Normal || _videoProperties.Orientation == VideoOrientation.Rotate180 ? (int)_videoProperties.Height : (int)_videoProperties.Width;
                        var photo = await _composition.GetThumbnailAsync(position.Value,
                            0,
                            0,
                            VideoFramePrecision.NearestFrame);

                        processedPosition = position.Value;
                        Deployment.Current.Dispatcher.BeginInvoke(() =>
                        {
                            RaiseThumbnailChanged(new ThumbnailChangedEventArgs { Thumbnail = photo });
                        });
                    }
                    //Thread.Sleep(100);
//#if DEBUG
//                    VibrateController.Default.Start(TimeSpan.FromMilliseconds(50));
//#endif
                }
            });
        }
Esempio n. 3
0
        async Task <MediaStreamSource> OpenVideo()
        {
            this.progressText.Text = "Downloading video...";

            var thumbnailFile = await StorageFile.GetFileFromApplicationUriAsync(new Uri("ms-appx:///Assets/Logo.scale-100.png"));

            var thumbnail = RandomAccessStreamReference.CreateFromFile(thumbnailFile);

            var url = "http://video.ch9.ms/ch9/4597/8db5a656-b173-4897-b2aa-e2075fb24597/windows10recap.mp4";

            var file = await StorageFile.CreateStreamedFileFromUriAsync(
                "windows10recap.mp4",
                new Uri(url),
                thumbnail);

            this.progressText.Text = "Creating clip...";
            var clip = await MediaClip.CreateFromFileAsync(file);

            clip.VideoEffectDefinitions.Add(new VideoEffectDefinition(typeof(ExampleVideoEffect).FullName));

            var composition = new MediaComposition();

            composition.Clips.Add(clip);

            if (ThumbnailGenerator.IsDrawingThumbnail)
            {
                customThumbnail = await composition.GetThumbnailAsync(TimeSpan.FromSeconds(10), 1280, 720, VideoFramePrecision.NearestFrame);
            }

            return(composition.GenerateMediaStreamSource());
        }
        public async Task <BitmapImage> GetThumbnailAsync(string mediaGroupName)
        {
            BitmapImage      image             = null;
            StorageFile      mediaGroupCMPFile = null;
            MediaComposition mediaComposition  = null;
            var dispatcher = Windows.ApplicationModel.Core.CoreApplication.MainView.CoreWindow.Dispatcher;

            try
            {
                await dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, async() =>
                {
                    image = new BitmapImage();
                    image.CreateOptions = BitmapCreateOptions.IgnoreImageCache;

                    mediaGroupCMPFile = await localFolder.GetFileAsync(mediaGroupName + ".cmp");
                    mediaComposition  = await MediaComposition.LoadAsync(mediaGroupCMPFile);

                    await image.SetSourceAsync(await mediaComposition.GetThumbnailAsync(
                                                   TimeSpan.Zero, 0, 0, VideoFramePrecision.NearestFrame));
                });

                return(image);
            }
            catch (Exception e)
            {
                return(null);
            }
        }
        async Task<MediaStreamSource> OpenVideo()
        {
            this.progressText.Text = "Downloading video...";

            var thumbnailFile = await StorageFile.GetFileFromApplicationUriAsync(new Uri("ms-appx:///Assets/Logo.scale-100.png"));
            var thumbnail = RandomAccessStreamReference.CreateFromFile(thumbnailFile);

            var url = "http://video.ch9.ms/ch9/4597/8db5a656-b173-4897-b2aa-e2075fb24597/windows10recap.mp4";

            var file = await StorageFile.CreateStreamedFileFromUriAsync(
                "windows10recap.mp4",
                new Uri(url),
                thumbnail);

            this.progressText.Text = "Creating clip...";
            var clip = await MediaClip.CreateFromFileAsync(file);
            clip.VideoEffectDefinitions.Add(new VideoEffectDefinition(typeof(ExampleVideoEffect).FullName));

            var composition = new MediaComposition();
            composition.Clips.Add(clip);

            if (ThumbnailGenerator.IsDrawingThumbnail)
            {
                customThumbnail = await composition.GetThumbnailAsync(TimeSpan.FromSeconds(10), 1280, 720, VideoFramePrecision.NearestFrame);
            }

            return composition.GenerateMediaStreamSource();
        }
Esempio n. 6
0
        public static async Task <ImageSource> GetPreviewBitmapAsync(StorageFile sourceFile, int requestedMinSide = 1280)
        {
            try
            {
                if (sourceFile.ContentType.Equals("video/mp4"))
                {
                    var props = await sourceFile.Properties.GetVideoPropertiesAsync();

                    var composition = new MediaComposition();
                    var clip        = await MediaClip.CreateFromFileAsync(sourceFile);

                    composition.Clips.Add(clip);

                    using (var imageStream = await composition.GetThumbnailAsync(TimeSpan.Zero, (int)props.GetWidth(), (int)props.GetHeight(), VideoFramePrecision.NearestKeyFrame))
                    {
                        return(await GetPreviewBitmapAsync(imageStream, requestedMinSide));
                    }
                }

                using (var imageStream = await sourceFile.OpenReadAsync())
                {
                    return(await GetPreviewBitmapAsync(imageStream, requestedMinSide));
                }
            }
            catch
            {
                return(null);
            }
        }
Esempio n. 7
0
        public static async Task <SoftwareBitmap> GetFrameFromTime(MediaComposition composition, TimeSpan time)
        {
            var frame = await composition.GetThumbnailAsync(
                time,
                400,
                300,
                VideoFramePrecision.NearestFrame
                );

            SoftwareBitmap bitmap;

            using (var stream = new InMemoryRandomAccessStream())
            {
                await RandomAccessStream.CopyAsync(frame, stream);

                BitmapDecoder decoder = await BitmapDecoder.CreateAsync(stream);

                stream.Seek(0);

                bitmap = SoftwareBitmap.Convert(
                    await decoder.GetSoftwareBitmapAsync(),
                    BitmapPixelFormat.Rgba16,
                    BitmapAlphaMode.Premultiplied);
                return(bitmap);
            }
        }
Esempio n. 8
0
        private async Task <Dictionary <TimeSpan, Face[]> > DetectFace_Video(StorageFile fileData)
        {
            // Process configs
            const int frameJumpSize = 15;
            const int frameQuota    = 20;
            const int frameTimeout  = 60_000;

            // Video
            var videoProperties = await fileData.Properties.GetVideoPropertiesAsync();

            var videoTime  = TimeSpan.FromSeconds(0);
            var videoFrame = 0;

            // DetectedFaces
            var detectedFaces = new Dictionary <TimeSpan, Face[]>();

            // Process every frame
            while (videoTime < videoProperties.Duration)
            {
                // Frame cut
                var mediaClip = await MediaClip.CreateFromFileAsync(fileData);

                var mediaComposition = new MediaComposition();
                mediaComposition.Clips.Add(mediaClip);
                var frame = await mediaComposition.GetThumbnailAsync(
                    videoTime,
                    0,
                    0,
                    VideoFramePrecision.NearestFrame
                    );

                // Stream conversion
                var randomAccessStream = new InMemoryRandomAccessStream();
                await RandomAccessStream.CopyAsync(frame, randomAccessStream);

                randomAccessStream.Seek(0);

                // Process and add image
                var detectedFace = await DetectFace_Image(randomAccessStream.AsStreamForRead());

                if (detectedFace != null)
                {
                    detectedFaces.Add(videoTime, detectedFace);
                }

                // Quota overflow
                if (videoFrame != 0 && videoFrame % frameQuota == 0)
                {
                    await Task.Delay(frameTimeout);
                }

                // Frame and time incrementation
                videoTime  += TimeSpan.FromSeconds(frameJumpSize);
                videoFrame += 1;
            }

            return(detectedFaces);
        }
        public async Task <IInputStream> GetThumbnailAsync(StorageFile file, int milliseconds)
        {
            var mediaClip = await MediaClip.CreateFromFileAsync(file);

            var mediaComposition = new MediaComposition();

            mediaComposition.Clips.Add(mediaClip);
            return(await mediaComposition.GetThumbnailAsync(TimeSpan.FromMilliseconds(milliseconds), 200, 200, VideoFramePrecision.NearestFrame));
        }
Esempio n. 10
0
        /**
         * トリミング後のビデオファイルのサムネイルを取得する
         * トリミング用に作ったMediaClip を流用するので、トリミングとサムネイル作成を別々にやるより少しお得。
         */
        public IAsyncOperation <ImageStream> GetThumbnailOfTrimmedVideo()
        {
            mComposition.Clips[0].TrimTimeFromStart = TimeSpan.FromMilliseconds(mTrimmingSlider.TrimStart);
            mComposition.Clips[0].TrimTimeFromEnd   = TimeSpan.FromMilliseconds(mTrimmingSlider.TrimEnd);

            var props = getFeelSoGoodEncodingProperty();

            return(mComposition.GetThumbnailAsync(TimeSpan.FromMilliseconds(0), 0, (int)props.Video.Height, VideoFramePrecision.NearestFrame));
        }
Esempio n. 11
0
        /**
         * フレームの抽出処理を開始
         *
         * @param   clip        ソースを保持したMediaClip
         * @param   extracted   取得したフレーム画像をコールバックするハンドラ
         */
        public async Task <bool> ExtractAsync(MediaClip clip, OnThumbnailExtractedHandler extracted, OnBlankThumbnailHandler blank)
        {
            int doing = ++mDoing;

            Error = null;

            // Debug.WriteLine("Logical-DPI = {0}", DisplayInformation.GetForCurrentView().LogicalDpi);
            var composer = new MediaComposition();

            composer.Clips.Add(clip);

            try
            {
                var totalRange = clip.OriginalDuration.TotalMilliseconds;
                var span       = totalRange / FrameCount;
                var offset     = span / 2;
                for (int n = 0; n < FrameCount; n++)
                {
                    using (var imageStream = await composer.GetThumbnailAsync(TimeSpan.FromMilliseconds(offset + span * n), 0, ThumbnailHeight, VideoFramePrecision.NearestFrame))
                    {
                        if (doing != mDoing)
                        {
                            // cancelling
                            return(false);
                        }
                        var bmp = new BitmapImage();
                        bmp.SetSource(imageStream);     // bmp.SetSourceしたら、imageStreamはすぐDisposeしても大丈夫っぽい。

                        if (null != blank && n == 0)
                        {
                            var source = await CreateBlankBitmap(bmp.PixelWidth, bmp.PixelHeight);

#if false
                            var bb     = new SoftwareBitmap(BitmapPixelFormat.Bgra8, bmp.PixelWidth, bmp.PixelHeight, BitmapAlphaMode.Ignore);
                            var source = new SoftwareBitmapSource();
                            await source.SetBitmapAsync(bb);
#endif
                            blank(this, source);
                        }

                        extracted(this, n, bmp);
                    }
                }
                return(true);
            }
            catch (Exception e)
            {
                CmLog.error("WvvFrameExtractor2.ExtractAsync", e);
                Error = e;
                return(false);
            }
            finally
            {
                composer.Clips.Clear();
            }
        }
Esempio n. 12
0
        public async Task <IFrameSource> Encode(StorageFile source)
        {
            MediaClip clip = await MediaClip.CreateFromFileAsync(source);

            var props             = clip.GetVideoEncodingProperties();
            var frameMilliseconts = 1000.0f / ((float)props.FrameRate.Numerator / (float)props.FrameRate.Denominator);
            var frameCount        = (int)(clip.OriginalDuration.TotalMilliseconds / frameMilliseconts);

            var fps = MediaHelper.MillisecondsToFPS((long)frameMilliseconts);

            var frameSource = new FrameSet(fps, (int)props.Width, (int)props.Height);

            TimeSpan frameDuration  = TimeSpan.FromMilliseconds((int)fps);
            TimeSpan frameStartTime = new TimeSpan();

            MediaComposition composition = new MediaComposition();

            composition.Clips.Add(clip);

            for (int idx = 0; idx < frameCount; idx++)
            {
                var time = TimeSpan.FromMilliseconds(idx * frameMilliseconts);

                var frame = await composition.GetThumbnailAsync(
                    time,
                    (int)props.Width,
                    (int)props.Height,
                    VideoFramePrecision.NearestFrame
                    );

                using (var stream = new InMemoryRandomAccessStream())
                {
                    await RandomAccessStream.CopyAsync(frame, stream);

                    BitmapDecoder decoder = await BitmapDecoder.CreateAsync(stream);

                    stream.Seek(0);

                    SoftwareBitmap bitmap = SoftwareBitmap.Convert(
                        await decoder.GetSoftwareBitmapAsync(),
                        BitmapPixelFormat.Rgba16,
                        BitmapAlphaMode.Premultiplied);

                    frameSource.AddFrame(new Frame(bitmap)
                    {
                        Duration = frameDuration, StartTime = frameStartTime
                    });
                    frameStartTime += frameDuration;
                }
            }

            return(frameSource);
        }
Esempio n. 13
0
        async void OnLoaded(object sender, RoutedEventArgs e)
        {
            this.mediaElement.Visibility = Visibility.Collapsed;
            this.progressInfo.Visibility = Visibility.Visible;
            this.progressRing.IsActive   = true;
            this.progressText.Text       = "Downloading video...";

            var thumbnailFile = await StorageFile.GetFileFromApplicationUriAsync(new Uri("ms-appx:///Assets/Logo.scale-100.png"));

            var thumbnail = RandomAccessStreamReference.CreateFromFile(thumbnailFile);

            var url = "http://video.ch9.ms/ch9/4597/8db5a656-b173-4897-b2aa-e2075fb24597/windows10recap.mp4";

            // TODO: replace TemporaryFolder and HttpClient with StorageFile.CreateStreamedFileFromUriAsync once TH:2458060 is fixed
            //var file = await StorageFile.CreateStreamedFileFromUriAsync(
            //    "windows10recap.mp4",
            //    new Uri(url),
            //    thumbnail);

            var file = await ApplicationData.Current.TemporaryFolder.CreateFileAsync("windows10recap.mp4", CreationCollisionOption.ReplaceExisting);

            using (var httpClient = new HttpClient())
            {
                byte[] videoData = await httpClient.GetByteArrayAsync(url);

                using (var writer = await file.OpenAsync(FileAccessMode.ReadWrite))
                {
                    await writer.WriteAsync(videoData.AsBuffer());
                }
            }

            this.progressText.Text = "Creating clip...";
            var clip = await MediaClip.CreateFromFileAsync(file);

            clip.VideoEffectDefinitions.Add(new VideoEffectDefinition(typeof(ExampleVideoEffect).FullName));

            var composition = new MediaComposition();

            composition.Clips.Add(clip);

            if (ThumbnailGenerator.IsDrawingThumbnail)
            {
                this.thumbnail = await composition.GetThumbnailAsync(TimeSpan.FromSeconds(10), 1280, 720, VideoFramePrecision.NearestFrame);
            }

            mediaElement.SetMediaStreamSource(composition.GenerateMediaStreamSource());
            mediaElement.IsLooping = true;

            this.mediaElement.Visibility = Visibility.Visible;
            this.progressInfo.Visibility = Visibility.Collapsed;
            this.progressRing.IsActive   = false;
        }
Esempio n. 14
0
        private async Task <ImageStream> GetImageStream(TimeSpan timeOfFrame, StorageFile pickedFile)
        {
            var clip = await MediaClip.CreateFromFileAsync(pickedFile);

            var composition = new MediaComposition();

            composition.Clips.Add(clip);

            var imageStream = await composition.GetThumbnailAsync(timeOfFrame, (int)resolution.Width, (int)resolution.Height,
                                                                  VideoFramePrecision.NearestFrame);

            return(imageStream);
        }
Esempio n. 15
0
        private async Task LoadFrame(TimeSpan timeOfFrame)
        {
            frameStream = await movieComp.GetThumbnailAsync(timeOfFrame, (int)frameWidth, (int)frameHeight, VideoFramePrecision.NearestFrame);

            ///

            BitmapImage bitmapImage = new BitmapImage();

            bitmapImage.SetSource(frameStream);

            previewImage.Source = bitmapImage;

            await AnalyzeFrame();
        }
        async void OnLoaded(object sender, RoutedEventArgs e)
        {
            this.mediaElement.Visibility = Visibility.Collapsed;
            this.progressInfo.Visibility = Visibility.Visible;
            this.progressRing.IsActive = true;
            this.progressText.Text = "Downloading video...";

            var thumbnailFile = await StorageFile.GetFileFromApplicationUriAsync(new Uri("ms-appx:///Assets/Logo.scale-100.png"));
            var thumbnail = RandomAccessStreamReference.CreateFromFile(thumbnailFile);

            var url = "http://video.ch9.ms/ch9/4597/8db5a656-b173-4897-b2aa-e2075fb24597/windows10recap.mp4";

            // TODO: replace TemporaryFolder and HttpClient with StorageFile.CreateStreamedFileFromUriAsync once TH:2458060 is fixed
            //var file = await StorageFile.CreateStreamedFileFromUriAsync(
            //    "windows10recap.mp4",
            //    new Uri(url),
            //    thumbnail);

            var file = await ApplicationData.Current.TemporaryFolder.CreateFileAsync("windows10recap.mp4", CreationCollisionOption.ReplaceExisting);

            using (var httpClient = new HttpClient())
            {
                byte[] videoData = await httpClient.GetByteArrayAsync(url);

                using (var writer = await file.OpenAsync(FileAccessMode.ReadWrite))
                {
                    await writer.WriteAsync(videoData.AsBuffer());
                }
            }

            this.progressText.Text = "Creating clip...";
            var clip = await MediaClip.CreateFromFileAsync(file);
            clip.VideoEffectDefinitions.Add(new VideoEffectDefinition(typeof(ExampleVideoEffect).FullName));

            var composition = new MediaComposition();
            composition.Clips.Add(clip);

            if (ThumbnailGenerator.IsDrawingThumbnail)
            {
                customThumbnail = await composition.GetThumbnailAsync(TimeSpan.FromSeconds(10), 1280, 720, VideoFramePrecision.NearestFrame);
            }

            mediaElement.SetMediaStreamSource(composition.GenerateMediaStreamSource());
            mediaElement.IsLooping = true;
        
            this.mediaElement.Visibility = Visibility.Visible;
            this.progressInfo.Visibility = Visibility.Collapsed;
            this.progressRing.IsActive = false;
        }
Esempio n. 17
0
        public static async Task <IRandomAccessStream> OpenReadAsync(StorageFile sourceFile)
        {
            if (sourceFile.ContentType.Equals("video/mp4"))
            {
                var props = await sourceFile.Properties.GetVideoPropertiesAsync();

                var composition = new MediaComposition();
                var clip        = await MediaClip.CreateFromFileAsync(sourceFile);

                composition.Clips.Add(clip);
                return(await composition.GetThumbnailAsync(TimeSpan.Zero, (int)props.GetWidth(), (int)props.GetHeight(), VideoFramePrecision.NearestKeyFrame));
            }

            return(await sourceFile.OpenReadAsync());
        }
Esempio n. 18
0
        public override async Task <IRandomAccessStream> GetThumbnailAsync()
        {
            var mediaClip = await MediaClip.CreateFromFileAsync(MediaFile);

            var mediaComposition = new MediaComposition();

            mediaComposition.Clips.Add(mediaClip);

            // Get thumbnail stream from frame in the middle of the video.
            var halfDuration    = mediaComposition.Duration / 2;
            var thumbnailStream = await mediaComposition.GetThumbnailAsync(
                halfDuration, 0, 0, VideoFramePrecision.NearestKeyFrame);

            // Schedule the loading of the dimensions of the video on main thread when it is idle.
            await App.Current.NavigationService.Frame.Dispatcher.RunIdleAsync((args) => LoadDimensions(thumbnailStream));

            return(thumbnailStream);
        }
Esempio n. 19
0
        async void OnLoaded(object sender, RoutedEventArgs e)
        {
            this.mediaElement.Visibility = Visibility.Collapsed;
            this.progressInfo.Visibility = Visibility.Visible;
            this.progressRing.IsActive   = true;
            this.progressText.Text       = "Downloading video...";

            var thumbnailFile = await StorageFile.GetFileFromApplicationUriAsync(new Uri("ms-appx:///Assets/Logo.scale-100.png"));

            var thumbnail = RandomAccessStreamReference.CreateFromFile(thumbnailFile);

            var url = "http://video.ch9.ms/ch9/4597/8db5a656-b173-4897-b2aa-e2075fb24597/windows10recap.mp4";

            var file = await StorageFile.CreateStreamedFileFromUriAsync(
                "windows10recap.mp4",
                new Uri(url),
                thumbnail);

            this.progressText.Text = "Creating clip...";
            var clip = await MediaClip.CreateFromFileAsync(file);

            clip.VideoEffectDefinitions.Add(new VideoEffectDefinition(typeof(ExampleVideoEffect).FullName));

            var composition = new MediaComposition();

            composition.Clips.Add(clip);

            if (ThumbnailGenerator.IsDrawingThumbnail)
            {
                customThumbnail = await composition.GetThumbnailAsync(TimeSpan.FromSeconds(10), 1280, 720, VideoFramePrecision.NearestFrame);
            }

            mediaElement.SetMediaStreamSource(composition.GenerateMediaStreamSource());
            mediaElement.IsLooping = true;

            this.mediaElement.Visibility = Visibility.Visible;
            this.progressInfo.Visibility = Visibility.Collapsed;
            this.progressRing.IsActive   = false;
        }
Esempio n. 20
0
        public static async Task <ImageSource> CropAndPreviewAsync(StorageFile sourceFile, Rect cropRectangle)
        {
            if (sourceFile.ContentType.Equals("video/mp4"))
            {
                var props = await sourceFile.Properties.GetVideoPropertiesAsync();

                var composition = new MediaComposition();
                var clip        = await MediaClip.CreateFromFileAsync(sourceFile);

                composition.Clips.Add(clip);

                using (var imageStream = await composition.GetThumbnailAsync(TimeSpan.Zero, (int)props.GetWidth(), (int)props.GetHeight(), VideoFramePrecision.NearestKeyFrame))
                {
                    return(await CropAndPreviewAsync(imageStream, cropRectangle));
                }
            }

            using (var imageStream = await sourceFile.OpenReadAsync())
            {
                return(await CropAndPreviewAsync(imageStream, cropRectangle));
            }
        }
Esempio n. 21
0
        public async Task <ImageStream> ExtractSingleFrameStreamAsync(MediaClip clip, TimeSpan position)
        {
            Error = null;

            var composer = new MediaComposition();

            composer.Clips.Add(clip);

            try
            {
                return(await composer.GetThumbnailAsync(position, 0, ThumbnailHeight, VideoFramePrecision.NearestFrame));
            }
            catch (Exception e)
            {
                CmLog.error("WvvFrameExtractor2.ExtractSingleFrameStreamAsync(MediaClip)", e);
                Error = e;
                return(null);
            }
            finally
            {
                composer.Clips.Clear();
            }
        }
Esempio n. 22
0
        private async void Button_ClickAsync(object sender, RoutedEventArgs e)
        {
            StorageFile file = await StorageFile.GetFileFromApplicationUriAsync(new Uri("ms-appx:///Assets/beru.wmv"));

            var clip = await MediaClip.CreateFromFileAsync(file);

            var composition = new MediaComposition();

            composition.Clips.Add(clip);

            var framePeriod = 1 / 25d;//25 is fps of video
            var frameTimes  = Enumerable.Range(0, 250).Select(x => TimeSpan.FromSeconds(framePeriod * x)).ToList();

            //generate multiple image streams using GetThumbnailsAsync
            var imageStreamsMultiple = (await composition.GetThumbnailsAsync(frameTimes, 0, 0, VideoFramePrecision.NearestFrame));

            int i = 0;

            foreach (var frameTime in frameTimes)//check all frameTimes. Looking for differences
            {
                // get single image stream for frameTime
                var imageStreamsSingle = await composition.GetThumbnailAsync(frameTime, 0, 0, VideoFramePrecision.NearestFrame);

                var bytesFromMultiple = await GetBytesFromImageStreamAsync(imageStreamsMultiple[i++]);

                var bytesFromSingle = await GetBytesFromImageStreamAsync(imageStreamsSingle);

                //compare bytes from both methods
                var absDiff = bytesFromMultiple.Zip(bytesFromSingle, (m, s) => Math.Abs(m - s)).Sum();
                if (absDiff != 0)
                {
                    //it should not jump here !!!
                    Debug.WriteLine($"There is difference {absDiff}");
                }
                Debug.WriteLine(i);
            }
        }
        // This method will generate a thumbnail from a video file
        // The thumbnail will come from one frame of the video
        // The frame comes from the half of the video total duration
        // To-Do: Only video file will be accepted
        private async void GenerateVideoThumbnail(StorageFile file)
        {
            MediaComposition mediaComposition = new MediaComposition();
            var videoFile = await MediaClip.CreateFromFileAsync(file);

            mediaComposition.Clips.Add(videoFile);
            TimeSpan interval = videoFile.OriginalDuration.Add(new TimeSpan(-(videoFile.OriginalDuration.Ticks / 2)));

            var thumbnail = await mediaComposition.GetThumbnailAsync(interval, 640, 360, VideoFramePrecision.NearestKeyFrame);

            BitmapDecoder decoder = await BitmapDecoder.CreateAsync(thumbnail);

            var thumbnailWriter = await localFolder.CreateFileAsync("generated_thumbnail.jpg", CreationCollisionOption.ReplaceExisting).AsTask();

            System.Diagnostics.Debug.WriteLine("Thumbnail Location: " + localFolder.Path);

            using (var thumbnailStream = await thumbnailWriter.OpenAsync(FileAccessMode.ReadWrite))
                using (var dataReader = new DataReader(thumbnail.GetInputStreamAt(0)))
                {
                    var output = thumbnailStream.GetOutputStreamAt(0);

                    await dataReader.LoadAsync((uint)thumbnail.Size);

                    while (dataReader.UnconsumedBufferLength > 0)
                    {
                        uint dataToRead = dataReader.UnconsumedBufferLength > 64
                                        ? 64
                                        : dataReader.UnconsumedBufferLength;

                        IBuffer buffer = dataReader.ReadBuffer(dataToRead);

                        await output.WriteAsync(buffer);
                    }

                    await output.FlushAsync();
                }
        }
        async void OnLoaded(object sender, RoutedEventArgs e)
        {
            this.mediaElement.Visibility = Visibility.Collapsed;
            this.progressInfo.Visibility = Visibility.Visible;
            this.progressRing.IsActive = true;
            this.progressText.Text = "Downloading video...";

            var thumbnailFile = await StorageFile.GetFileFromApplicationUriAsync(new Uri("ms-appx:///Assets/Logo.scale-100.png"));
            var thumbnail = RandomAccessStreamReference.CreateFromFile(thumbnailFile);

            var url = "http://video.ch9.ms/ch9/4597/8db5a656-b173-4897-b2aa-e2075fb24597/windows10recap.mp4";

            var file = await StorageFile.CreateStreamedFileFromUriAsync(
                "windows10recap.mp4",
                new Uri(url),
                thumbnail);

            this.progressText.Text = "Creating clip...";
            var clip = await MediaClip.CreateFromFileAsync(file);
            clip.VideoEffectDefinitions.Add(new VideoEffectDefinition(typeof(ExampleVideoEffect).FullName));

            var composition = new MediaComposition();
            composition.Clips.Add(clip);

            if (ThumbnailGenerator.IsDrawingThumbnail)
            {
                customThumbnail = await composition.GetThumbnailAsync(TimeSpan.FromSeconds(10), 1280, 720, VideoFramePrecision.NearestFrame);
            }

            mediaElement.SetMediaStreamSource(composition.GenerateMediaStreamSource());
            mediaElement.IsLooping = true;
        
            this.mediaElement.Visibility = Visibility.Visible;
            this.progressInfo.Visibility = Visibility.Collapsed;
            this.progressRing.IsActive = false;
        }
        private void OnFileChangedInternal(StorageFile storageFile)
        {
            Photos.Children.Clear();
            LeftTransform.X = -MaxTranslateX;
            LeftOpacityBorderTransform.X  = -468;
            Left.IsHitTestVisible         = false;
            RightTransform.X              = MaxTranslateX;
            RightOpacityBorderTransform.X = 468;
            Right.IsHitTestVisible        = false;
            _videoProperties              = null;
            _composition    = null;
            TrimRight       = null;
            TrimLeft        = null;
            _lastPosition   = null;
            _isManipulating = false;

            if (storageFile != null)
            {
                Task.Delay(1000).ContinueWith(async(_) =>
                {
                    _videoProperties = storageFile.Properties.GetVideoPropertiesAsync().AsTask().Result;
                    if (_videoProperties == null)
                    {
                        return;
                    }

                    await Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () =>
                    {
                        Left.IsHitTestVisible  = true;
                        Right.IsHitTestVisible = true;
                    });

                    _composition = new MediaComposition();
                    var clip     = await MediaClip.CreateFromFileAsync(storageFile);
                    _composition.Clips.Add(clip);

                    var scaleFactor     = 100.0 / Math.Min(_videoProperties.Width, _videoProperties.Height);
                    var thumbnailWidth  = _videoProperties.Orientation == VideoOrientation.Normal || _videoProperties.Orientation == VideoOrientation.Rotate180 ? (int)(_videoProperties.Width * scaleFactor) : (int)(_videoProperties.Height * scaleFactor);
                    var thumbnailHeight = _videoProperties.Orientation == VideoOrientation.Normal || _videoProperties.Orientation == VideoOrientation.Rotate180 ? (int)(_videoProperties.Height * scaleFactor) : (int)(_videoProperties.Width * scaleFactor);
                    for (var i = 0; i < 9; i++)
                    {
                        var timeStamp = new TimeSpan(_videoProperties.Duration.Ticks / 9 * i);

                        var photo = await _composition.GetThumbnailAsync(timeStamp, thumbnailWidth, thumbnailHeight, VideoFramePrecision.NearestKeyFrame);
                        await Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () =>
                        {
                            var bitmapImage = new BitmapImage();
                            bitmapImage.SetSource(photo);

                            var image = new Image
                            {
                                Source  = bitmapImage,
                                Stretch = Stretch.UniformToFill,
                                Width   = 50,
                                Height  = 48
                            };

                            Photos.Children.Add(image);
                        });
                    }
                });
            }
        }
Esempio n. 26
0
        private async Task LoadFile(StorageFile file)
        {
            fileName = Path.GetFileNameWithoutExtension(file.Name);
            Debug.WriteLine("Picked video: " + fileName + " with full name: " + file.Name);

            if (handledExtensions.Contains(Path.GetExtension(file.Path)))
            {
                MediaClip newClip;

                if (imageExtensions.Contains(Path.GetExtension(file.Path)))
                {
                    newClip = await MediaClip.CreateFromImageFileAsync(file, TimeSpan.FromSeconds(DEFAULT_DURATION));
                }
                else // if (videoExtensions.Contains(Path.GetExtension(file.Path)))
                {
                    newClip = await MediaClip.CreateFromFileAsync(file);
                }

                m_composition.Clips.Add(newClip);

                // Render a thumbnail from the center of the clip's duration
                ImageStream x = await m_composition.GetThumbnailAsync(TimeSpan.FromMilliseconds(newClip.StartTimeInComposition.TotalMilliseconds + newClip.TrimmedDuration.TotalMilliseconds / 2d), HEIGHT, 0, VideoFramePrecision.NearestKeyFrame);


                StorageFolder localFolder = ApplicationData.Current.LocalFolder;
                // Write data to a file
                StorageFile imageFile = await localFolder.CreateFileAsync(newClip.GetHashCode() + imageExtensions[0], CreationCollisionOption.ReplaceExisting);

                //BitmapImage bitmap = new BitmapImage();
                //bitmap.SetSource(x);


                //wBitmap.SetSource(x);



                BitmapDecoder decoder = await BitmapDecoder.CreateAsync(x);

                WriteableBitmap wBitmap = new WriteableBitmap((int)decoder.PixelWidth, (int)decoder.PixelHeight);
                // Scale image to appropriate size
                BitmapTransform transform = new BitmapTransform()
                {
                    ScaledWidth  = Convert.ToUInt32(decoder.PixelWidth),
                    ScaledHeight = Convert.ToUInt32(decoder.PixelHeight)
                };
                PixelDataProvider pixelData = await decoder.GetPixelDataAsync(
                    BitmapPixelFormat.Bgra8, // WriteableBitmap uses BGRA format
                    BitmapAlphaMode.Straight,
                    transform,
                    ExifOrientationMode.IgnoreExifOrientation, // This sample ignores Exif orientation
                    ColorManagementMode.DoNotColorManage
                    );

                // An array containing the decoded image data, which could be modified before being displayed
                byte[] sourcePixels = pixelData.DetachPixelData();

                // Open a stream to copy the image contents to the WriteableBitmap's pixel buffer
                using (Stream stream = wBitmap.PixelBuffer.AsStream())
                {
                    await stream.WriteAsync(sourcePixels, 0, sourcePixels.Length);
                }

                await wBitmap.SaveToFile(imageFile, BitmapEncoder.JpegEncoderId);

                //var fs = await imageFile.OpenAsync(FileAccessMode.ReadWrite);
                //DataWriter writer = new DataWriter(fs.GetOutputStreamAt(0));
                //writer.WriteBytes(await x.ReadAsync());
                //await writer.StoreAsync();
                //writer.DetachStream();
                //await fs.FlushAsync();

                //StorageFile imgFile = await ApplicationData.Current.LocalFolder.CreateFileAsync(newClip.GetHashCode() + imageExtensions[0], CreationCollisionOption.ReplaceExisting);


                //byte[] pixels = new byte[4 * bitmap.PixelWidth * bitmap.PixelHeight];

                //Stream pixelStream = wBitmap.PixelBuffer.AsStream();
                //pixelStream.Seek(0, SeekOrigin.Begin);
                //pixelStream.Write(pixels, 0, pixels.Length);

                ////BitmapToWriteableBitmap(imgFile);
                //await Utilities.SaveToFile(wBitmap, imgFile, new Guid());

                ////using (var stream = await file.OpenAsync(FileAccessMode.ReadWrite))
                ////{
                ////    var encoder = await BitmapEncoder.CreateAsync(BitmapEncoder.PngEncoderId, stream);
                ////    encoder.SetPixelData(
                ////        BitmapPixelFormat.Bgra8,
                ////        BitmapAlphaMode.Ignore,
                ////        (uint)bitmap.PixelWidth,
                ////        (uint)bitmap.PixelHeight,
                ////        96d,
                ////        96d,
                ////        bitmap.
                ////    );

                //////    await encoder.FlushAsync();
                //////}
                ////if (bitmap != null)
                ////{
                ////    IRandomAccessStream stream = await bitmap.OpenAsync(FileAccessMode.Read);
                ////    bmp.SetSource(stream);
                ////    imageGrid.Source = bmp;
                ////}


                newClip.UserData.Add("thumb", imageFile.Path);
                Clips.Add(newClip);
                RaisePropertyChanged(Utilities.GetMemberName(() => Clips));
                MyUri = new Uri(imageFile.Path);
            }
        }
Esempio n. 27
0
        public async Task DoStuff()
        {
            ProgressBar.Visibility = Visibility.Visible;

            var ocrEngine = OcrEngine.TryCreateFromUserProfileLanguages();
            var startTime = new TimeSpan(0, 19, 30);
            var endTime   = new TimeSpan(0, 28, 00);

            //00070 at 1566,215,98,25
            //00.8 at 1770,213,69,25
            var speedRect = new Rect(1550, 210, 120, 35);
            //var speedRect = new Rect( 1566, 215, 97, 25 );
            var altitudeRect = new Rect(1750, 210, 90, 35);


            FileOpenPicker openPicker = new FileOpenPicker();

            openPicker.ViewMode = PickerViewMode.Thumbnail;
            openPicker.SuggestedStartLocation = PickerLocationId.PicturesLibrary;
            openPicker.FileTypeFilter.Add(".mp4");

            var flight = new List <FlightPoint>();

            StorageFile file = await openPicker.PickSingleFileAsync();

            var fileSavePicker = new FileSavePicker
            {
                SuggestedFileName      = file.DisplayName,
                SuggestedStartLocation = PickerLocationId.Downloads
            };

            fileSavePicker.FileTypeChoices.Add("CSV File", new List <string> {
                ".csv"
            });

            StorageFile csvFile = await fileSavePicker.PickSaveFileAsync();

            var mediaClip = await MediaClip.CreateFromFileAsync(file);

            var mediaComposition = new MediaComposition();

            mediaComposition.Clips.Add(mediaClip);

            var ocrTime    = endTime - startTime;
            var ocrSeconds = (int)ocrTime.TotalSeconds;

            var speed    = 0m;
            var altitude = 0m;

            this.ProgressBar.Maximum = ocrSeconds;

            //var width = PreviewImage.Width;
            //var height = PreviewImage.Height;

            //var encodingProperties = mediaClip.GetVideoEncodingProperties();
            //var videoWidth = encodingProperties.Width;
            //var videoHeight = encodingProperties.Height;

            //var widthFactor = (width / videoWidth);
            //var heightFactor = height / videoHeight;

            //OutlineOcrSection(speedRect, widthFactor, heightFactor);
            //OutlineOcrSection(altitudeRect, widthFactor, heightFactor);


            for (var i = 0; i < ocrSeconds; i++)
            {
                var currentTime = startTime + TimeSpan.FromSeconds(i);
                var thumbnail   = await mediaComposition.GetThumbnailAsync(currentTime, 0, 0, VideoFramePrecision.NearestFrame);

                var decoder = await BitmapDecoder.CreateAsync(thumbnail);

                var bitmap = await decoder.GetSoftwareBitmapAsync();

                await SetPreviewImage(bitmap);

                var result = await ocrEngine.RecognizeAsync(bitmap);

                bool velPassed   = false;
                bool speedPassed = false;

                foreach (var line in result.Lines)
                {
                    // Iterate over words in line.
                    foreach (var word in line.Words)
                    {
                        //if (speedRect.Contains(new Point(word.BoundingRect.X + word.BoundingRect.Width / 2, word.BoundingRect.Y + word.BoundingRect.Height / 2)))
                        //    //&& speedRect.Contains(new Point(word.BoundingRect.X + word.BoundingRect.Width, word.BoundingRect.Y + word.BoundingRect.Height)))
                        //{
                        //    decimal tempSpeed;
                        //    if (decimal.TryParse(word.Text, out tempSpeed))
                        //    {
                        //        speed = Math.Abs(tempSpeed);
                        //        this.Velocity.Text = speed.ToString(CultureInfo.InvariantCulture);
                        //        velPassed = true;
                        //    }

                        //}

                        //if (altitudeRect.Contains(new Point(word.BoundingRect.X, word.BoundingRect.Y)))
                        //    //&& speedRect.Contains(new Point(word.BoundingRect.X + word.BoundingRect.Width, word.BoundingRect.Y + word.BoundingRect.Height)))
                        //{
                        //    decimal tempAltitude;
                        //    if (decimal.TryParse(word.Text, out tempAltitude))
                        //    {
                        //        altitude = Math.Abs(tempAltitude);
                        //        Altitude.Text = altitude.ToString(CultureInfo.InvariantCulture);
                        //        speedPassed = true;
                        //    }
                        //}
                    }
                }

                if (!speedPassed || !velPassed)
                {
                    Debug.WriteLine(result.Text);
                }

                var time = TimeSpan.FromSeconds(i);
                this.Time.Text = time.ToString();

                var point = new FlightPoint {
                    Velocity = speed, Altitude = altitude, Time = time
                };
                Debug.WriteLine($"{point.Time}, {point.Altitude}, {point.Velocity}");
                flight.Add(point);

                ProgressBar.Value = i;
            }

            // Get information about the preview
            //var previewProperties = _mediaCapture.VideoDeviceController.GetMediaStreamProperties(MediaStreamType.VideoPreview) as VideoEncodingProperties;

            using (IRandomAccessStream stream = await csvFile.OpenAsync(FileAccessMode.ReadWrite))
            {
                using (var dataWriter = new Windows.Storage.Streams.DataWriter(stream))
                {
                    dataWriter.WriteString("time,altitude,velocity,acceleration");
                    decimal prevVelocity = 0;
                    var     prevTime     = TimeSpan.Zero;
                    foreach (var entry in flight)
                    {
                        var timeDelta = (decimal)(entry.Time - prevTime).TotalSeconds;
                        var ac        = 0m;
                        if (timeDelta > 0)
                        {
                            ac = (entry.Velocity - prevVelocity) / timeDelta;
                        }

                        prevVelocity = entry.Velocity;
                        prevTime     = entry.Time;

                        dataWriter.WriteString($"{entry.Time}, {entry.Altitude}, {entry.Velocity}, {ac}{Environment.NewLine}");
                    }
                    await dataWriter.StoreAsync();

                    await stream.FlushAsync();
                }
            }

            this.ProgressBar.Visibility = Visibility.Collapsed;
        }
Esempio n. 28
0
        private void OnFileChangedInternal(StorageFile storageFile)
        {
            Photos.Children.Clear();
            LeftTransform.X = -MaxTranslateX;
            LeftOpacityBorderTransform.X = -465.0;
            Left.IsHitTestVisible = false;
            RightTransform.X = MaxTranslateX;
            RightOpacityBorderTransform.X = 465.0;
            Right.IsHitTestVisible = false;
            _videoProperties = null;
            _composition = null;
            TrimRight = null;
            TrimLeft = null;
            _lastPosition = null;
            _isManipulating = false;

            if (storageFile != null)
            {
                Telegram.Api.Helpers.Execute.BeginOnThreadPool(TimeSpan.FromSeconds(1.0), async () =>
                {
                    _videoProperties = storageFile.Properties.GetVideoPropertiesAsync().AsTask().Result;
                    if (_videoProperties == null) return;

                    Deployment.Current.Dispatcher.BeginInvoke(() =>
                    {
                        Left.IsHitTestVisible = true;
                        Right.IsHitTestVisible = true;
                    });

                    _composition = new MediaComposition();
                    var clip = await MediaClip.CreateFromFileAsync(storageFile);
                    _composition.Clips.Add(clip);

                    var scaleFactor = 100.0 / Math.Min(_videoProperties.Width, _videoProperties.Height);
                    var thumbnailWidth = _videoProperties.Orientation == VideoOrientation.Normal || _videoProperties.Orientation == VideoOrientation.Rotate180 ? (int)(_videoProperties.Width * scaleFactor) : (int)(_videoProperties.Height * scaleFactor);
                    var thumbnailHeight = _videoProperties.Orientation == VideoOrientation.Normal || _videoProperties.Orientation == VideoOrientation.Rotate180 ? (int)(_videoProperties.Height * scaleFactor) : (int)(_videoProperties.Width * scaleFactor);
                    for (var i = 0; i < 9; i++)
                    {
                        var timeStamp = new TimeSpan(_videoProperties.Duration.Ticks / 9 * i);

                        var photo = await _composition.GetThumbnailAsync(timeStamp, thumbnailWidth, thumbnailHeight, VideoFramePrecision.NearestKeyFrame);
                        Deployment.Current.Dispatcher.BeginInvoke(() =>
                        {
                            var stream = photo.AsStream();
                            var bitmapImage = new BitmapImage();
                            var image = new Image
                            {
                                CacheMode = new BitmapCache(),
                                Stretch = Stretch.UniformToFill,
                                Width = 50.0,
                                Height = 50.0,
                                Source = bitmapImage
                            };
                            Photos.Children.Add(image);

                            bitmapImage.SetSource(stream);
                        });
                    }
                });
            }
        }
Esempio n. 29
0
        public static async Task <string> Capture(StorageFile file, TimeSpan timeOfFrame)
        {
            if (file == null)
            {
                return(null);
            }

            //Get FrameWidth & FrameHeight
            List <string> encodingPropertiesToRetrieve = new List <string>();

            encodingPropertiesToRetrieve.Add("System.Video.FrameHeight");
            encodingPropertiesToRetrieve.Add("System.Video.FrameWidth");
            IDictionary <string, object> encodingProperties = await file.Properties.RetrievePropertiesAsync(encodingPropertiesToRetrieve);

            uint frameHeight = (uint)encodingProperties["System.Video.FrameHeight"];
            uint frameWidth  = (uint)encodingProperties["System.Video.FrameWidth"];

            //Get image stream
            var clip = await MediaClip.CreateFromFileAsync(file);

            var composition = new MediaComposition();

            composition.Clips.Add(clip);
            var imageStream = await composition.GetThumbnailAsync(timeOfFrame, (int)frameWidth, (int)frameHeight, VideoFramePrecision.NearestFrame);

            //Create BMP
            var writableBitmap = new WriteableBitmap((int)frameWidth, (int)frameHeight);

            writableBitmap.SetSource(imageStream);

            //Get stream from BMP
            string mediaCaptureFileName = "IMG" + Guid.NewGuid().ToString().Substring(0, 4) + ".jpg";
            var    saveAsTarget         = await CreateMediaFile(mediaCaptureFileName);

            if (saveAsTarget != null)
            {
                Stream stream = writableBitmap.PixelBuffer.AsStream();
                byte[] pixels = new byte[(uint)stream.Length];
                await stream.ReadAsync(pixels, 0, pixels.Length);

                using (var writeStream = await saveAsTarget.OpenAsync(FileAccessMode.ReadWrite))
                {
                    var encoder = await BitmapEncoder.CreateAsync(BitmapEncoder.JpegEncoderId, writeStream);

                    encoder.SetPixelData(
                        BitmapPixelFormat.Bgra8,
                        BitmapAlphaMode.Premultiplied,
                        (uint)writableBitmap.PixelWidth,
                        (uint)writableBitmap.PixelHeight,
                        96,
                        96,
                        pixels);
                    await encoder.FlushAsync();

                    using (var outputStream = writeStream.GetOutputStreamAt(0))
                    {
                        await outputStream.FlushAsync();
                    }
                }
                return(saveAsTarget.Name);
            }
            else
            {
                return(null);
            }
        }
        public async Task ExecuteProcessVideo()
        {
            ProgressBarVisibility = Visibility.Visible;

            var ocrEngine = OcrEngine.TryCreateFromUserProfileLanguages();
            var startTime = new TimeSpan(0, 19, 30);
            var endTime   = new TimeSpan(0, 28, 00);

            var flight = new List <Dictionary <string, object> >();

            var mediaClip = await MediaClip.CreateFromFileAsync(VideoFile);

            var mediaComposition = new MediaComposition();

            mediaComposition.Clips.Add(mediaClip);

            var ocrTime    = endTime - startTime;
            var ocrSeconds = (int)ocrTime.TotalSeconds;

            var speed    = 0m;
            var altitude = 0m;

            VideoLength = ocrSeconds;

            //var width = PreviewImage.Width;
            //var height = PreviewImage.Height;

            //var encodingProperties = mediaClip.GetVideoEncodingProperties();
            //var videoWidth = encodingProperties.Width;
            //var videoHeight = encodingProperties.Height;

            //var widthFactor = (width / videoWidth);
            //var heightFactor = height / videoHeight;


            for (var i = 0; i < ocrSeconds; i++)
            {
                var currentTime = startTime + TimeSpan.FromSeconds(i);
                var thumbnail   = await mediaComposition.GetThumbnailAsync(currentTime, 0, 0, VideoFramePrecision.NearestFrame);

                var decoder = await BitmapDecoder.CreateAsync(thumbnail);

                var bitmap = await decoder.GetSoftwareBitmapAsync();

                await SetPreviewImage(bitmap);

                var result = await ocrEngine.RecognizeAsync(bitmap);

                var values = OcrAreas.ToDictionary(x => x.Name, x => new object());
                values["Time"] = currentTime;
                var succeeded = OcrAreas.ToDictionary(x => x.Name, x => false);

                foreach (var line in result.Lines)
                {
                    // Iterate over words in line.
                    foreach (var word in line.Words)
                    {
                        foreach (var ocrArea in OcrAreas)
                        {
                            var rect = ocrArea.Area;
                            if (
                                rect.Contains(new Point(word.BoundingRect.X + word.BoundingRect.Width / 2,
                                                        word.BoundingRect.Y + word.BoundingRect.Height / 2)))
                            {
                                decimal tempVal;
                                if (decimal.TryParse(word.Text, out tempVal))
                                {
                                    values[ocrArea.Name] = Math.Abs(tempVal);
                                    // Need to display the read value somehow...
                                    succeeded[ocrArea.Name] = true;
                                }
                            }
                        }
                    }
                }

                if (succeeded.Any(x => !x.Value))
                {
                    Debug.WriteLine(result.Text);
                }

                var time = TimeSpan.FromSeconds(i);
                CurrentTime = time;

                ParsedValues = values.ToDictionary(x => x.Key, x => x.Value.ToString());

                //var point = new FlightPoint { Velocity = (decimal)values["Velocity"], Altitude = (decimal)values["Altitude"], Time = time };
                Debug.WriteLine($"{values["Time"]}, {values["Altitude"]}, {values["Velocity"]}");
                flight.Add(values);

                CurrentVideoPosition = i;
            }

            // Get information about the preview
            //var previewProperties = _mediaCapture.VideoDeviceController.GetMediaStreamProperties(MediaStreamType.VideoPreview) as VideoEncodingProperties;

            using (IRandomAccessStream stream = await _csvFile.OpenAsync(FileAccessMode.ReadWrite))
            {
                using (var dataWriter = new DataWriter(stream))
                {
                    //dataWriter.WriteString($"time,altitude,velocity,acceleration{Environment.NewLine}");
                    var commaSeperatedHeadings = string.Join(",", flight.First().Where(x => x.Key != "Time").Select(x => x.Key));
                    dataWriter.WriteString($"Time,{commaSeperatedHeadings}");

                    //decimal prevVelocity = 0;
                    //var prevTime = TimeSpan.Zero;
                    foreach (var entry in flight)
                    {
                        var time = (TimeSpan)entry["Time"];
                        //var timeDelta = (decimal)(time - prevTime).TotalSeconds;
                        //var ac = 0m;
                        //if (timeDelta > 0)
                        //{
                        //    ac = (entry.Velocity - prevVelocity) / timeDelta;
                        //}

                        //prevVelocity = entry.Velocity;
                        //prevTime = time;

                        //dataWriter.WriteString($"{time}, {entry.Altitude}, {entry.Velocity}, {ac}{Environment.NewLine}");
                        //var sb = new StringBuilder();

                        var commaSeperatedValues = string.Join(",", entry.Where(x => x.Key != "Time").Select(x => x.Value.ToString()));

                        dataWriter.WriteString($"{time},");
                        dataWriter.WriteString(commaSeperatedValues);
                    }
                    await dataWriter.StoreAsync();

                    await stream.FlushAsync();
                }
            }

            ProgressBarVisibility = Visibility.Collapsed;
        }
Esempio n. 31
0
        private async void iniciarProceso(ThreadPoolTimer timer)
        {
            if (!frameProcessingSemaphore.Wait(0))
            {
                return;
            }
            try
            {
                while (timeSpan <= clip.OriginalDuration)
                {
                    timeSpan = timeSpan.Add(new TimeSpan(00, 00, 00, 03, 00));

                    List <string> encondingProperties = new List <string>();
                    encondingProperties.Add("System.Video.FrameHeight");
                    encondingProperties.Add("System.Video.FrameWidth");
                    IDictionary <string, object> encodingProperties = await pickedFile.Properties.RetrievePropertiesAsync(encondingProperties);

                    var  divisor     = 0.5;
                    uint frameHeight = (uint)encodingProperties["System.Video.FrameHeight"];
                    uint frameWidth  = (uint)encodingProperties["System.Video.FrameWidth"];

                    var valorHeight = frameHeight * divisor;
                    var valorWidth  = frameWidth * divisor;


                    var composition = new MediaComposition();
                    composition.Clips.Add(clip);

                    var imageStream = await composition.GetThumbnailAsync(timeSpan, (int)valorWidth, (int)valorHeight, VideoFramePrecision.NearestFrame);

                    imagestreamPublico = await composition.GetThumbnailAsync(timeSpan, (int)valorWidth, (int)valorHeight, VideoFramePrecision.NearestFrame);


                    var StreamImage = imageStream.AsStream();
                    streamImagePersist = imageStream.AsStream();

                    Size size = new Size();


                    try
                    {
                        IEnumerable <FaceAttributeType> faceAttributes = new FaceAttributeType[] { FaceAttributeType.Gender, FaceAttributeType.Age, FaceAttributeType.Smile, FaceAttributeType.Emotion, FaceAttributeType.Glasses, FaceAttributeType.Hair };

                        string subscriptionKey      = "a6fa05b6601b4ea398aa2039d601d983";
                        string subscriptionEndpoint = "https://southcentralus.api.cognitive.microsoft.com/face/v1.0";
                        var    faceServiceClient    = new FaceServiceClient(subscriptionKey, subscriptionEndpoint);

                        var SizeStream = StreamImage.Length / 1024;

                        var facesNueva = await faceServiceClient.DetectAsync(streamImagePersist, false, true, faceAttributes);

                        var CantidadFaces = facesNueva.Length;



                        await Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.High, async() =>
                        {
                            if (CantidadFaces > 0)
                            {
                                var Genero = string.Empty;
                                var Edad   = string.Empty;
                                foreach (var face in facesNueva)
                                {
                                    try
                                    {
                                        size   = new Size(valorWidth, valorHeight);
                                        Genero = face.FaceAttributes.Gender.ToString();
                                        Edad   = face.FaceAttributes.Age.ToString();
                                        listaCaras.Add(new Tuple <string, string, FaceRectangle>("hola", "hola", face.FaceRectangle));
                                    }
                                    catch (FaceAPIException ex)
                                    {
                                        var error      = ex.ErrorMessage.ToString() + " / " + ex.Message.ToString();
                                        txtResult.Text = error.ToString();
                                    }
                                }
                                SetupVisualization(size, imagestreamPublico, Genero, Edad, listaCaras);
                            }
                        });

                        StreamImage.Dispose();



                        //string faceApiKey = "a6fa05b6601b4ea398aa2039d601d983";
                        //string faceApiEndPoint = "https://southcentralus.api.cognitive.microsoft.com/face/v1.0";
                        //HttpClient httpClient = new HttpClient();
                        //httpClient.DefaultRequestHeaders.Add("Ocp-Apim-Subscription-Key", faceApiKey);
                        //string requestParameters = "returnFaceId=true&returnFaceLandmarks=false&returnFaceAttributes=age,gender,headPose,smile,facialHair,glasses,emotion,hair,makeup,occlusion,accessories,blur,exposure,noise";
                        //string uri = faceApiEndPoint + "/detect?" + requestParameters;
                        //byte[] vs = await ReadFully(StreamImage);

                        //using (ByteArrayContent content = new ByteArrayContent(vs))
                        //{
                        //    content.Headers.ContentType = new System.Net.Http.Headers.MediaTypeHeaderValue("application/octet-stream");
                        //    var response = httpClient.PostAsync(uri, content).Result;
                        //}
                    }
                    catch (FaceAPIException exFaceApi)
                    {
                        var error = exFaceApi.Message.ToString();
                    }

                    composition.Clips.Remove(clip);
                }
            }
            catch (Exception ex)
            {
                var erro = ex.Message.ToString();
            }
            finally
            {
                frameProcessingSemaphore.Release();
            }
        }