C# 图片识别
项目需要识别图片上的信息,网上搜索试了Asprise-OCR、Microsoft Office Document Imaging(Office 2007) 组件实现两种方式,后者可以识别中文等其他语言。
一、Asprise-OCR实现:
需要引用破解版AspriseOCR.dll
代码如下:
class Program { [DllImport("AspriseOCR.dll", EntryPoint = "OCR", CallingConvention = CallingConvention.Cdecl)] public static extern IntPtr OCR(string file, int type); static void Main(string[] args) { var imgpath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, @"1111.jpg"); //AspriseOCR方法 var s = Marshal.PtrToStringAnsi(OCR(imgpath, -1)); var list = s.Split(new string[] { "\r\n" }, StringSplitOptions.None); } }
运行结果如下,对数字识别还是可以的。
注意,项目的目标平台要设置X86
二、Microsoft Office Document Imaging(Office 2007) 组件实现:
使用win 7 office 2007的时必须打上office 2007 sp1或者sp2补丁,读取中文才行(补丁地址自行百度搜索)。
打完补丁后添加引用,
需要在控制面板里添加安装才可以:
如何添加Microsoft Office Document Imaging
class Program { static void Main(string[] args) { var imgpath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, @"333333.png"); //MODI方法(Microsoft Office Document Imaging(Office 2007) 组件实现) StringBuilder sb = new StringBuilder(); MODI.Document doc = new MODI.Document(); doc.Create(imgpath); MODI.Image image; MODI.Layout layout; doc.OCR(SwitchLanuageType("2052"), true, true); for (int i = 0; i < doc.Images.Count; i++) { image = (MODI.Image)doc.Images[i]; layout = image.Layout; sb.Append(layout.Text); } var ss = sb.ToString(); } private static MODI.MiLANGUAGES SwitchLanuageType(string sValue) { switch (sValue) { case "2052"://简体中文 return MODI.MiLANGUAGES.miLANG_CHINESE_SIMPLIFIED; case "9"://英语 case "1028"://繁体中文 return MODI.MiLANGUAGES.miLANG_CHINESE_TRADITIONAL; default: return MODI.MiLANGUAGES.miLANG_ENGLISH; } } }
注意,项目的目标平台要设置X86
运行结果:
注:上面两个方法,图片清晰度不高得话,识别不了。