这玩意儿就只有一个Tesseract.dll 就算有其它的加上x64目录下的另外两个dll leptonica-1.80.0.dll  tesseract41.dll也不过几兆而已,但是 但是 但是 加上字库文件可就大了 几十兆 。也充分说明了这玩意儿跟我原先说的一样的主要在于字库的匹配。如果只识别数字英文这种 那你调用百度的库反而是个大包袱还必须联网,近期听到一段话 世界上本没有标准件 行业形成了也就有了标准件。资本主义国家形成了标准件 于是我们也就只有在别人的框框里钻来钻去 始终跳不出这个圈儿,如果你明白原理的话就知道其实是不需要标准件的,造轮子才有乐趣嘛,哇哈哈哈。

使用过程还是很简单的。首先使用nu-get安装Tesseract ,注意搜索的时候标题是tesseract 然后 作者是charles weld 版本是v4.1.1的那个 不要弄错了,我的项目.NetFramework框架是4.0 安装完成后会自动为我们添加tesseract的引用。然后网上随意抄一段函数,功能是给一个图片调用引擎识别图片里的文字:

 1 private List<string> GetProductNumberFromImage(string imagePath)
2 {
3 List<string> resultList = new List<string>();//chi_sim
4 //using (var ocr = new TesseractEngine(System.IO.Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "tessdata"), "normal", EngineMode.Default))
5 using (var ocr = new TesseractEngine(System.IO.Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "tessdata"), "eng", EngineMode.Default))
6 {
7 //ocr.SetVariable("tessedit_char_whitelist", "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz");//
8 var pix = PixConverter.ToPix(new Bitmap(imagePath));
9 using (var page = ocr.Process(pix))
10 {
11 string text = page.GetText();
12 if (!string.IsNullOrEmpty(text))
13 {
14 resultList.Add(text);
15
16 }
17 }
18 }
19 return resultList;
20 }

还是那句话 遇事先冷静想想为什么总是有好处的。demo运行不起的时候 仔细看代码tessdata的字符 噢 原来如此 尝试下吧,需要事先下载名为eng.traineddata的语言文件置于你编译好的执行文件目录下的tessdata目录,果然。

还可以使用此语句预定义识别内容

1 ocr.SetVariable("tessedit_char_whitelist", "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz");

在数字和英文的情况下识别率还可以的。中文的话就有些惨了。

于是我们需要进行校正 ,说实话校正的过程比上面麻烦多了 又要敲命令又要咋的 麻烦的一逼,需要用到一堆工具。
这些打成包的工具在此地址下载https://sourceforge.net/projects/vietocr/

下载好后我们参照这篇文章进行实施https://www.cnblogs.com/wzben/p/5930538.html
大概过程就是用工具敲dos命令生成box文件 其实也就是一个带方框的字体描述文件 告诉你系统目前是怎样识别的,然后用一个GUI工具 jTessBoxEditor 在界面上对文本的宽高 框选范围调整 对应哪个汉字 进行校正。 

当我运行train.bat 运行不起的时候弹出 Windows找不到javaw 的时候咋办啊 不要去纠字面意思 ,估计是需要安装jdk吧 尝试一下安装jdk8 果然如此。训练字库的过程中 报错了 Failed to load font_properties from font_properties ,找到一篇博文 https://blog.csdn.net/dragoo1/article/details/8439272 大概看了下没错就是他了 照着实施 bingo 搞定。

能够进行到这一步说明你还能不厌其烦,还能清晰思考说明你是个合格的程序员。 稍微注意下你会发现问题的关键那就是对于汉字的 宽高判别  和部首偏旁偏旁的区域归并 识别引擎很难判定,该框选的不作为一个字单位处理,不该框选的多框 ,这个对识别率影响很大。就连调用微软office的MODI汉字识别率也不见得多高。关键点就在于每单位字宽高的智能判断,相信百度那些也只不过针对这些点进行解决了的而已。用的是别人的引擎即使开源的这复杂度 字单位宽高智能判断我们是改不动的 这里我们只是按部就班的进行模板训练 以提高识别率。

