static async Task Main(string[] args) { if (args.Length != 3) { Console.WriteLine("Pass first argument with connection string to database, second with file storage type (fs/azure), third a connection to azure storage or local path template (relative path not supported)."); return; } string connectionString = args[0]; Console.WriteLine("Creating context."); using var entries = new EntriesDataContext(DbContextOptions <EntriesDataContext>(connectionString, "Entries"), Schema <EntriesDataContext>("Entries")); var imageFormat = ImageFormatDefinition.Jpeg; IFileStorage fileStorage = null; string storageType = args[1]; if (storageType == "fs") { fileStorage = new SystemIoFileStorage(path => path, Options.Create(new SystemIoStorageOptions() { PathTemplate = args[2] }), imageFormat); } else if (storageType == "azure") { fileStorage = new AzureFileStorage(Options.Create(new AzureStorageOptions() { ConnectionString = args[2] })); } else { Console.WriteLine($"Not supported type of file storage '{storageType}'."); return; } var resizeService = new ImageResizeService(imageFormat); Console.WriteLine("Getting images."); var images = await entries.Images .Include(i => i.Entry) //.Where(i => i.OriginalWidth == 0 || i.OriginalHeight == 0) .ToListAsync(); Console.WriteLine($"Found '{images.Count}' images."); foreach (var image in images) { if (!await TryUpdateOriginalSizeAsync(entries, fileStorage, resizeService, image, ImageType.Original)) { await TryUpdateOriginalSizeAsync(entries, fileStorage, resizeService, image, ImageType.Preview); } } Console.WriteLine("Saving changes."); await entries.SaveChangesAsync(); Console.WriteLine("Done."); }
public async Task <VisionHandwritingModel> HandwritingAsync(VisionHandwritingRequest request) { Stopwatch imageResizeSW = null; var visionOperation = await MergeProperties(request, this._config, this._attr); if (request.IsUrlImageSource == false) { if (visionOperation.ImageBytes == null || visionOperation.ImageBytes.Length == 0) { _log.LogWarning(VisionExceptionMessages.FileMissing); throw new ArgumentException(VisionExceptionMessages.FileMissing); } if (ImageResizeService.IsImage(visionOperation.ImageBytes) == false) { _log.LogWarning(VisionExceptionMessages.InvalidFileType); throw new ArgumentException(VisionExceptionMessages.InvalidFileType); } if (visionOperation.Oversized == true && visionOperation.AutoResize == false) { var message = string.Format(VisionExceptionMessages.FileTooLarge, VisionConfiguration.MaximumFileSize, visionOperation.ImageBytes.Length); _log.LogWarning(message); throw new ArgumentException(message); } else if (visionOperation.Oversized == true && visionOperation.AutoResize == true) { _log.LogTrace("Resizing Image"); imageResizeSW = new Stopwatch(); imageResizeSW.Start(); visionOperation.ImageBytes = ImageResizeService.ResizeImage(visionOperation.ImageBytes); imageResizeSW.Stop(); _log.LogMetric("VisionOcrImageResizeDurationMillisecond", imageResizeSW.ElapsedMilliseconds); if (visionOperation.Oversized) { var message = string.Format(VisionExceptionMessages.FileTooLargeAfterResize, VisionConfiguration.MaximumFileSize, visionOperation.ImageBytes.Length); _log.LogWarning(message); throw new ArgumentException(message); } } } var result = await SubmitRequest(visionOperation); return(result); }
private bool TryToDetectFaceAndResizeImage(KeyValuePair <string, EPiFaceImageAttribute> faceImagePropertyDef, ImageData image, Image imageDetails, out byte[] faceResizedImage) { faceResizedImage = null; IList <DetectedFace> detectedFaces = FaceRecognitionService.DetectFace(image.BinaryData); if (detectedFaces?.Count == 0) { return(false); } DetectedFace firstFace = detectedFaces.FirstOrDefault(); FaceImageDimensions faceImageDimensions = new FaceImageDimensions(firstFace, faceImagePropertyDef.Value.FacePercentage, imageDetails); faceResizedImage = ImageResizeService.CutAndResizeImage(image.BinaryData.ReadAllBytes(), faceImageDimensions, faceImagePropertyDef.Value.Width, faceImagePropertyDef.Value.Height); return(true); }
private static async Task <bool> TryUpdateOriginalSizeAsync(EntriesDataContext entries, IFileStorage fileStorage, ImageResizeService resizeService, Image image, ImageType imageType) { var fileContent = await fileStorage.FindAsync(image.Entry, image, imageType); if (fileContent != null) { using (fileContent) { var size = resizeService.GetSize(fileContent); if (size.width != image.OriginalWidth || size.height != image.OriginalHeight) { image.OriginalWidth = size.width; image.OriginalHeight = size.height; entries.Images.Update(image); } } return(true); } else { Console.WriteLine($"Missing '{imageType}' file for '{image.Id}'."); return(false); } }
public ImageController(ImageResizeService imageService) { _imageService = imageService; }