Exemplo n.º 1
0
        public async Task ExecuteAsync(
            MediaProcessorContext context,
            CancellationToken cancellationToken)
        {
            MemoryStream stream = new MemoryStream();
            await context.Image.SaveAsJpegAsync(stream, cancellationToken);

            stream.Position = 0;

            IEnumerable <FaceDetectionResponse> detectedFaces = await _faceDetectionService
                                                                .DetectFacesAsync(stream, cancellationToken);

            IEnumerable <FaceData> faceData = detectedFaces.Select(f =>
                                                                   new FaceData
            {
                Box      = f.Box,
                Encoding = f.Encoding,
                Id       = Guid.NewGuid()
            }).ToList();

            IEnumerable <BoxExtractionInput> inputs = faceData.Select(f =>
                                                                      new BoxExtractionInput
            {
                Box = f.Box,
                Id  = f.Id
            });

            stream.Position = 0;

            IEnumerable <BoxExtractionResult> faceImages = await _boxExtractorService
                                                           .ExtractBoxesAsync(stream, inputs, ThumbnailSizeName.M, default);

            ILookup <Guid, BoxExtractionResult> faceLookup = faceImages.ToLookup(x => x.Id);

            foreach (FaceData face in faceData)
            {
                ThumbnailResult thumb = faceLookup[face.Id].Single().Thumbnail;

                face.Thumbnail = new MediaThumbnail
                {
                    Id         = Guid.NewGuid(),
                    Data       = thumb.Data,
                    Dimensions = thumb.Dimensions,
                    Format     = thumb.Format,
                    Size       = thumb.Size
                };
            }

            context.FaceData = faceData;
        }
Exemplo n.º 2
0
        public async Task <IEnumerable <SampleMedia> > GetSampleMediaListAsync()
        {
            foreach (SampleMedia sample in _samples)
            {
                using var fileStream = new FileStream(sample.Path, FileMode.Open);
                ThumbnailResult thumb = await _thumbnailService
                                        .GenerateThumbnailAsync(
                    fileStream,
                    ThumbnailSizeName.M,
                    default);

                sample.Thumbnail = thumb.Data.ToDataUrl("jpg");
            }

            return(_samples);
        }
Exemplo n.º 3
0
        public async Task <IEnumerable <ThumbnailResult> > GenerateAllThumbnailAsync(
            Image image,
            CancellationToken cancellationToken)
        {
            var thumbs = new List <ThumbnailResult>();

            foreach (ThumbnailSizeDefinition?def in _sizeDefinitions)
            {
                ThumbnailResult thumb = await GenerateThumbnailAsync(
                    image,
                    def.Name,
                    cancellationToken);

                thumbs.Add(thumb);
            }

            return(thumbs);
        }
Exemplo n.º 4
0
        private async Task <IEnumerable <FaceData> > GetFaceData(Stream image)
        {
            IEnumerable <FaceDetectionResponse> detectedFaces = await _faceDetectionService
                                                                .DetectFacesAsync(image, default);

            IEnumerable <FaceData> faceData = detectedFaces.Select(f =>
                                                                   new FaceData
            {
                Box      = f.Box,
                Encoding = f.Encoding,
                Id       = Guid.NewGuid()
            }).ToList();

            IEnumerable <BoxExtractionInput> inputs = faceData.Select(f =>
                                                                      new BoxExtractionInput
            {
                Box = f.Box,
                Id  = f.Id
            });

            image.Position = 0;

            IEnumerable <BoxExtractionResult> faceImages = await _faceExtractorService
                                                           .ExtractBoxesAsync(image, inputs, ThumbnailSizeName.M, default);

            ILookup <Guid, BoxExtractionResult> faceLookup = faceImages.ToLookup(x => x.Id);

            foreach (FaceData face in faceData)
            {
                ThumbnailResult thumb = faceLookup[face.Id].Single().Thumbnail;

                face.Thumbnail = new MediaThumbnail
                {
                    Id         = Guid.NewGuid(),
                    Data       = thumb.Data,
                    Dimensions = thumb.Dimensions,
                    Format     = thumb.Format,
                    Size       = thumb.Size
                };
            }

            return(faceData);
        }
Exemplo n.º 5
0
        public async Task GenerateThumbnail()
        {
            // Arrange
            var defs = new List <ThumbnailSizeDefinition>
            {
                new ThumbnailSizeDefinition
                {
                    Name  = ThumbnailSizeName.M,
                    Width = 240
                }
            };

            var   service = new ThumbnailService(defs);
            Image image   = TestMediaLibrary.WithExif.AsImage();

            // Act
            ThumbnailResult thumb = await service.GenerateThumbnailAsync(
                image,
                ThumbnailSizeName.M,
                default);

            // Assert
            //thumb.Dimensions.Width.Should()
        }