C#使用EmguCV的OCR时,调用Tesseract时报AccessViolationException
private void button3_Click(object sender, EventArgs e)
{
string path = Application.StartupPath + "\\tessdata/";//申明数据源的路径,在运行目录的tessdata 文件夹下。
string language = "";//申明选择语言。
//*判断选择的语言*//
if (checkBox1.Checked && checkBox2.Checked)//checkBox1为识别英文。
{
language = "chi_sim+eng";
}
else
{
if (checkBox2.Checked)
{
language = "chi_sim";
}
else
{
language = "eng";
checkBox1.Checked = true;
}
}
_ocr = new Tesseract(path, language,OcrEngineMode.Default);
//指定参数实例化tessdata 类。
_ocr.Recognize();
//识别图像。
Tesseract.Character[] characters =_ocr.GetCharacters();//这句报错“System.AccessViolationException”类型的未经处理的异常在 Emgu.CV.World.dll 中发生 。其他信息: 尝试读取或写入受保护的内存。这通常指示其他内存已损坏。
//获取识别数据
Bgr drawColor = new Bgr(Color.Blue);
//创建Bgr 为蓝色。
foreach (Tesseract.Character c in characters)//遍历每个识别数据。
{
image.Draw(c.Region, drawColor, 1);//绘制检测到的区域。
}
imageBox1.Image = image;//显示绘制矩形区域的图像
String text = _ocr.GetUTF8Text();//得到识别字符串。
richTextBox1.Text = text;//显示获取的字符串。
//MessageBox.Show(ex.Message);
// MessageBox.Show("检查运行目录是否有语言包");
}
}