我尝试使用OCR获取图像的一些文本。我必须为此初始化Tesseract,这是我的尝试:
Imports Emgu.CV
Imports Emgu.Util
Imports Emgu.CV.Structure
Imports Emgu.CV.OCR
Imports Emgu.CV.UI
Imports Emgu.CV.CvEnum
Public Class Form1
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Dim lolProcess() As Process = Process.GetProcessesByName("lolClient")
Dim snap As New CScreenFromWindow
Dim OCRz As Tesseract = New Tesseract("tessdata", "eng", Tesseract.OcrEngineMode.OEM_TESSERACT_ONLY)
OCRz.Recognize(New Image(Of Bgr, Byte)(snap.GetFromAll(lolProcess(0))))
MsgBox(OCRz.GetText())
End Sub
End Class
启动我的代码时出现以下错误: " System.TypeInitializationException" " Emgu.CV.OCR.Tesseract"引起异常
我搜索了很多,但无法找到我的错误。我从this link下载了EMGU并安装了.exe。然后我从bin目录中添加了每个.dll作为对我项目的引用。我还将所有opencv_XXXXX.dll文件添加到我的项目中。然后我还将tessdata目录添加到我的项目中。我已将所有添加的dll标记为"始终复制到输出目录"。
x86和x64有opencv_XXXXXX.dll文件。我试图将它们换成x64,但那些也没有用。
有人看到我的错吗?
这是错误消息和堆栈跟踪:
System.ArgumentException: Unable to create ocr model using Path tessdata and language eng.
bei Emgu.CV.OCR.Tesseract.Init(String dataPath, String language, OcrEngineMode mode) in c:\Emgu\emgucv-windows-universal-gpu 2.4.9.1847\Emgu.CV.OCR\Tesseract.cs:Zeile 226.
bei Emgu.CV.OCR.Tesseract..ctor(String dataPath, String language, OcrEngineMode mode) in c:\Emgu\emgucv-windows-universal-gpu 2.4.9.1847\Emgu.CV.OCR\Tesseract.cs:Zeile 118.
bei Dodgemaster.Form1.Button1_Click(Object sender, EventArgs e) in X:\Dokumente\Visual Studio 2013\Projects\Dodgemaster\Dodgemaster\Form1.vb:Zeile 16.
Hello World测试程序运行正常。所以引用可能不对,对吧?
答案 0 :(得分:0)
当您引用.dlls时,尝试将属性中的“复制到输出目录”值更改为“始终复制” 还可以尝试在3.5 .NET框架上运行它。
如果没有尝试,请执行以下操作: https://www.youtube.com/watch?v=RqvvXJXuRYY&list=UUxAnMtjN08ryThpgYTBmILg
非常有帮助的教程。
答案 1 :(得分:0)
经过几次不同的emgu-installs的重新安装后,我终于找到了一个,这是有效的。它是旧版本,而不是当前版本,但它适用于x64。考虑到每个文件/ dll都需要x64并且像视频一样正常工作,我终于得到了它的工作。 似乎是x86 / x64问题。
答案 2 :(得分:0)
您必须将DPath从“tessdata”更改为“”。
Dim OCRz As Tesseract = New Tesseract("", "eng", OcrEngineMode.TesseractOnly)
这就是我的工作方式。(libemgucv-windows-universal-cuda-3.0.0.2158)