学习图像处理知识---Emgu3.4 OCR类库学习--Tesseract 类
Emgu.CV.OCR Namespace中。
光学字符识别。包装tesseract-ocr引擎。
Tesseract 类。
构造函数:
public Tesseract() //创建一个默认的tesseract引擎。需要调用Init函数来在以后的阶段加载语言文件。
public Tesseract(
string dataPath, //datapath必须是tessdata主目录的名称,必须以/。结束。最后一个/将被剥离。
string language,//语言是(通常)一个ISO 639-3字符串或NULL将默认为eng。它是完全安全的(并且最终也会是有效的)在同一个实例上调用Init多次来改变语言,或者只是重新设置分类器。该语言可能是一串形式的%lt;lang+lang,表示将加载多种语言。他将加载印地语和英语。语言可以在内部指定他们想要加载一个或多个其他语言,所以这个符号可以覆盖它。如果hin在默认情况下被设置为加载,那么hin+eng只会强制加载hin。加载的语言的数量只受内存的限制,需要注意的是,加载额外的语言将会影响速度和准确性,因为有更多的工作要做决定使用的语言,并且有更多的机会产生不正确的单词。 OcrEngineMode mode//OCR引擎模式 )
public Tesseract( string dataPath,
string language, OcrEngineMode mode, string whiteList )
基本属性:
public OcrEngineMode Oem { get; }获得OCR引擎模式,只读模式,由构造函数生成对象时指定或由Initialize函数指定。
public PageSegMode PageSegMode { get; set; }页面分割模式,可以设定。
public IntPtr Ptr { get; }//只读模式,指针。
public static Version Version { get; }//获得OCR引擎的版本
public static string VersionString { get; }//获得OCR引擎的版本,string。
在应用之前先了解Tesseract.Character[] 这代表了一个由OCR引擎检测到的字符的结构体
3个变量
public float Cost识别所消耗的精力,越低越简单,识别率高,相当检测时间和难度。
public Rectangle Region 文字检测的区域。
public string Text 识别出来的文字。
要实现OCR功能必须有一个库---学习data来确认,可以在网上下载得到,安装完成后把testdata文件夹拷到自己的开发的目录下。
下面演示下实际应用测试。
string path = Application.StartupPath + "\\tessdata"; //下载识别文件夹
string language = "eng";//识别语言
Tesseract ocr = new Tesseract(path, language,Emgu.CV.OCR.OcrEngineMode.Default);//生成OCR对象。
Emgu.CV.Image<Gray, byte> GAY1 = new Image<Gray, byte>((Bitmap)pictureBox3.Image);//原图一定为灰阶图片
ocr.SetImage(GAY1);//放进图像到OCR对象中
int A_LENG = 2;
A_LENG= ocr.Recognize();//进行识别图像
if(A_LENG==0) //判断是否成功,应为返回为0时才是成功,因此开始定义初始化为其他值(非零)。
{
MessageBox.Show("ok");
Tesseract.Character[] tet = ocr.GetCharacters();//得到
string tex1 = ocr.GetUTF8Text();//得到文字
textBox1.Text = tex1;//显示文字
foreach (var a4 in tet)
{
GAY1.Draw(a4.Region, new Gray(180), 2);
pictureBox5.Image = GAY1.ToBitmap();
}
else
{
MessageBox.Show("NG");
}