正方体OCR简单的例子(Tesseract OCR simple example)

2019-09-03 21:28发布

嗨你能谁能给我测试的Tesseract OCR的一个简单的例子,最好在C#。
我试着找到了演示在这里 。 我下载在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 ! 但是这是一个非常大的项目,我跟着。 我需要一个简单的例子如上。

谢谢

Answer 1:

好。 我发现这里的解决方案tessnet2加载失败亚当给出的答案

显然,我是用tessdata的版本错误。 我是继源页面直观地指示和导致该问题。

它说

快速Tessnet2用法

  1. 下载的二进制这里 ,添加到您的.NET项目大会Tessnet2.dll的参考。

  2. 下载语言数据定义文件在这里 ,并把它放在tessdata目录。 Tessdata目录和你的exe文件必须在同一目录下。

你下载完该文件后,当您按照下载语言文件的链接,也有很多的语言文件。 但他们都不是正确的版本。 你需要选择的所有版本,并进入下一个页面,正确的版本(正方体-2.00.eng)! 他们要么更新下载二进制链接到3版本或将版本2语言文件的第一页上。 或者至少大胆提的是,这个版本的问题是一个大问题!

无论如何,我发现它。 感谢大家。



Answer 2:

在C#测试超正方体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文件夹必须存在于库中:BIN \调试\



Answer 3:

我能够得到它通过以下工作指令 。

  • 下载示例代码

  • 它解压到一个新的位置

  • 开〜\的tesseract样本主\ SRC \ Tesseract.Samples.sln(I使用的Visual Studio 2017)

  • 安装的Tesseract NuGet包该项目(或卸载/重新安装,因为我不得不)

  • 取消注释Tesseract.Samples.Program.cs最后两行有意义: Console.Write("Press any key to continue . . . "); Console.ReadKey(true); Console.Write("Press any key to continue . . . "); Console.ReadKey(true);

  • 运行(按F5键)

  • 你应该得到这个Windows控制台输出



Answer 4:

尝试更新行:

ocr.Init(@ “C:\”, “主机”,假); //这里的路径应该是tessdata的父文件夹



Answer 5:

我有同样的问题,现在它的解决。 我有tesseract2,根据本文件夹32位和64位,我复制的文件64位的文件夹(如我的系统是64位)到主文件夹(“Tesseract2”)和下斌/ Debug文件夹。 现在我的解决方案是工作的罚款。



Answer 6:

就我而言,我把所有这些工作,除了正确的字符识别。

但是,你需要考虑这些几件事情:

  • 使用正确的tessnet2库
  • 使用正确的tessdata语言版本
  • tessdata应该是某个地方你的应用程序文件夹,在那里你可以把全路径的初始化参数。 使用ocr.Init(@"c:\tessdata", "eng", true);
  • 调试会导致你头疼的问题。 然后,你需要更新你的app.config使用。 (我不能在这里把XML代码。给我您的电子邮件,我将通过电子邮件发送给你)

希望这有助于



Answer 7:

这里有一个很好的工作示例项目; 正方体OCR样品(Visual Studio中)与Leptonica预处理的Tesseract OCR样品(Visual Studio中)与Leptonica预处理

超正方体OCR 02年2月3日API可以是混乱,所以这引导你通过包括超正方体和Leptonica DLL加载到一个Visual Studio C ++项目,并提供了一个示例文件,其拍摄图像的路径来预处理和OCR。 在Leptonica预处理脚本转换输入图像转换成黑白书般的文字。

建立

包括这个在自己的项目,你将需要引用的头文件和lib和复制tessdata文件夹和DLL。

复制的Tesseract,包括文件夹到你的项目的根文件夹。 单击在Visual Studio解决方案资源管理项目,并转到项目>属性。

VC ++目录>包含目录:

.. \的tesseract-包括\的tesseract; .. \的tesseract-包括\ leptonica; $(INCLUDEPATH)C / C ++>预处理>预处理定义:

_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)C / C ++>链接>输入>附加依赖:

.. \正方体,包括\ libtesseract302.lib; .. \正方体,包括\ liblept168.lib;%(AdditionalDependencies),现在你可以在项目中包含的文件头:

包括

包括

现在,复制在两个DLL文件正方体,包括和调试到项目的输出目录中tessdata文件夹。

当初始化正方体,需要指定父文件夹的位置(!重要)的tessdata文件夹,如果它是不是已经在你的可执行文件的当前目录。 您可以复制我的脚本,它假定tessdata安装在可执行文件的文件夹。

超正方体:: TessBaseAPI * API =新的tesseract :: TessBaseAPI(); API - >初始化( “d:\ tessdataParentFolder \”,...样品

可以编译所提供的样本,这需要使用的图像路径的一个命令行参数。 预处理()函数使用Leptonica创建这使得正方体工作,90%的准确度图像的黑色和白色的书页状副本。 的OCR()函数示出了超正方体API返回字符串输出的功能。 该toClipboard()可用于将文本保存到剪贴板上的Windows。 您可以复制这些到自己的项目。



Answer 8:

这为我工作,我有更多的3-4 PDF格式文本提取,如果一个不列入工作,其他人会...正方体尤其在该代码可以在Windows 7,8,Server 2008中使用。 希望这对你有帮助

    do
    {
    // 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... 


文章来源: Tesseract OCR simple example
标签: c# ocr tesseract