嘿,这是我第一次使用这个网站,但我有一个问题。我看到了这个很棒的youtube视频,关于让ocr与vb.net一起工作。这里是网址:
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
答案 0 :(得分:1)
将cvextern.dll
和opencv_**.dll
文件复制到您的输出目录:bin/Debug/
将配置管理器设置为运行“AnyCPU”,配置必须为“Debug”。
答案 1 :(得分:1)
如果您使用的是64位操作系统,则必须添加以引用以下文件(对于EMGU CV版本> = 2.4)
cudart64_42_9.dll, cvextern.dll, npp64_42_9.dll
这将有助于在没有内部异常的情况下在64位操作系统中使用emguCv 2.4.x.
答案 2 :(得分:0)
在视频中,它是x64目录被复制。 而是在项目目录中复制x86目录 并在属性中选择所有dll文件 启用“如果更新则复制”。