这玩意儿就只有一个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. rustlings v6.0 运行时出现 “ You are trying to run Rustlings using the old method before version 6”

    背景 在之前学习 rust 时,使用过一段时间 rustlings 感觉还不错,但是之前的学习只把 rustlings 的题目刷了一半,然后想再从头到尾刷一遍 rustlings 的题目. 在 rus ...

  2. python获取zabbix监控项图形

    python获取zabbix图形 通过zabbix的api接口获取指定时间段的监控项图形 图片示例: 代码示例: # -*- coding: UTF-8 -*- #可根据监控项获取zabbix下所有主 ...

  3. 自动化部署之Gitlab+Jenkins+Docker

    总结自动发布流程:  Gitlab+Jenkins+Docker 一般部署方式: 1.外挂方式: 就是将实际的代码挂载到宿主机上,docker中提供程序运行的环境, 这样的话只需要更新对应的代码就够了 ...

  4. ThreadLocal-全概念解析

    介绍 ThreadLocal 提供线程局部变量,ThreadLocal实例通常是线程私有静态字段,使用的目的是希望将线程与状态关联起来.与JMM中局部变量有几分相似之处,但是不用写回主内存(如果违反, ...

  5. windows 上部署 kafka 做测试

    1.下载 需要下载 zookeeper 和kafka 我下载的版本是 2.部署 2.1 部署 zookeeper 2.1.1 新建配置文件 zoo.cfg 内容为 tickTime = 2000 da ...

  6. 实用&free的音频格式转化工具

    最近写的博客居然是7年前,今天给小朋友下载歌曲时在网上搜了好多格式转化的方法,挨个尝试了之后发现好多是收费的,或者不支持某种格式转化的,但还是大浪淘沙到一些实用的工具.分享给大家参考,同时也督促自己不 ...

  7. 编译器-FOLLOW集合

    语法分析器的两个重要函数 FIRST和FOLLOW 一.FOLLOW的定义 在句型中紧跟在A右边的终结符号的集合 如果A是某些句型的最右符号,那么$在FOLLOW(A)中 A:非终结符 二.计算方法 ...

  8. Winform跨线程访问报错问题解决

    ` using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; u ...

  9. 04C++顺序结构(3)

    一.设置域宽setw() 教学视频1 输出的内容所占的总宽度成为域宽,有些高级语言中称为场宽.使用setw()前,必须包含头文件iomanip,即#include.头文件iomanip,用来声明一些& ...

  10. 使用nvm管理node版本,动态切换不同版本的node(解决安装报错)

    使用nvm管理node版本,动态切换不同版本的node 1. 下载nvm安装包 下载地址,点这里进行下载 往下拉,选择 nvm-setup.zip 安装包 2. 安装nvm 注: 安装nvm之前,卸载 ...