ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 66461|回复: 96

[原创] 在Excel中使用开源的Ocr引擎tesseract-ocr识别文字和验证码[20120718更新]

  [复制链接]

TA的精华主题

TA的得分主题

发表于 2012-7-8 17:34 | 显示全部楼层 |阅读模式
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
本帖已被收录到知识树中,索引项:图像处理和GDI
本帖最后由 hhmxxx 于 2012-7-18 20:51 编辑

惠普实验室曾经有一个Ocr引擎,支持中文的识别,这个库叫tesseract-ocr,最新版本是3.01,库的源码在这里下载:http://code.google.com/p/tesseract-ocr/downloads/list

我把这个库封装成了一个进程外Com服务器,可以在Excel或者Word或者IE或者其他支持Com技术的程序中调用(32位或者64位的Excel,Word都可以调用)。

首先下载我的封装库,安装MyOcrServer-v100.exe,

安装完成后可以这样在Excel中使用
    Dim FMyFuns As Object
    Dim MyStr As String
    Set FMyFuns = CreateObject("MyOcrServer.MyOcrServerCom")
    MyStr = FMyFuns.TsOcr("E:\test.jpg", "3","3","0","chi_sim")
    MsgBox MyStr
    Set FMyFuns = Nothing
参数说明:第一个为文件名
第二个为引擎模式EngineMode = (emTesseractOnly, emCubeOnly, emCombined, emDefault);第一个为0,依此类推
第三个为PageSegmentation = (psOSDOnly, psAutoOSD, psAutoOnly, psAuto, psSingleColumn, psSingleVerticalBlock, psSingleBlock, psSingleLine, psSingleWord, psCircleWord, psSingleChar);
第四个为PixelFormat = (piAuto, pi8bit, pi24bit, pi32bit);
第五个为识别使用的语言模块,比如英文"eng",中文"chi_sim"
有兴趣的可以去试试。

封装库下载地址(谢谢liucqa2测试和上传):MyOcrServer-v100.exe




评分

9

查看全部评分

TA的精华主题

TA的得分主题

发表于 2012-7-8 17:38 | 显示全部楼层
本帖最后由 liucqa 于 2017-10-20 21:22 编辑

MyOcrServer-20140115 v3.03-988
http://pan.baidu.com/s/1b8BHdc
Tesseract 3.03 revision 988 进程外com服务器

Ocr示例.rar (20.09 KB, 下载次数: 1657)
OCR调用示例
1、运行Ocr示例.xlsm,选择2990.jpg
2、弹出窗口为2990说明识别正确

××××××××××下面是以前上传的内容×××××××××××
替楼主上传。


1、安装MyOcrServer-v100
2、运行Ocr示例.xlsm,选择2990.jpg
3、弹出窗口为2990说明识别正确

函数的调用方法参见示例文件里面的代码。

如果要使用默认调用或者识别中文,请安装中文字库,下载地址:
http://code.google.com/p/tesseract-ocr/downloads/list       chi_sim.traineddata.gz

提取chi_sim.traineddata文件,放到C:\Program Files\MyOcrServer\tessdata目录下(默认安装目录)即可

注意待识别图片的质量影响识别结果,要求是白底黑字。
要进一步增加识别率,需要进行训练,具体在百度搜索训练方法
或参考http://my.oschina.net/lixinspace/blog/60124

exe是进程外com服务器,可以同时被32位和64位调用。进程内32位dll只能被32位调用。64位dll只能被64位调用
所以MyOcrServer.exe这个组件32位和64位excel都能用

安装包里面的文件在安装之后会自动注册,这里提供手工注册方法
MyOcrServer.exe /regserver
MyOcrServer.exe /unregserver

OCR.dll是开源引擎,更新到Tesseract 3.02 revision 731


××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××

进程内和进程外Com

COM/DCOM 组件可以在DLL 或EXE 文档中实现。

其中在 DLL 中实现的COM/DCOM组件称为 In-Process Server,因为这些组件是加载到使用它们的客户端应用程序执行程序内存之中。因此当应用程序调用COM/DCOM 组件的服务时,就和一般的程序或函数调用一样,非常快速。

在EXE 中实现的COM/DCOM组件是执行在它自己的执行程序之中,因此这种 COM/DCOM组件称为Out-Process Server。当
客户端应用程序调用在独立的执行程序中的 COM/DCOM 组件时必须穿越不同的执行程序,因为 Out-Process Server 在执行时会比In-Process Server 慢许多。

