关于office2003的OCR中文识别的使用问题

zhaoyanggolden 2008-05-20 02:16:34
小弟是新人,最近尝试用MFC实现OCR的识别,采用的是office2003的MODI类型库,平台VC6.0。借鉴了Code project上一篇文章的例子
地址如下:http://www.codeproject.com/KB/recipes/OCRwithMODI.aspx
可是现在出问题了,就是直接在应用程序中可以识别的中文文字内容的图片,在工程编译后却无法辨识,有时返回一堆空格,有时函数直接报错,求解!!
PS:我已经将运行函数修改:
hr = IDobj->OCR(miLANG_SYSDEFAULT,1,1);
改为:
hr = IDobj->OCR(miLANG_CHINESE_SIMPLIFIED,1,1);
在document imaging软件里也修改了相应设置,office2003完全安装,可还是不行,求解
...全文
4121 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
Judon 2010-12-14
  • 打赏
  • 举报
回复
请问下,为什么miLANG_CHINESE_SIMPLIFIED 语言时,就会报错呢?用英文的就没问题。。。
CodeCaptain 2008-08-26
  • 打赏
  • 举报
回复
用VC6.0打开你在codeproject中下载的那个工程文件,然后在工程中Project->Add to project->Component and controls,打开Registered ActiveX Controls找到Microsoft Office Document Imaging Viewer Control 11.0,双击添加,会自动添加相关.h和.cpp文件,其中包括mdivwctl.h和mdivwctl.cpp,最后使用bReadOCRByMODIAxctrl函数。
如果你是识别简体中文就将OCR函数的第一个参数设置为miLANG_CHINESE_SIMPLIFIED,如果为英文就设置为miLANG_ENGLISH。这样在做OCR识别就正常了。
zhaoyanggolden 2008-05-26
  • 打赏
  • 举报
回复
没人回答吗?自己顶一下
iu_81 2008-05-24
  • 打赏
  • 举报
回复
174/////////////////////////////////////////////////////////////////////////////
175// IDocument wrapper class
176
177class IDocument : public COleDispatchDriver
178{
179public:
180 IDocument() {} // Calls COleDispatchDriver default constructor
181 IDocument(LPDISPATCH pDispatch) : COleDispatchDriver(pDispatch) {}
182 IDocument(const IDocument& dispatchSrc) : COleDispatchDriver(dispatchSrc) {}
183
184// Attributes
185public:
186
187// Operations
188public:
189 void Save(); //保存文挡
190 void Close(BOOL SaveChanges); //关闭文挡
191 void SaveAs(LPCTSTR FileName, long FileFormat, long CompLevel);//以指定文件名,图片格式,压缩程度来保存文挡
192 LPDISPATCH GetImages(); //获取文挡页面收集
193 LPDISPATCH GetBuiltInDocumentProperties();//获取Office 文挡属性
194 LPDISPATCH GetCustomDocumentProperties();//获取Office 文挡属性
195 void Create(LPCTSTR FileOpen); //创建新的文挡
196 BOOL GetDirty(); //获得一个值,看是否不保存所修改过的文挡
197 void OCR(long LangId, BOOL OCROrientImage, BOOL OCRStraightenImage);//对整个文挡执行OCR
198 void PrintOut(long From, long To, long Copies, LPCTSTR PrinterName, LPCTSTR PrintToFileName, BOOL PrintAnnotation, long FitMode);//打印文挡到打印机或者文件
199};
200/////////////////////////////////////////////////////////////////////////////
201// _IDocumentEvents wrapper class
202
203class _IDocumentEvents : public COleDispatchDriver
204{
205public:
206 _IDocumentEvents() {} // Calls COleDispatchDriver default constructor
207 _IDocumentEvents(LPDISPATCH pDispatch) : COleDispatchDriver(pDispatch) {}
208 _IDocumentEvents(const _IDocumentEvents& dispatchSrc) : COleDispatchDriver(dispatchSrc) {}
209
210// Attributes
211public:
212
213// Operations
214public:
215 // method 'OnOCRProgress' not emitted because of invalid return type or parameter type
216};
217/////////////////////////////////////////////////////////////////////////////
218// _IImageEvents wrapper class
219
220class _IImageEvents : public COleDispatchDriver
221{
222public:
223 _IImageEvents() {} // Calls COleDispatchDriver default constructor
224 _IImageEvents(LPDISPATCH pDispatch) : COleDispatchDriver(pDispatch) {}
225 _IImageEvents(const _IImageEvents& dispatchSrc) : COleDispatchDriver(dispatchSrc) {}
226
227// Attributes
228public:
229
230// Operations
231public:
232};
233/////////////////////////////////////////////////////////////////////////////
234// IMiSelectRect wrapper class
iu_81 2008-05-24
  • 打赏
  • 举报