经历一些麻烦的校正和命令操作得到一个normal.traineddata 文件 ,复制到debug下的tessdata目录。注意字库载入代码更改成normal。

1 using (var ocr = new TesseractEngine(System.IO.Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "tessdata"), "normal", EngineMode.Default))

实际上基于模板匹配的这种规规矩矩的OCR已经是非常非常基础的了,毕竟Tesseract-OCR那只有几兆的体积 连我上面说的文本行检测 汉字智能切割 这种都没有 也有可能是我没找到使用方式 谷歌维护的还支持深度学习应该还是可以的 ,但是目前就我的使用感来说的话一般般只是一个将就用了。 把他吹的多么好又是开源的 因为基本上何耐市面上一个能用的免费的了 其它的已经是垃圾中的垃圾了,其它的商用的别人也不会拿出来给免费用的你说对吧

再次测试稍许提高了识别率,好,zhongguo特色的"差不多任务"差不多先生,成功达成任务目标。交差了事

最后:我们自己训练了一个库,然后有从官网下载好的默认的库。如果上面一折腾不就只能使用我们自己训练的那几个字了吗,岂不是识别率更低 要这样还不如不训练呢,对于这一点网上的所有帖子都没做一个明确的说明 很扯淡。通过下面的初始化方式就能你自己的库+官方字库一起使用,normal是你上面训练出的字库的名称,本人亲测有效。

1 using (var ocr = new TesseractEngine(System.IO.Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "tessdata"), "normal+eng", EngineMode.Default))

最后在生产实测中遇到了不少坎坷 憋出了一身汗,好歹还是解决了,事实证明幸好没用office的OCR识别 要不然真挂了 黑盒特性太严重了。这个虽然也很一般但是好歹还是有些可自定义化的参数选项 有实际测量值的结果供你筛选 。打个比方比如加一个自定义逻辑 识别对象的宽高小于多少 我们认为它是一个噪点 把它忽略。还有在最后的测试中为了让容错率大点避免识别失败 把模板字库的每个字弄得很胖 结果经常出现识别错误比如3识别成9, 最后实践的经验证明取一个“合体”的字模可以让识别率提高 。

几经调校 加入了更精细化的识别过程控制 还是基本能够满足生产环境需求。

以此经验分享给盆友们愿大家少走一些弯路。

Tesseract-OCR使用有感的更多相关文章

  1. tesseract ocr文字识别Android实例程序和训练工具全部源代码

    tesseract ocr是一个开源的文字识别引擎,Android系统中也可以使用.可以识别50多种语言,通过自己训练识别库的方式,可以大大提高识别的准确率. 为了节省大家的学习时间,现将自己近期的学 ...

  2. Tesseract——OCR图像识别 入门篇

    Tesseract——OCR图像识别 入门篇 最近给了我一个任务,让我研究图像识别,从我们项目的screenshot中识别文字信息,so我开始了学习,与大家分享下. 我看到目前OCR技术有很多,最主要 ...

  3. Tesseract Ocr引擎

    Tesseract Ocr引擎 1.Tesseract介绍 tesseract 是一个google支持的开源ocr项目,其项目地址:https://github.com/tesseract-ocr/t ...

  4. 开源图片文字识别引擎——Tesseract OCR

    Tessseract为一款开源.免费的OCR引擎,能够支持中文十分难得.虽然其识别效果不是很理想,但是对于要求不高的中小型项目来说,已经足够用了. 文字识别可应用于许多领域,如阅读.翻译.文献资料的检 ...

  5. Python下Tesseract Ocr引擎及安装介绍

    1.Tesseract介绍 tesseract 是一个google支持的开源ocr项目,其项目地址:https://github.com/tesseract-ocr/tesseract,目前最新的源码 ...

  6. Tesseract OCR使用介绍

    #Tesseract OCR使用介绍 ##目录[TOC] ##下载地址及介绍 官网介绍:http://code.google.com/p/tesseract-ocr/wiki/TrainingTess ...

  7. selenium使用笔记(二)——Tesseract OCR

    在自动化测试过程中我们经常会遇到需要输入验证码的情况,而现在一般以图片验证码居多.通常我们处理这种情况应该用最简单的方式,让开发给个万能验证码或者直接将验证码这个环节跳过.之前在技术交流群里也跟朋友讨 ...

  8. alfresco install in linux, and integrated with tesseract ocr

    本文描述在Linux系统上安装Alfresco的步骤: 1. 下载安装文件:alfresco-community-5.0.d-installer-linux-x64.bin 2. 增加执行权限并执行: ...

  9. 使用Tesseract OCR识别验证码

    1.下载Tessrac OCR,默认安装 2.把验证码code.jpg图片放在D盘 3.打开cmd,进入D盘,输入:tesseract  code.jpg result 4.进入D盘,生成了resul ...

  10. Tesseract ocr 3.02学习记录一

    光学字符识别(OCR,Optical Character Recognition)是指对文本资料进行扫描,然后对图像文件进行分析处理,获取文字及版面信息的过程.OCR技术非常专业,一般多是印刷.打印行 ...

