private async Task <BoxExtractionResult> ExtractBoxAsync( Image image, BoxExtractionInput input, ThumbnailSizeName thumbnailSize, CancellationToken cancellationToken) { var face = new BoxExtractionResult(); int width = input.Box.Right - input.Box.Left; int height = input.Box.Bottom - input.Box.Top; double multi = 1.95; var widthAdd = (int)((width * multi - width) / 2); //Make height and width same var heighAdd = Math.Abs(widthAdd + width - height); var faceBox = new ImageBox(); faceBox.Left = input.Box.Left - widthAdd; if (faceBox.Left < 0) { faceBox.Left = 0; } faceBox.Right = input.Box.Right + widthAdd; if (faceBox.Right > image.Width) { faceBox.Right = image.Width; } faceBox.Top = input.Box.Top - heighAdd; if (faceBox.Top < 0) { faceBox.Top = 0; } faceBox.Bottom = input.Box.Bottom + heighAdd; if (faceBox.Bottom > image.Height) { faceBox.Bottom = image.Height; } var rect = new Rectangle( faceBox.Left, faceBox.Top, faceBox.Right - faceBox.Left, faceBox.Bottom - faceBox.Top); Image croped = image.Clone(x => x.Crop(rect)); ThumbnailResult faceThumb = await _thumbnailService.GenerateThumbnailAsync( croped, thumbnailSize, cancellationToken); return(new BoxExtractionResult { Id = input.Id, Thumbnail = faceThumb }); }
public async Task <IEnumerable <BoxExtractionResult> > ExtractBoxesAsync( Image image, IEnumerable <BoxExtractionInput> inputs, ThumbnailSizeName thumbnailSize, CancellationToken cancellationToken) { var faces = new List <BoxExtractionResult>(); foreach (BoxExtractionInput input in inputs) { try { BoxExtractionResult face = await ExtractBoxAsync( image, input, thumbnailSize, cancellationToken); faces.Add(face); } catch (Exception ex) { } } return(faces); }