要搞定的事情
1.搞定MODI组件所需文件
2.完成与MODI的COM组件相关的注册表项安装(添加)
3.完成与Office相关的注册表项安装(添加)
1. MODI文件
层次
文件名
说明
接口层
MODI
MDIVWCTL.DLL
Microsoft Office Document Imaging Viewer Control
MSPCORE.DLL
Microsoft® Office Document Imaging Object Library
MSPGIMME.DLL
Microsoft® Gimme library
OFFICE12\MSO.DLL
2007 Microsoft Office component
数据层
英语
LATIN1.SHP
西欧11国(含英文)通用特征库
CharSetTable.chr
字符编码转换表,文本文件
ENGLISH.LNG
英文语言文件
简体中文
ENGDIC.DAT
清华文通的英文字典文件,貌似它也支持中、英文
ENGIDX.DAT
清华文通的英文索引
JFONT.DAT
Simplified Chinese code Conversion
LOOKUP.DAT
OCRHC.DAT
OCRVC.DAT
TWGB32.DLL
SCCODE.UNI
SCPRINT.DAT
SCPRINT2.DAT
2与MODI的COM组件相关的注册表项安装(添加)
COM相关就是与MODI的COM组件相关的注册表项,这个直接用regsvr32导入即可:启动命令行,进入MODI安装文件夹,执行下面的命令:
regsvr32 MDIVWCTL.DLL
regsvr32 MSPCORE.DLL即可完成MODI COM组件的注册。
3与Office相关的注册表项安装(添加)
[HKEY_CLASSES_ROOT\Installer\Components\61BA386016BD0C340BBEAC273D84FD5F]
"2052"=hex(7):76,00,55,00,70,00,41,00,56,00,53,00,2e,00,7d,00,58,00,25,00,21,\
00,21,00,21,00,21,00,21,00,4d,00,4b,00,4b,00,53,00,6b,00,4f,00,43,00,52,00,\
5f,00,32,00,30,00,35,00,32,00,3c,00,00,00,00,00
[HKEY_CLASSES_ROOT\Installer\Features\00002109F10040800000000000F01FEC]
"OCR_2052"=""
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\UserData\S-1-5-18\Products\00002109F10040800000000000F01FEC\Features]
"OCR_2052"="%mEMae,7q9*DXdU@EPi="
[HKEY_CLASSES_ROOT\Installer\Products\00002109710000000000000000F01FEC]
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\UserData\S-1-5-18\Components\3F745FF6A76FF2F4797DB74FC7B3FD8B]
"00002109710000000000000000F01FEC"="C:\\Program Files\\Common Files\\Microsoft Shared\\MODI\\12.0\\XPAGE3C.DLL"
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\UserData\S-1-5-18\Components\4080B9FA1A0BBF34FB7813E87159FC64]
"00002109F10040800000000000F01FEC"="C:\\Program Files\\Common Files\\Microsoft Shared\\MODI\\12.0\\SCCODE.UNI"
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\UserData\S-1-5-18\Components\48AD0082D02B3D24C9A56FA50728CCAB]
"00002109710000000000000000F01FEC"="C:\\Program Files\\Common Files\\Microsoft Shared\\MODI\\12.0\\MSPCORE.DLL"
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\UserData\S-1-5-18\Components\D94C8360B8BB1DC41B1950E0F8237563]
"00002109710000000000000000F01FEC"="C:\\Program Files\\Common Files\\Microsoft Shared\\OFFICE12\\MSO.DLL"
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\UserData\S-1-5-18\Products\00002109710000000000000000F01FEC\InstallProperties]
"WindowsInstaller"=dword:00000001
下面是自己用C#调用MODI及使用人工神经网络算法AspriseOCR写的OCR程序
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO;
using System.Runtime.InteropServices;
namespace ToText
{
public partial class Form2 : Form
{
public Form2()
{
InitializeComponent();
}
#region DllImport
[DllImport("OCR", CallingConvention = CallingConvention.Cdecl)]
public static extern IntPtr OCR(string file, int type);
[DllImport("AspriseOCR.dll", EntryPoint ="OCRpart", CallingConvention = CallingConvention.Cdecl)]
static extern IntPtr OCRpart(string file,int type, int startX,int startY, int width,int height);
[DllImport("AspriseOCR.dll", EntryPoint ="OCRBarCodes", CallingConvention = CallingConvention.Cdecl)]
static extern IntPtr OCRBarCodes(string file,int type);
[DllImport("AspriseOCR.dll", EntryPoint ="OCRpartBarCodes", CallingConvention = CallingConvention.Cdecl)]
static extern IntPtr OCRpartBarCodes(string file,int type, int startX,int startY, int width,int height);
#endregion
//点击“转换”事件
private void button1_Click(object sender, EventArgs e)
{
//txt_result.Text = "";
StringBuilder sb =new StringBuilder();
string img_Path = txt_imgpath.Text.Trim(); //图片地址
if (String.IsNullOrEmpty(img_Path))
{
MessageBox.Show("请先输入图片地址!");
return;
}
//office MODI
if (string.Compare(this.cmb_toolstype.SelectedValue.ToString(),"2007") == 0)
{
try
{
MODI.Document doc =new MODI.Document();
doc.Create(img_Path); //open
MODI.Image image;
MODI.Layout layout;
doc.OCR(GetLanuageType(cmb_languagetype.SelectedValue.ToString()),true, true); //识别文字类型
for (int i = 0; i < doc.Images.Count; i++)
{
image = (MODI.Image)doc.Images[i];
layout = image.Layout;
sb.Append(layout.Text);
}
}
catch (Exception ex)
{
txt_result.Text = "转换失败!详情:" + ex.Message;
}
txt_result.Text = sb.ToString();
}
//AspriseOCR人工神经网络算法
else if(string.Compare(this.cmb_toolstype.SelectedValue.ToString(),"8") == 0)
{
int startX = 0;
int startY = 0;
int width = -1;
int height = -1;
try
{
Image img =Image.FromFile(img_Path);
width = img.Width;
height = img.Height;
}
catch (Exception ex)
{
MessageBox.Show(ex.StackTrace);
}
txt_result.Text = Marshal.PtrToStringAnsi(OCRpart(img_Path, -1, startX, startY, width, height));
}
}
//“浏览”事件
private void button2_Click_1(object sender, EventArgs e)
{
openFileDialog1.ShowDialog();
txt_imgpath.Text = openFileDialog1.FileName;
}
//窗体加载事件
private void Form2_Load(object sender, EventArgs e)
{
List list =new List();
ListItem item = new ListItem();
List list2 =new List();
ListItem item2 = new ListItem();
//数值对应 以MODI.MiLANGUAGES枚举类为准
list.Add(new ListItem("英语","9"));
list.Add(new ListItem("简体中文","2052"));
cmb_languagetype.DataSource = list;
cmb_languagetype.ValueMember = "_sValue";
cmb_languagetype.DisplayMember = "_sText";
list2.Add(new ListItem("MODI_OCR", "2007"));
list2.Add(new ListItem("Asprise_OCR", "8"));
cmb_toolstype.DataSource = list2;
cmb_toolstype.ValueMember = "_sValue";
cmb_toolstype.DisplayMember = "_sText";
}
private MODI.MiLANGUAGES GetLanuageType(string sValue) //判断语言类型
{
switch (sValue)
{
case "2052":
return MODI.MiLANGUAGES.miLANG_CHINESE_SIMPLIFIED;
case "9":
return MODI.MiLANGUAGES.miLANG_ENGLISH;
default:
return MODI.MiLANGUAGES.miLANG_ENGLISH;
}
}
private void txt_result_TextChanged(object sender,EventArgs e)
{
}
}
}
运行结果
解析原图(左上角部分)
原图18M无法上传