public async Task ScanPdf(string pdfFile, string range, string scanFile) { OcrRequest request = CreateOcrRequest(); request.DocumentFile = pdfFile; request.PageRange = range; OcrResult <OcrProcessDocumentResponse> response = await _ocrWebService.ProcessDocument(request); if (response.Success) { //string directory = GetScanDirectory(); //zdir.CreateDirectory(scanDirectory); zfile.CreateFileDirectory(scanFile); //string scanFile = zPath.Combine(scanDirectory, "scan"); Trace.WriteLine($"save scan to \"{scanFile}\""); await _ocrWebService.DownloadResultDocuments(response.Data, scanFile); Trace.WriteLine($"scan ok {response.Data.ProcessedPages} pages - remainder {response.Data.AvailablePages} pages"); } else { Trace.WriteLine($"scan error code {response.StatusCode}"); } }
/// <summary> /// Runs optical character recognition on the given image. /// </summary> /// <param name="imageUrl">URL to the image</param> /// <returns>The OCR result</returns> public async Task <OcrResult> RunOcrAsync(string imageUrl) { var url = $"https://{endpoint}/{OcrPath}?detectOrientation=true"; var request = new HttpRequestMessage(HttpMethod.Post, url); request.Headers.Add(SubscriptionKeyHeaderName, this.accessKey); var body = new OcrRequest { Url = imageUrl }; request.Content = new ObjectContent <OcrRequest>(body, JsonFormatter); var response = await this.httpClient.SendAsync(request); var result = await this.ProcessApiResponse <OcrResult>(response); return(result); }
public async Task ScanImage(string imageFile, string scanFile) { OcrRequest request = CreateOcrRequest(); request.DocumentFile = imageFile; OcrResult <OcrProcessDocumentResponse> response = await _ocrWebService.ProcessDocument(request); if (response.Success) { //string scanDirectory = GetScanDirectory(); //zdir.CreateDirectory(scanDirectory); zfile.CreateFileDirectory(scanFile); //string scanFile = zPath.Combine(scanDirectory, $"scan-page-{page:000}"); Trace.WriteLine($"save scan to \"{scanFile}\""); await _ocrWebService.DownloadResultDocuments(response.Data, scanFile); Trace.WriteLine($"scan ok {response.Data.ProcessedPages} pages - remainder {response.Data.AvailablePages} pages"); } }
public static Result <string> ExtractWordFromImage(OcrRequest request) { Image myImage = WindowsHelper.CaptureWindowByName(request.ProcessName, new Rectangle(request.ImageXCoordinate, request.ImageYCoordinate, request.ImageWidth, request.ImageHeight)); var imageAttr = new ImageAttributes(); imageAttr.SetThreshold(0.75f); var bm = new Bitmap(myImage.Width, myImage.Height); using (var gr = Graphics.FromImage(bm)) { gr.DrawImage(myImage, new[] { new Point(0, 0), new Point(myImage.Width, 0), new Point(0, myImage.Height), }, new Rectangle(0, 0, myImage.Width, myImage.Height), GraphicsUnit.Pixel, imageAttr); } if (request.InvertColour) { for (var h = 0; h < bm.Height; h++) { for (var w = 0; w < bm.Width; w++) { var color = bm.GetPixel(w, h); bm.SetPixel(w, h, Color.FromArgb(255, (255 - color.R), (255 - color.G), (255 - color.B))); } } } var fp = $"{Path.GetTempPath()}{Guid.NewGuid()}.jpg"; bm.Save(fp); var word = new TesseractEngine($"{new System.IO.DirectoryInfo(Environment.CurrentDirectory).FullName}\\tessdata\\", "eng", EngineMode.Default).Process(Pix.LoadFromFile(@"D:\\tmp.jpg")) .GetText() .Replace("\n", " "); return(Result.SuccessIf <string>(!string.IsNullOrWhiteSpace(word), word, $"No words readable, image saved in {fp}")); }