回复
还需要导入Office2003的Dispatch接口包装类
mdivwctl.h
1// Machine generated IDispatch wrapper class(es) created with ClassWizard
2/////////////////////////////////////////////////////////////////////////////
3// IMiFont wrapper class
4
5class IMiFont : public COleDispatchDriver
6{
7public:
8 IMiFont() {} // Calls COleDispatchDriver default constructor
9 IMiFont(LPDISPATCH pDispatch) : COleDispatchDriver(pDispatch) {}
10 IMiFont(const IMiFont& dispatchSrc) : COleDispatchDriver(dispatchSrc) {}
11
12// Attributes
13public:
14
15// Operations
16public:
17 long GetFamily();
18 long GetFaceStyle();
19 long GetSerifStyle();
20 short GetFontSize();
21};
22/////////////////////////////////////////////////////////////////////////////
23// IMiRect wrapper class
24
25class IMiRect : public COleDispatchDriver
26{
27public:
28 IMiRect() {} // Calls COleDispatchDriver default constructor
29 IMiRect(LPDISPATCH pDispatch) : COleDispatchDriver(pDispatch) {}
30 IMiRect(const IMiRect& dispatchSrc) : COleDispatchDriver(dispatchSrc) {}
31
32// Attributes
33public:
34
35// Operations
36public:
37 long GetTop();
38 long GetLeft();
39 long GetRight();
40 long GetBottom();
41};
42/////////////////////////////////////////////////////////////////////////////
43// IMiRects wrapper class
44
45class IMiRects : public COleDispatchDriver
46{
47public:
48 IMiRects() {} // Calls COleDispatchDriver default constructor
49 IMiRects(LPDISPATCH pDispatch) : COleDispatchDriver(pDispatch) {}
50 IMiRects(const IMiRects& dispatchSrc) : COleDispatchDriver(dispatchSrc) {}
51
52// Attributes
53public:
54
55// Operations
56public:
57 long GetCount();
58 LPUNKNOWN Get_NewEnum();
59 LPDISPATCH GetItem(long Index);
60};
61/////////////////////////////////////////////////////////////////////////////
62// IWord wrapper class
63
64class IWord : public COleDispatchDriver
65{
66public:
67 IWord() {} // Calls COleDispatchDriver default constructor
68 IWord(LPDISPATCH pDispatch) : COleDispatchDriver(pDispatch) {}
69 IWord(const IWord& dispatchSrc) : COleDispatchDriver(dispatchSrc) {}
70
71// Attributes
72public:
73
74// Operations
75public:
76 short GetRecognitionConfidence();
77 long GetFontId();
78 long GetLineId();
79 long GetRegionId();
80 CString GetText();
81 LPDISPATCH GetFont();
82 long GetId();
83 LPDISPATCH GetRects();
84};
85/////////////////////////////////////////////////////////////////////////////
86// IWords wrapper class
87
88class IWords : public COleDispatchDriver
89{
90public:
91 IWords() {} // Calls COleDispatchDriver default constructor
92 IWords(LPDISPATCH pDispatch) : COleDispatchDriver(pDispatch) {}
93 IWords(const IWords& dispatchSrc) : COleDispatchDriver(dispatchSrc) {}
94
95// Attributes
96public:
97
98// Operations
99public:
100 long GetCount();
101 LPUNKNOWN Get_NewEnum();
102 LPDISPATCH GetItem(long Index);
103};
104/////////////////////////////////////////////////////////////////////////////
105// ILayout wrapper class
106
107class ILayout : public COleDispatchDriver
108{
109public:
110 ILayout() {} // Calls COleDispatchDriver default constructor
111 ILayout(LPDISPATCH pDispatch) : COleDispatchDriver(pDispatch) {}
112 ILayout(const ILayout& dispatchSrc) : COleDispatchDriver(dispatchSrc) {}
113
114// Attributes
115public:
116
117// Operations
118public:
119 long GetLanguage();//获得OCR处理时的使用的语言设置
120 long GetNumChars();//获得已经辨认文本的字符数目
121 long GetNumWords();
122 long GetNumFonts();//获得字体
123 CString GetText();//以单CString方式获得辨认文本
124 LPDISPATCH GetWords();
125};
126/////////////////////////////////////////////////////////////////////////////
127// IImage wrapper class
128
129class IImage : public COleDispatchDriver
130{
131public:
132 IImage() {} // Calls COleDispatchDriver default constructor
133 IImage(LPDISPATCH pDispatch) : COleDispatchDriver(pDispatch) {}
134 IImage(const IImage& dispatchSrc) : COleDispatchDriver(dispatchSrc) {}
135
136// Attributes
137public:
138
139// Operations
140public:
141 LPDISPATCH GetLayout(); //获得OCR页面结果
142 long GetPixelWidth(); //获取像素的宽
143 long GetPixelHeight(); //获取像素的高
144 long GetXdpi(); //获取每英寸X轴像素
145 long GetYdpi(); //获取每英寸Y轴像素
146 long GetBitsPerPixel(); //获取每像素的位数
147 LPDISPATCH GetThumbnail(long ThumbSize);//返回IPictureDisp,获取图象指图
148 LPDISPATCH GetPicture();//获取图象返回IPictureDisp
149 long GetCompression(); //获取图片压缩程度
150 void OCR(long LangId, BOOL OCROrientImage, BOOL OCRStraightenImage);//对页面执行OCR
151 void Rotate(long Angle);//转动页面增加90度
152};
153/////////////////////////////////////////////////////////////////////////////
154// IImages wrapper class
155
156class IImages : public COleDispatchDriver
157{
158public:
159 IImages() {} // Calls COleDispatchDriver default constructor
160 IImages(LPDISPATCH pDispatch) : COleDispatchDriver(pDispatch) {}
161 IImages(const IImages& dispatchSrc) : COleDispatchDriver(dispatchSrc) {}
162
163// Attributes
164public:
165
166// Operations
167public:
168 long GetCount();
169 void Add(LPDISPATCH Page, LPDISPATCH BeforePage);
170 LPUNKNOWN Get_NewEnum();
171 LPDISPATCH GetItem(long Index);
172 void Remove(LPDISPATCH Page);
173};

zhaoyanggolden 2008-05-24
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 ugg 的回复:]
函数什么错误
[/Quote]
具体的错误是bReadOCRByMODIAxctrl函数每次运行到这一步:
hr = IDobj->OCR(miLANG_CHINESE_SIMPLIFIED,1,1);
时返回值都为一个极大的负数,源代码见顶楼的连接,而使用bReadOCRByMODI方法的时候IDobj->create行就直接返回负值,原因不明
zhaoyanggolden 2008-05-24
  • 打赏
  • 举报
回复
感谢LS,请问如何导入这个头文件?它似乎不是标准类型库里的
我试着新建了一个头文件mdivwctl.h,把你给的代码加进去,在cpp文件中包含,结果编译显示出错
逸学堂 2008-05-23
  • 打赏
  • 举报
回复
函数什么错误

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