using System; using System.Collections.Generic; using System.Collections.Specialized; using System.Drawing.Imaging; using Microsoft.Azure.CognitiveServices.Vision.ComputerVision; using Microsoft.Azure.CognitiveServices.Vision.ComputerVision.Models; using System.Threading.Tasks; using System.IO; using Newtonsoft.Json; using Newtonsoft.Json.Linq; using Aspose.Pdf; namespace Aspose.PDF.Demo.ImageClassification { class Program { private static readonly HashSet Tags = new HashSet(); private static readonly StringCollection FileNames = new StringCollection(); static readonly string SubscriptionKey = ""; static readonly string Endpoint ="https://aspose-pdf-demo.cognitiveservices.azure.com/"; private static readonly License License = new Aspose.Pdf.License(); static void Main() { License.SetLicense(@""); ExtractImages(); CollectImageTags(); SaveMetaData(); } private static void SaveMetaData() { var document = new Aspose.Pdf.Document(@"c:\tmp\parserdemo.pdf"); _ = new DocumentInfo(document) { Keywords = string.Join("; ", Tags) }; document.Save(@"c:\tmp\parserdemo.pdf"); } private static void CollectImageTags() { // Create a client ComputerVisionClient client = Authenticate(Endpoint, SubscriptionKey); foreach (var fileName in FileNames) { var imageTags = AnalyzeImageUrl(client, fileName).Result.Tags; foreach (var imageTag in imageTags) { if (imageTag.Confidence > 0.9) Tags.Add(imageTag.Name); } } } private static void ExtractImages() { var document = new Aspose.Pdf.Document(@"c:\tmp\parserdemo.pdf"); var abs = new ImagePlacementAbsorber(); document.Pages.Accept(abs); var imageCount = 0; Directory.CreateDirectory("C:\\tmp\\extracted_images\\"); foreach (var imagePlacement in abs.ImagePlacements) { var xImage = imagePlacement.Image; var fileName = $@"C:\\tmp\\extracted_images\\image_{imageCount++}.jpg"; var stream = new FileStream(fileName, FileMode.Create); xImage.Save(stream, ImageFormat.Jpeg); stream.Close(); FileNames.Add(fileName); } } public static ComputerVisionClient Authenticate(string endpoint, string key) { var client = new ComputerVisionClient(new ApiKeyServiceClientCredentials(key)) {Endpoint = endpoint}; return client; } public static async Task AnalyzeImageUrl(ComputerVisionClient client, string imageUrl) { Console.WriteLine("----------------------------------------------------------"); Console.WriteLine("ANALYZE IMAGE - URL"); Console.WriteLine(); Console.WriteLine($"Analyzing the image {Path.GetFileName(imageUrl)}..."); Console.WriteLine(); // Analyze the URL image return await client.TagImageInStreamAsync( File.OpenRead(imageUrl ?? throw new ArgumentNullException(nameof(imageUrl)))); } } }