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; }
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); }
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); }
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); }
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() }