进程内和进程外最大的差别就是,前进需要宿主程序,或者说宿主程序是可变更的,而后者不需要另外的宿主程序,或者称宿主程序是固定的。

COM库通过注册表获得组件信息,如果是EXE,则以客户端的权限启动该EXE,如果是服务,则委托服务管理器启动服务。

进程外组件启动时会把所有类厂接口创建好并通过调用CoRegisterClassObject把这些接口进行全局登记,登记过后其他进程就能访问这些类厂接口,当服务器需要关闭时(服务器锁引用计数为0)再调用 CoRevokeClassObject 取消登记并退出进程(服务程序可能不退出)。

客户端请求类厂接口时,COM库首先查找全局登记表中是否已经存在该接口,不存在就创建EXE组件进程,如果存在,还要判断该组件是不是SINGLETON模式,如果不是,直接返回类厂接口,如果是,重新启动一个EXE组件进程。

实际情况比上面的描述更复杂,但是足以帮助你理解其启动原理。

未命名.jpg

tesseract Ocr COM加载宏 for Word.part03.rar

1.13 MB, 下载次数: 671

tesseract Ocr COM加载宏 for Word.part02.rar

1.13 MB, 下载次数: 648

tesseract Ocr COM加载宏 for Word.part01.rar

1.13 MB, 下载次数: 655

Tesseract 3.03 revision 919.rar

1.25 MB, 下载次数: 1449

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2012-7-8 17:49 | 显示全部楼层
http://blog.csdn.net/xiaochunyong/article/details/7193744


Tesseract-OCR引擎 入门
分类: 杂七杂八 2012-01-11 16:10 2176人阅读 评论(0) 收藏 举报

OCR(Optical Character Recognition):光学字符识别,是指对图片文件中的文字进行分析识别,获取的过程。

Tesseract:开源的OCR识别引擎,初期Tesseract引擎由HP实验室研发,后来贡献给了开源软件业,后经由Google进行改进,消除bug,优化,重新发布。当前版本为3.01.

项目地址为:http://code.google.com/p/tesseract-ocr


Windows 命令行使用Tesseract-OCR引擎识别验证码:

1、下载安装Tesseract-OCR引擎(3.0版本+才支持中文识别)

tesseract-ocr-setup-3.01-1.exe

下载完后进行安装,默认情况下安装程序会给你配置系统环境变量,以指向安装目录(之后可以通过DOS界面在任意目录运行tesseract)。安装完成后目录如下:

附录:

tessdata 目录存放的是语言字库文件,和在命令行界面中可能用到的参数所对应的文件.  这个安装程序默认包含了英文字库。

如果想能识别中文,可以到http://code.google.com/p/tesseract-ocr/downloads/list下载对应的语言的字库文件.

简体中文字库文件下载地址为:http://tesseract-ocr.googlecode.com/files/chi_sim.traineddata.gz 下载完成后解压,然后将该文件剪切到tessdata目录下去就可以了。


2、使用Tessract-OCR引擎识别验证码

打开DOS界面,输入tesseract:

如果出现如上输出,表示安装正常。
我准备了一张验证码code.jpg放在D盘根目录下,上图:


结果为:


附录:

Usage:tesseract imagename outputbase [-l lang] [-psm pagesegmode] [configfile...]
pagesegmode values are:
0 = Orientation and script detection (OSD) only.
1 = Automatic page segmentation with OSD.
2 = Automatic page segmentation, but no OSD, or OCR
3 = Fully automatic page segmentation, but no OSD. (Default)
4 = Assume a single column of text of variable sizes.
5 = Assume a single uniform block of vertically aligned text.
6 = Assume a single uniform block of text.
7 = Treat the image as a single text line.
8 = Treat the image as a single word.
9 = Treat the image as a single word in a circle.
10 = Treat the image as a single character.
-l lang and/or -psm pagesegmode must occur before anyconfigfile.


tesseract imagename outputbase [-l lang] [-psm pagesegmode] [configfile...]

tesseract    图片名  输出文件名 -l 字库文件 -psd pagesegmode 配置文件

例如:

tesseract code.jpg result  -l chi_sim -psd 7 nobatch

