项目需要识别图片上的信息,网上搜索试了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, -));
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(""), true, true);
for (int i = ; 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 ""://简体中文
return MODI.MiLANGUAGES.miLANG_CHINESE_SIMPLIFIED;
case ""://英语
case ""://繁体中文
return MODI.MiLANGUAGES.miLANG_CHINESE_TRADITIONAL;
default:
return MODI.MiLANGUAGES.miLANG_ENGLISH;
}
}
}
注意,项目的目标平台要设置X86
运行结果:
注:上面两个方法,图片清晰度不高得话,识别不了。