【问题标题】:Exception initializing Emgu.CV初始化 Emgu.CV 的异常
【发布时间】:2012-11-16 13:20:23
【问题描述】:

嘿,这是我第一次使用这个网站,但我遇到了问题。我看到了这个关于让 ocr 与 vb.net 一起工作的很棒的 youtube 视频。这里是网址:

http://www.youtube.com/watch?v=Kjdu8SjEtG0

所以我决定下载 emgu 库,这里是 url:

http://sourceforge.net/projects/emgucv/

我做了视频所说的一切,但我收到了这个错误:“创建表单时发生错误。有关详细信息,请参阅 Exception.InnerException。错误是:'Emgu.CV.OCR.Tesseract' 的类型初始化程序引发了异常。”

我什至复制了异常(如果有帮助的话):

System.InvalidOperationException was unhandled
  Message=An error occurred creating the form. See Exception.InnerException for details.  The error is: The type initializer for 'Emgu.CV.OCR.Tesseract' threw an exception.
  Source=WindowsApplication1
  StackTrace:
       at WindowsApplication1.My.MyProject.MyForms.Create__Instance__[T](T Instance) in 17d14f5c-a337-4978-8281-53493378c1071.vb:line 190
       at WindowsApplication1.My.MyProject.MyForms.get_Form1()
       at WindowsApplication1.My.MyApplication.OnCreateMainForm() in C:\Users\UltimateSoul\AppData\Local\Temporary Projects\WindowsApplication1\My Project\Application.Designer.vb:line 35
       at Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.OnRun()
       at Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.DoApplicationModel()
       at Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.Run(String[] commandLine)
       at WindowsApplication1.My.MyApplication.Main(String[] Args) in 17d14f5c-a337-4978-8281-53493378c1071.vb:line 81
       at System.AppDomain._nExecuteAssembly(RuntimeAssembly assembly, String[] args)
       at System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)
       at Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
       at System.Threading.ThreadHelper.ThreadStart_Context(Object state)
       at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean ignoreSyncCtx)
       at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
       at System.Threading.ThreadHelper.ThreadStart()
  InnerException: System.TypeInitializationException
       Message=The type initializer for 'Emgu.CV.OCR.Tesseract' threw an exception.
       Source=Emgu.CV.OCR
       TypeName=Emgu.CV.OCR.Tesseract
       StackTrace:
            at Emgu.CV.OCR.Tesseract..ctor(String dataPath, String language, OcrEngineMode mode)
            at WindowsApplication1.Form1..ctor() in C:\Users\UltimateSoul\AppData\Local\Temporary Projects\WindowsApplication1\Form1.vb:line 8
       InnerException: System.TypeInitializationException
            Message=The type initializer for 'Emgu.CV.CvInvoke' threw an exception.
            Source=Emgu.CV
            TypeName=Emgu.CV.CvInvoke
            StackTrace:
                 at Emgu.CV.CvInvoke.CV_MAKETYPE(Int32 depth, Int32 cn)
                 at Emgu.CV.OCR.Tesseract..cctor()
            InnerException: System.DllNotFoundException
                 Message=Unable to load DLL 'opencv_core242': The specified module could not be found. (Exception from HRESULT: 0x8007007E)
                 Source=Emgu.CV
                 TypeName=""
                 StackTrace:
                      at Emgu.CV.CvInvoke.cvRedirectError(CvErrorCallback errorHandler, IntPtr userdata, IntPtr prevUserdata)
                      at Emgu.CV.CvInvoke..cctor()
                 InnerException: 

我在这上面已经好几天了,但没有找到任何地方。请帮忙谢谢!

对不起这里的代码

Imports Emgu.CV
Imports Emgu.Util
Imports Emgu.CV.OCR
Imports Emgu.CV.Structure

Public Class Form1

    Dim OCRz As Tesseract = New Tesseract("tessdata", "eng", Tesseract.OcrEngineMode.OEM_TESSERACT_ONLY)
    Dim pic As Bitmap = New Bitmap(270, 100)
    Dim gfx As Graphics = Graphics.FromImage(pic)

    Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick

        gfx.CopyFromScreen(New Point(Me.Location.X + PictureBox1.Location.X + 4, Me.Location.Y + PictureBox1.Location.Y + 30), New Point(0, 0), pic.Size)
        PictureBox1.Image = pic

    End Sub

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

        OCRz.Recognize(New Image(Of Bgr, Byte)(pic))
        RichTextBox1.Text = OCRz.GetText

    End Sub
End Class

【问题讨论】:

  • 您需要在初始化对象的位置发布代码。我们无法猜测您是如何做到这一点的。
  • youtube 'tutorials' 在大多数情况下并不是工作代码的真正好来源;)您最好从 emgu wiki 开始并使用那里提供的教程:emgu.com/wiki/index.php/Tutorial
  • 好吧,我去wiki看看,顺便说一下代码:
  • 好的,谢谢!,我检查了维基,但任何人都可以帮助我解决这个问题。我很感激。谢谢!
  • 你检查过emgu.com/wiki/index.php/…。 ?话题 1.4?

标签: vb.net ocr emgucv


【解决方案1】:

cvextern.dll 和带有opencv_**.dll 的文件复制到您的输出目录:bin/Debug/

将您的配置管理器设置为运行“AnyCPU”,并且配置必须“调试”。

【讨论】:

  • 请提供来源并解释您的解决方案。
【解决方案2】:

如果您使用的是 64 位操作系统,您还必须添加以引用以下文件(对于 EMGU CV 版本 >=2.4)

cudart64_42_9.dll, cvextern.dll, npp64_42_9.dll

这将有助于在 64 位操作系统中使用 emguCv 2.4.x,而不会出现内部异常。

【讨论】:

    【解决方案3】:

    在视频中复制的是 x64 目录。 而是在项目目录中复制 x86 目录 并在属性中选择所有的dll文件 启用“如果更新则复制”。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-31
      • 1970-01-01
      • 2012-09-07
      • 2012-07-27
      • 1970-01-01
      相关资源
      最近更新 更多