получить координаты первого алфавита, извлеченного во время распознавания текста в приложении winform в c # - PullRequest
0 голосов
/ 11 июня 2018

существует ли какой-либо способ или какая-либо DLL, с помощью которой я могу получить местоположение или координаты первой буквы или алфавита, найденных с помощью OCR в приложении Windows C формы формы, без выполнения OCR для всего документа?

Как я использовалПриспособьте и сделайте так, чтобы Dll выполнял OCR для image.it, занимая время, извлекая текст, поскольку он читает весь текст, но я хочу просто прочитать первое слово и получить координату первой извлеченной буквы.Я должен реализовать это в приложении Windows Form, используя C #.пожалуйста помоги.Заранее спасибо.!

1 Ответ

0 голосов
/ 12 июля 2018

Так же, как отказ от ответственности, этот ответ о платном программном обеспечении, и я работаю на компанию.

Вы можете проверить LEADTOOLS SDK , который имеетАлгоритм сегментации, который я упомянул в своем комментарии, чтобы зонировать документ, а затем найти самую верхнюю левую зону текста и выполнить OCR на этих границах.

Я написал консольное приложение, чтобы показать пример того, как этого добиться.используя LEADTOOLS OCR NuGet: https://www.nuget.org/packages/Leadtools.Ocr/

using Leadtools;
using Leadtools.Codecs;
using Leadtools.ImageProcessing.Core;
using Leadtools.Ocr;
using System;
using System.Linq;

namespace FindFirstZone
{
    class Program
    {
        static IOcrEngine ocrEngine;
        static RasterCodecs codecs;

        static void Main(string[] args)
        {
            Initialize();
            var image = codecs.Load(@"randomtext.png");
            LeadRect rect = FindFirstZone(image);
            DoOcr(image, rect);
            Console.ReadLine();
        }

        static void Initialize()
        {
            RasterSupport.SetLicense(@"C:\LEADTOOLS 20\Common\License\LEADTOOLS.LIC",
                System.IO.File.ReadAllText(@"C:\LEADTOOLS 20\Common\License\LEADTOOLS.LIC.KEY"));

            codecs = new RasterCodecs();

            ocrEngine = OcrEngineManager.CreateEngine(OcrEngineType.LEAD, false);
            ocrEngine.Startup(null, null, null, null);
        }

        static LeadRect FindFirstZone(RasterImage img)
        {
            AutoZoningCommand autoZoningCommand = new AutoZoningCommand(
                AutoZoningOptions.DetectAccurateZones |
                AutoZoningOptions.DetectText |
                AutoZoningOptions.DontAllowOverlap);
            autoZoningCommand.Run(img);

            if (autoZoningCommand.Zones != null && autoZoningCommand.Zones.Count > 0)
            {
                var sortedList = autoZoningCommand.Zones.OrderBy(z => z.Bounds.Top)
                    .ThenBy(z => z.Bounds.Left).ToList();
                return sortedList[0].Bounds;
            }
            else
                throw new Exception("No Zones");
        }

        static void DoOcr(RasterImage image, LeadRect rect)
        {
            using (var ocrPage = ocrEngine.CreatePage(image, OcrImageSharingMode.None))
            {
                ocrPage.Zones.Add(new OcrZone()
                {
                    Bounds = rect,
                    ZoneType = OcrZoneType.Text,
                });
                ocrPage.Recognize(null);
                Console.WriteLine(ocrPage.GetText(-1));
            }
        }
    }
}

Я проверил это с помощью произвольного текста, который я сгенерировал (тестовое изображение здесь) и вот результат этой программы:

Птица, с небес, не значит, что не будет третьего скота.Сказал, что заполнить принес вечер, сказал великий ему

...