Emgu CV C#Exception创建tesseract对象

时间:2015-02-21 23:29:33

标签: c#-4.0 emgucv

我可以访问所有emgu库。 VS找到库,using Emgu.CV.OCR不返回任何错误。

当我尝试创建Tesseract对象时,Program.cs会抛出FileLoadException。在System.Windows.Forms.dll

删除创建tesseract的代码行可以使程序正常运行。

我尝试将tessdata复制到我的调试文件中,但也没有用。

这是我的代码:

private void button1_Click(object sender, EventArgs e)
    {
        Tesseract _ocr;
        _ocr = new Tesseract(@"tessdata", "eng", Tesseract.OcrEngineMode.OEM_TESSERACT_CUBE_COMBINED);

        OpenFileDialog Openfile = new OpenFileDialog();
        if (Openfile.ShowDialog() == DialogResult.OK)
        {
            Image<Bgr, Byte> My_Image = new Image<Bgr, byte>(Openfile.FileName);
            pictureBox1.Image = My_Image.ToBitmap();
        }
    }

2 个答案:

答案 0 :(得分:0)

首先,您需要检查项目参考。是否有“Emgu.CV.OCR”库,如果不是先加入它。然后尝试以下代码,它可能适合您。

private void button1_Click(object sender, EventArgs e)
    {
        Tesseract _ocr;
       _ocr = new Tesseract(@"C:\Emgu\emgucv-windows-universal-cuda 2.9.0.1922\Emgu.CV.OCR\tessdata", "eng", Tesseract.OcrEngineMode.OEM_TESSERACT_CUBE_COMBINED);//first Parameter set your path ..complete path like i did
            _ocr.SetVariable("tessedit_char_whitelist", "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopkrstuvwxyz");

        OpenFileDialog Openfile = new OpenFileDialog();
        if (Openfile.ShowDialog() == DialogResult.OK)
        {
            Image<Bgr, Byte> My_Image = new Image<Bgr, byte>(Openfile.FileName);
            pictureBox1.Image = My_Image.ToBitmap();
        }
    }

答案 1 :(得分:0)

我摆弄了一段时间同样的问题;现在我明白了。

首先,请确保您具有以下 using指令(您可能需要通过NuGet下载Emgu.CV):

using Emgu.CV;
using Emgu.CV.OCR;
using System.Reflection;
using System.IO;
using System.Drawing;

然后,确保您拥有最新的 tessdata 。如果不是,请导航至github并下载(单击“克隆或下载”,然后选择“下载ZIP文件”)。然后,应解压缩文件,并将文件夹“ tessdata-master”重命名为“ tessdata”。将此文件夹复制到二进制文件所在的位置(组装位置)。

最后,分配正确的路径,您就可以开始进行OCR了!

string path = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location) + "\\";  
var _ocr = new Tesseract(path, "eng", OcrEngineMode.Default);
_ocr.SetImage(yourImage);
_ocr.Recognize();
var result = _ocr.GetCharacters();