예제 #1
0
        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);
        }
예제 #3
0
        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);
        }
예제 #4
0
        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);
            }
        }
예제 #5
0
 public ImageController(ImageResizeService imageService)
 {
     _imageService = imageService;
 }