原理: 利用微软OCR控件, 只需要不到10行代码就能够实现自已的OCR文字识别软件.
1. 添加控件,需要安装office2003, 没有安装office2003的可以从别人机子上拷贝相关文件,注册regsvr32.exe mdivwctl.dll,
在运行中输入regsvr32.exe "C:\Program Files\Common Files\Microsoft Shared\MODI\11.0\mdivwctl.dll"
控件一般在这个目录下:C:\Program Files\Common Files\Microsoft Shared\MODI\11.0, 只需要相关的几个文件就可以了, 此文件夹全部文件大概在21M左右.
工程->部件->添加这个控件:Microsoft Office Document Imaging 11.0 Type Library
2.在按钮的Click事件里:
Dim strLayoutInfo As String, strLPN As String
'初始化并加载文档
Set miDoc = CreateObject("MODI.Document") '创建对象
miDoc.Create "D:\未命名.jpg" '加载图片文件
Screen.MousePointer = vbHourglass '设置光标忙
'识别
miDoc.Images(0).OCR miLANG_CHINESE_SIMPLIFIED, True, True '有用的就此一句,识别为中文简体
Set modiLayout = miDoc.Images(0).Layout '读出数据
strLayoutInfo = _
"Language: " & modiLayout.Language & vbCrLf & _
"Number of characters: " & modiLayout.NumChars & vbCrLf & _
"Number of fonts: " & modiLayout.NumFonts & vbCrLf & _
"Number of words: " & modiLayout.NumWords & vbCrLf & _
"Beginning of text: " & Left(modiLayout.Text, 50) & vbCrLf & _
"First word of text: " & modiLayout.Words(0).Text
MsgBox strLayoutInfo, vbInformation + vbOKOnly, "Layout Information"
Set modiLayout = Nothing
Set miDoc = Nothing
Screen.MousePointer = vbDefault
3. OK了, 是不是很简单!
--------------------------
以上代码用精简版vb6编译通过,但是是在完全安装office2003的前提下,单独用我的包注册,执行的时候,miDoc.Create "D:\未命名.jpg" '加载图片文件 这步有问题,
在易语言下不能注册该支持库,应该是兼容性问题!
该ocr识别效果很好,望高手给看看,如何在易中挂接,改进下图片对齐,做个车牌识别也可以!
最近在开发 Delphi 7中需要使用Office 2003的OCR识别组件。 总结工作中发现的问题
一、 服务中创建MODI.Document,报未注册 EOleException。
其实核心MDIVWCTL.DLL已reg,同样的主exe中核心代码运行没问题, 原因在于 原来exe程序中主窗体上丢了一个 TMiDocView可视OLE控件。
尝试以下方法:
1. TService声明Private MiDoc:TMiDocView对象, Create时创建该对象
2. 纯接口方式 CoDocument.Create; IDocument.Create('文件名')
3. CreateOLEOBject('MODI.DOcument') 动态创建comserver as IDocument
4. way1 中指定 MiDoc.FileName, MiDoc.Document as IDocument
组合以上均未能解决问题
5. IDocument.Create时try 保护 except中再次 create;
偶尔能调过该问题,Create成功, 但是运行多次后 exception明显变多
此问题在网上搜索多日,碰到很多同样的案例,均没发现解决方法。
二、 核心的dll
C:\Program Files\Common Files\Microsoft Shared\MODI\11.0 下
MDIVWCTL.dll (核心COM)
MSPGIMME.dll
三、 文件锁定问题
IDocument.Create('c:\aa.tif');
...
IDocument.Close; //运行完这行 文件还是一直被锁定,无法删除。
这个问题应该是能解决, 知道的朋友相烦告诉一下 :-)