項目需要識別圖片上的信息,網上搜索試了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
運行結果:
注:上面兩個方法,圖片清晰度不高得話,識別不了。