Пример #1
0
        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);
        }
Пример #3
0
        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");
            }
        }
Пример #4
0
        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}"));
        }