随机推荐

  1. P4690 Ynoi2016 镜中的昆虫

    P4690 Ynoi2016 镜中的昆虫 原题不会见祖宗. 前置 珂朵莉树.cdq 分治.树状数组 思路 单点修改区间查询 定义 \(pre_i\) 表示 \(col_i\) 的前一个一样颜色的位置, ...

  2. 域渗透之初识Kerberos认证过程

    目录 Kerberos协议中的角色 关键名词 Kerberos协议的工作流程 AS_REQ & AS_REP TGS_REQ & TGS_REP AP_REQ PAC 总结 Kerbe ...

  3. Java深度历险(六)——Java注解——(七)——Java反射与动态代理

    在开发Java程序,尤其是Java EE应用的时候,总是免不了与各种配置文件打交道.以Java EE中典型的S(pring)S(truts)H(ibernate)架构来说,Spring.Struts和 ...

  4. 前端实战之使用canvas合并图片

    最近做一个完整的系统,前端中涉及到一个推广图片的生成,其中推广图片是由一个变化的链接生成的二维码与一个固定图片拼接而成 实现demo: qrcode.png:https://images.cnblog ...

  5. vue之slot和slot-scope

    插槽分两类,默认插槽和具名插槽:通俗理解就是默认插槽是没有名称的插槽,具名插槽是有名称的插槽. 何时使用插槽?简单的举个栗子:有2个组件,父组件father,子组件son. 父组件 father &l ...

  6. Go操作数据库之MySQL

    安装mysql驱动: go get -u github.com/go-sql-driver/mysql 初始化模块 go mod init m 执行 go mod tidy 导入包: package ...

  7. RabbitMQ之安装与使用

    官网:https://www.rabbitmq.com/ 一. RabbitMQ 简介 MQ全称为Message Queue, 消息队列(MQ)是一种应用程序对应用程序的通信方法.应用程序通过读写出入 ...

  8. 鸿蒙NEXT元服务:利用App Linking实现无缝跳转与二维码拉起

    [效果] 元服务链接格式(API>=12适用):https://hoas.drcn.agconnect.link/ggMRM 生成二维码后效果: ​ [参考网址] 使用App Linking实现 ...

  9. C#日期类型转化总结【转化,农历,节气,星期】

    转为日期类型 将8位日期字符串转换为日期格式 dateStr = "20220203"; System.IFormatProvider format=new System.Glob ...

  10. redis设置密码和开启远程访问

    改密码 默认redis安装后,密码是默认的,通过查看安装目录的config文件,可以查到:requirepass 这个设置,默认是啥就是啥. 需要修改密码的话,把这个注释拿掉,将requirepass ...