-l chi_sim 表示用简体中文字库(需要下载中文字库文件,解压后,存放到tessdata目录下去,字库文件扩展名为  .raineddata 简体中文字库文件名为:  chi_sim.traineddata)

-psd 7 表示告诉tesseract code.jpg图片是一行文本  这个参数可以减少识别错误率.  默认为 3

configfile 参数值为tessdata\configs 和  tessdata\tessconfigs 目录下的文件名

TA的精华主题

TA的得分主题

发表于 2012-7-8 17:51 | 显示全部楼层
本帖最后由 liucqa 于 2012-7-8 20:03 编辑

http://sheng.iteye.com/blog/1330063

用VB调用Office OCR组件实现图文识别

    博客分类:
    技术文章(未分类)
    技术文章(.NET)
    技术文章(Delphi)
    技术文章(PowerBuilder)

Office OCR 图文识别 Microsoft Office Document Imaging

Option Explicit
'利用MS Office 2003/2007的OCR控件, 对图片进行OCR识别
'在VB中,只需要不到10行代码就能够实现自已的OCR文字识别软件.
'1. 添加控件,需要安装office2003, 没有安装office2003的可以从别人机子上拷贝相关文件,注册regsvr32.exe mdivwctl.dll,
'控件一般在这个目录下:C:\Program Files\Common Files\Microsoft Shared\MODI.0, 只需要相关的几个文件就可以了, 此文件夹全部文件大概在21M左右.
'2.工程->部件->添加这个控件:Microsoft Office Document Imaging 11.0 Type Library
'3.需要注意的一点是,在Windows2003 Server上,如果用Office自带的识别软件,会报错:
'  "在一页或多页上执行 OCR 不成功(未找到文本)"的错误,但用VB写的测试程序识别是正常的。

'OCR的主要功能
Private Function OCRImageFile(ByVal strImageFileName As String) As Boolean
    Dim miDoc As Object
     '初始化并加载文档
    Set miDoc = CreateObject("MODI.Document")           '创建对象
    miDoc.Create(strImageFileName)                      '加载图片文件
    Screen.MousePointer = vbHourglass                   '设置沙漏光标
    '识别
    Err.Clear
    miDoc.Images(0).OCR 2052, True, True
    Text1.Text = miDoc.Images(0).Layout.Text
    OCRImageFile = True
    Screen.MousePointer = vbArrow                       '恢复箭头光标
End Function

Private Sub cmdOCR_Click()
    Dim bolP As Boolean
    Dim strFileName as String
    strFileName = "c:\test.tif"
    bolP = OCRImageFile(strFileName)
End Sub

TA的精华主题

TA的得分主题

 楼主| 发表于 2012-7-8 17:59 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2012-7-8 18:35 | 显示全部楼层
本帖最后由 liucqa 于 2012-7-8 18:53 编辑

http://grunt1223.iteye.com/blog/904313

http://www.cnblogs.com/zcsor/archive/2011/02/21/1959555.html

TA的精华主题

TA的得分主题

发表于 2012-7-8 21:13 | 显示全部楼层
http://hooopo.iteye.com/blog/993538
用imagemagick和tesseract-ocr破解简单验证码

TA的精华主题

TA的得分主题

发表于 2012-7-8 21:55 | 显示全部楼层
楼主作品

Img2PDF xll加载宏.rar (478.18 KB, 下载次数: 498)

图片转PDF
文件夹转PDF

xll加载宏

文件解压缩之后,放在同一目录下运行Img2PDF.xls文件,自动加载Img2Pdf.xll加载宏

代码请自行改写(图片和pdf的文件路径及文件名)

输出0,路径错误;输出1正常。

TA的精华主题

TA的得分主题

发表于 2012-7-8 22:11 | 显示全部楼层
楼主作品

MagXllLib圆形屏幕放大镜.rar (474.12 KB, 下载次数: 357)

xll加载宏

TA的精华主题

TA的得分主题

发表于 2012-7-8 22:15 | 显示全部楼层
本帖最后由 liucqa 于 2012-7-8 22:15 编辑

楼主作品

谷歌多国文字互译
MyTransLib谷歌多国文字互译.rar (50.92 KB, 下载次数: 288)

xll加载宏
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-12-27 14:51 , Processed in 0.045825 second(s), 11 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表