版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/flyking2/article/details/82923059
光学识别文件列表
1.Tesseract.dll
2.
tessdata文件夹里是字库文件,x64与x86里为两个动态连接库
这几个文件夹一定要与你的EXE文件放在一起,添加引用Tesseract.dll,就能使用了
看下面的实例代码:
/// <summary>
/// 读取数字
/// </summary>
/// <param name="Handle"></param>
/// <param name="rect"></param>
/// <returns></returns>
public static int readNum(Handle,Rectangle rect)
{
string s = string.Empty;
//这是自己写的一个截窗口图的函数,需为PixelFormat.Format32bppArgb的图
Bitmap b = MapColor.Getmap(Handle, rect, true);
//这里可以添加Bitmap b的图像除里函数,使图像更容易识别
//这里自己写的一个图像放大的函数,如果识别不准确的话,可以尝一下放大图像
//Bitmap d= MyBitmap.KiResizeImage(b, b.Width * 2, b.Height * 2);
try
{
//这里我们加载英文字库,来识别数字
Tesseract.TesseractEngine ocr = new Tesseract.TesseractEngine(Application.StartupPath + @"\tessdata", "eng");
//这里我们设置识别的范围,识别从0-9的数字(如果要识别英文和数字,这句可省略)
//若只需识别 A,a,C,D,也可以用此句设置“AaCD”
//若这句省略,也就是找所有的字母和数字,当然查找范围越大,识别准确率也越低
//我常设置这句以提高识别准确性
ocr.SetVariable("tessedit_char_whitelist", "1234567890");
//从Bitmap b里来识别获取的字符串
s = ocr.Process(b).GetText();
s.Trim();
ocr.Dispose();
b.Dispose();
}
catch{}
return int.Parse( s);
}
/// <summary>
/// 读取中文
/// </summary>
/// <param name="Handle"></param>
/// <param name="rect"></param>
/// <param name="search">识别的中文范围</param>
/// <param name="n">放大倍数,默认为2</param>
/// <returns></returns>
public static string Readwords(Handle, Rectangle rect,string search="",int n=2)
{
string str="";
try
{
Bitmap b = MapColor.Getmap(Handle, rect, true);
b.MakeTransparent();//设置透明,转化为PixelFormat.Format32bppArgb
//为提高识别准确性,也可进行图象的二值化处理
//这里第二个参数为简体字库文件,具体可查看tessdata文件夹下的字库
Tesseract.TesseractEngine ocr = new Tesseract.TesseractEngine(Application.StartupPath + @"\tessdata", "chi_sim");
if (search != "")
ocr.SetVariable("tessedit_char_whitelist", search);
if (n > 1)
{
Bitmap d = MyBitmap.KiResizeImage(b, b.Width * n, b.Height * n);//放大2倍
str = ocr.Process(d).GetText();
ocr.Dispose();
b.Dispose();
d.Dispose();
}
else
{
str = ocr.Process(b).GetText();
ocr.Dispose();
b.Dispose();
}
return str;
}
catch(Exception ex)
{
MessageBox.Show("Readwords读取错误"+ex);
}
return str;
}
注意代码里的注释,不能识别PixelFormat.Format24bpp的图,所以设置一下透明度或其它方式转成32bpp的才行
相关文件可在下载资源里找或者GitHub上,我已经打好包了,有兴趣的朋友可以研究一下,这个是Tesseract.dll 3.0版的,