Простой пример Tesseract OCR - программирование
Подтвердить что ты не робот

Простой пример Tesseract OCR

Привет Можете ли вы дать мне простой пример тестирования Tesseract OCR предпочтительно в С#.
Я попробовал демонстрацию здесь. Я загружаю английский набор данных и распакую диск на диске C. и изменил код следующим образом:

string path = @"C:\pic\mytext.jpg";
Bitmap image = new Bitmap(path);
Tesseract ocr = new Tesseract();
ocr.SetVariable("tessedit_char_whitelist", "0123456789"); // If digit only
ocr.Init(@"C:\tessdata\", "eng", false); // To use correct tessdata
List<tessnet2.Word> result = ocr.DoOCR(image, Rectangle.Empty);
foreach (tessnet2.Word word in result)
    Console.WriteLine("{0} : {1}", word.Confidence, word.Text);

К сожалению, код не работает. программа умирает в строке "ocr.Init(...". Я даже не мог получить исключение даже с помощью try-catch.

Мне удалось запустить vietocr! но это очень большой проект для меня. Мне нужен простой пример, например, выше.

Спасибо

4b9b3361

Ответ 1

Ok. Я нашел решение здесь tessnet2 не загружается Анс, данный Адамом

По-видимому, я использовал неправильную версию tessdata. Я следил за инструкцией исходной страницы и вызвал эту проблему.

говорится

Использование Quick Tessnet2

  • Загрузите здесь двоичный файл, добавьте ссылку на сборку Tessnet2.dll в свой проект .NET.

  • Загрузите файл определения данных языка здесь и поместите его в каталог tessdata. Каталог Tessdata и ваш exe должны находиться в тот же каталог.

После загрузки двоичного файла, когда вы переходите по ссылке для загрузки языкового файла, существует много языковых файлов. но ни одна из них не является правильной версией. вам нужно выбрать всю версию и перейти на следующую страницу для правильной версии (tesseract-2.00.eng)! Они должны либо обновить бинарную ссылку загрузки до версии 3, либо перенести файл языка версии 2 на первую страницу. Или, по крайней мере, смело упомянуть тот факт, что проблема с этой версией - большое дело!

В любом случае я нашел его. Спасибо всем.

Ответ 2

Простой пример тестирования Tesseract OCR в С#:

    public static string GetText(Bitmap imgsource)
    {
        var ocrtext = string.Empty;
        using (var engine = new TesseractEngine(@"./tessdata", "eng", EngineMode.Default))
        {
            using (var img = PixConverter.ToPix(imgsource))
            {
                using (var page = engine.Process(img))
                {
                    ocrtext = page.GetText();
                }
            }
        }

        return ocrtext;
    }

Информация: папка tessdata​​strong > должна существовать в репозитории: bin\Debug\

Ответ 3

Попробуйте обновить строку до:

ocr.Init(@ "C: \", "eng", false);//путь здесь должен быть родительской папкой tessdata​​p >

Ответ 4

У меня была такая же проблема, теперь она решена. У меня есть tesseract2, под этими папками для 32-битного и 64-битного, я скопировал файлы в 64-разрядную папку (как моя 64-разрядная система) в основную папку ( "Tesseract2" ) и в папку bin/Debug. Теперь мое решение работает нормально.

Ответ 5

Это сработало для меня, у меня было еще 3-4 PDF-экстрактор текста, и если никто не работает, другой будет... tesseract, в частности, этот код можно использовать в Windows 7, 8, Server 2008. Надеюсь, это полезно для вас делать                           {

                            // Sleep or Pause the Thread for 1 sec, if service is running too fast...
                            Thread.Sleep(millisecondsTimeout: 1000);
                            Guid tempGuid = ToSeqGuid();
                            string newFileName = tempGuid.ToString().Split('-')[0];
                            string outputFileName = appPath + "\\pdf2png\\" + fileNameithoutExtension + "-" + newFileName +
                                                    ".png";
                            extractor.SaveCurrentImageToFile(outputFileName, ImageFormat.Png);
                            // Create text file here using Tesseract
                            foreach (var file in Directory.GetFiles(appPath + "\\pdf2png"))
                            {
                                try
                                {
                                    var pngFileName = Path.GetFileNameWithoutExtension(file);
                                    string[] myArguments =
                                    {
                                        "/C tesseract ", file,
                                        " " + appPath + "\\png2text\\" + pngFileName
                                    }; // /C for closing process automatically whent completes
                                    string strParam = String.Join(" ", myArguments);

                                    var myCmdProcess = new Process();
                                    var theProcess = new ProcessStartInfo("cmd.exe", strParam)
                                    {
                                        CreateNoWindow = true,
                                        UseShellExecute = false,
                                        RedirectStandardOutput = true,
                                        RedirectStandardError = true,
                                        WindowStyle = ProcessWindowStyle.Minimized
                                    }; // Keep the cmd.exe window minimized
                                    myCmdProcess.StartInfo = theProcess;
                                    myCmdProcess.Exited += myCmdProcess_Exited;
                                    myCmdProcess.Start();

                                    //if (process)
                                    {
                                        /*
                                        MessageBox.Show("cmd.exe process started: " + Environment.NewLine +
                                                        "Process Name: " + myCmdProcess.ProcessName +
                                                        Environment.NewLine + " Process Id: " + myCmdProcess.Id
                                                        + Environment.NewLine + "process.Handle: " +
                                                        myCmdProcess.Handle);
                                        */
                                        Process.EnterDebugMode();
                                        //ShowWindow(hWnd: process.Handle, nCmdShow: 2);
                                        /*
                                        MessageBox.Show("After EnterDebugMode() cmd.exe process Exited: " +
                                                        Environment.NewLine +
                                                        "Process Name: " + myCmdProcess.ProcessName +
                                                        Environment.NewLine + " Process Id: " + myCmdProcess.Id
                                                        + Environment.NewLine + "process.Handle: " +
                                                        myCmdProcess.Handle);
                                        */
                                        myCmdProcess.WaitForExit(60000);
                                        /*
                                        MessageBox.Show("After WaitForExit() cmd.exe process Exited: " +
                                                        Environment.NewLine +
                                                        "Process Name: " + myCmdProcess.ProcessName +
                                                        Environment.NewLine + " Process Id: " + myCmdProcess.Id
                                                        + Environment.NewLine + "process.Handle: " +
                                                        myCmdProcess.Handle);
                                        */
                                        myCmdProcess.Refresh();
                                        Process.LeaveDebugMode();
                                        //myCmdProcess.Dispose();
                                        /*
                                        MessageBox.Show("After LeaveDebugMode() cmd.exe process Exited: " +
                                                        Environment.NewLine);
                                        */
                                    }


                                    //process.Kill();
                                    // Waits for the process to complete task and exites automatically
                                    Thread.Sleep(millisecondsTimeout: 1000);

                                    // This works fine in Windows 7 Environment, and not in Windows 8
                                    // Try following code block
                                    // Check, if process is not comletey exited

                                    if (!myCmdProcess.HasExited)
                                    {
                                        //process.WaitForExit(2000); // Try to wait for exit 2 more seconds
                                        /*
                                        MessageBox.Show(" Process of cmd.exe was exited by WaitForExit(); Method " +
                                                        Environment.NewLine);
                                        */
                                        try
                                        {
                                            // If not, then Kill the process
                                            myCmdProcess.Kill();
                                            //myCmdProcess.Dispose();
                                            //if (!myCmdProcess.HasExited)
                                            //{
                                            //    myCmdProcess.Kill();
                                            //}

                                            MessageBox.Show(" Process of cmd.exe exited ( Killed ) successfully " +
                                                            Environment.NewLine);
                                        }
                                        catch (System.ComponentModel.Win32Exception ex)
                                        {
                                            MessageBox.Show(
                                                " Exception: System.ComponentModel.Win32Exception " +
                                                ex.ErrorCode + Environment.NewLine);
                                        }
                                        catch (NotSupportedException notSupporEx)
                                        {
                                            MessageBox.Show(" Exception: NotSupportedException " +
                                                            notSupporEx.Message +
                                                            Environment.NewLine);
                                        }
                                        catch (InvalidOperationException invalidOperation)
                                        {
                                            MessageBox.Show(
                                                " Exception: InvalidOperationException " +
                                                invalidOperation.Message + Environment.NewLine);
                                            foreach (
                                                var textFile in Directory.GetFiles(appPath + "\\png2text", "*.txt",
                                                    SearchOption.AllDirectories))
                                            {
                                                loggingInfo += textFile +
                                                               " In Reading Text from generated text file by Tesseract " +
                                                               Environment.NewLine;
                                                strBldr.Append(File.ReadAllText(textFile));
                                            }
                                            // Delete text file after reading text here
                                            Directory.GetFiles(appPath + "\\pdf2png").ToList().ForEach(File.Delete);
                                            Directory.GetFiles(appPath + "\\png2text").ToList().ForEach(File.Delete);
                                        }
                                    }
                                }
                                catch (Exception exception)
                                {
                                    MessageBox.Show(
                                        " Cought Exception in Generating image do{...}while{...} function " +
                                        Environment.NewLine + exception.Message + Environment.NewLine);
                                }
                            }
                            // Delete png image here
                            Directory.GetFiles(appPath + "\\pdf2png").ToList().ForEach(File.Delete);
                            Thread.Sleep(millisecondsTimeout: 1000);
                            // Read text from text file here
                            foreach (var textFile in Directory.GetFiles(appPath + "\\png2text", "*.txt",
                                SearchOption.AllDirectories))
                            {
                                loggingInfo += textFile +
                                               " In Reading Text from generated text file by Tesseract " +
                                               Environment.NewLine;
                                strBldr.Append(File.ReadAllText(textFile));
                            }
                            // Delete text file after reading text here
                            Directory.GetFiles(appPath + "\\png2text").ToList().ForEach(File.Delete);
                        } while (extractor.GetNextImage()); // Advance image enumeration...

Ответ 6

В моем случае я работал над этим, кроме правильного распознавания символов.

Но вам нужно учитывать эти несколько вещей:

  • Использовать правильную библиотеку tessnet2
  • использовать правильную версию языка tessdata​​li >
  • tessdata должен быть где-то из вашей папки приложения, где вы можете поместить полный путь в параметр init. используйте ocr.Init(@"c:\tessdata", "eng", true);
  • Отладка вызовет головную боль. Затем вам нужно обновить приложение app.config использовать это. (Я не могу поставить здесь код xml. Дайте мне свой адрес электронной почты, я отправлю его вам по электронной почте)

надеюсь, что это поможет

Ответ 7

Вот отличный рабочий пример проекта; Образец Tesseract OCR (Visual Studio) с предварительной обработкой Leptonica Tesseract OCR Sample (Visual Studio) с предварительной обработкой Leptonica

Tesseract OCR 3.02.02 API может вводить в заблуждение, поэтому это поможет вам включить Dll Tesseract и Leptonica в проект Visual С++ Project и предоставить образец файла, который принимает путь к препроцессу и OCR. Предварительная обработка script в Лептонике преобразует входное изображение в черно-белый книжный текст.

Настройка

Чтобы включить это в свои собственные проекты, вам нужно будет ссылаться на файлы заголовков и lib и скопировать папки и библиотеки tessdata.

Скопируйте папку tesseract-include в корневую папку вашего проекта. Теперь нажмите на проект в Visual Studio Solution Explorer и перейдите в Project > Properties.

Каталоги VС++ > Включить каталоги:

..\тессеракт-включить\Tesseract;..\тессеракт-включить\leptonica; $(INCLUDEPATH) C/С++ > Препроцессоp > Определения препроцессора:

_CRT_SECURE_NO_WARNINGS;% (PreprocessorDefinitions) C/С++ > Linker > Input > Additional Dependencies:

..\тессеракт-включать\libtesseract302.lib;..\тессеракт-Include\liblept168.lib;% (AdditionalDependencies) Теперь вы можете включать заголовки в файл проекта:

включить

включить

Теперь скопируйте два файла dll в tesseract-include и папку tessdata в Debug в Output Directory вашего проекта.

Когда вы инициализируете tesseract, вам нужно указать расположение родительской папки (! important) папки tessdata, если она еще не является текущим каталогом исполняемого файла. Вы можете скопировать мой script, который предполагает, что tessdata установлен в исполняемой папке.

tesseract:: TessBaseAPI * api = new tesseract:: TessBaseAPI(); api- > Init ( "D:\tessdataParentFolder \",... Пример

Вы можете скомпилировать предоставленный образец, который использует один аргумент командной строки для пути к изображению. Функция preprocess() использует Leptonica для создания черно-белой книжной копии изображения, что делает работу tesseract с 90% точностью. Функция ocr() показывает функциональность Tesseract API для возврата вывода строки. ToClipboard() может использоваться для сохранения текста в буфер обмена в Windows. Вы можете скопировать их в свои собственные проекты.

Ответ 8

Мне удалось заставить его работать, следуя этим инструкциям.

  • Загрузите пример кода Код примера Tesseract

  • Разархивируйте его в новое место

  • Открыть ~\tesseract-samples-master\src\Tesseract.Samples.sln(я использовал Visual Studio 2017)

  • Установите пакет Tesseract NuGet для этого проекта (или удалите/переустановите, как я должен был) NuGet Tesseract

  • Раскомментируйте последние две значимые строки в Tesseract.Samples.Program.cs: Console.Write("Press any key to continue . . . "); Console.ReadKey(true);

  • Запустить (нажать F5)

  • Вы должны получить этот вывод консоли Windows введите описание изображения здесь