首先做一下背景介绍,Tesseract是一个开源的OCR组件,主要针对的是打印体的文字识别,对手写的文字识别能力较差,支持多国语言(中文、英文、日文、韩文等)。是开源世界里最强的一款OCR组件。当然和世界最强的OCR工具Abbyy相比还是有一点差距,尤其在图片质量较差时,差距还是明显的。
网上有很多关于如何使用这个组件的介绍,不过都是针对英文识别的。而如果是对中文或日文等方块字进行识别,除了需要使用不同的语言包外,还要对Tesseract做一些特别的设置,否则识别率会很低,以下我就和大家分享一下我使用Tesseract对日文做OCR的一些经验。
第一步,是要下载Tesseract组件,最简单的方法就是使用VisualStudio的NUGet来下载。选择第一个组件。
第二步,下载日文语言包,由于在大陆地区无法访问google,所以不能打开官网直接下载语言包。我给出文件的地址,可以使用迅雷下载。
http://tesseract-ocr.googlecode.com/files/tesseract-ocr-3.02.jpn.tar.gz。
下载完成后将语言包文件解压后放到tessdata文件夹下。
到目前为止,准备工作已经就绪,可以开始编写代码。
第三步,初始化Tesseract组件,代码如下。
TesseractEngine engine = new TesseractEngine(@"tessdata文件夹路径", "jpn", EngineMode.Default))。
第四步,设置OCR参数,关于各参数的解释,可以参照官网。
Useful parameters for Japanese and Chinese。
Some Japanese tesseract user found these parameters helpful for increasing tesseract-ocr (3.02) accuracy for Japanese :。
Name Suggested value Description 。
chop_enable T Chop enable. 。
use_new_state_cost F Use new state cost heuristics for segmentation state evaluation 。
segment_segcost_rating F Incorporate segmentation cost in word rating? 。
enable_new_segsearch 0 Enable new segmentation search path. It could solve the problem of dividing one character to two characters 。
language_model_ngram_on 0 Turn on/off the use of character ngram model. 。
textord_force_make_prop_words F Force proportional word segmentation on all rows. 。
edges_max_children_per_outline 40 Max number of children inside a character outline. Increase this value if some of KANJI characters are not recognized (rejected). 。
以下是代码
engine.SetVariable("chop_enable ", "F");。
engine.SetVariable("enable_new_segsearch", 0);。
engine.SetVariable("use_new_state_cost ", "F");。
engine.SetVariable("segment_segcost_rating", "F");。
engine.SetVariable("language_model_ngram_on", 0);。
engine.SetVariable("textord_force_make_prop_words", "F");。
engine.SetVariable("edges_max_children_per_outline", 50);。
这里面chop_enable参数与官网推荐的不太一样,我发现按照官网的设置,会有很多文字识别不出来。
第五步,开始识别。
var page = engine.Process(p);。
var testText = page.GetText();。
var c=page.GetMeanConfidence();。
第一行代码返回一个Page对象,通过该对象可以获得识别的文本,而且还可以获得识别文本所在位置(这个在识别非固定模式文档时非常有用,可以根据关键字动态查找识别字段位置)。
在例子中OCR做全文识别,但是做全文识别很多情况下识别质量一般,最好增加识别区域参数,同时将PageSegMode参数设置为PageSegMode.SingleBlock(代表多行大小相同的文字)或PageSegMode.SingleRow(代表单行大小相同的文字)。
第二行和第三行分别返回识别的文本与识别的信任度。在实际使用时我发现识别信任度不是特别有用。无论识别对错,信任度基本在0.7左右,有些时候信任度较高,识别结果反而是错误的。
经过以上几步,就可以完成日文的OCR。但要让以上代码成功运行,还必须要在安装VC++运行时2012,否则会报错。
我使用以上方法对扫描图片进行测试,发现识别精确度还是比较高的,尤其在指定区域与PageSegMode参数后。但是日文字库也存在一些低级失误,如将数字“1”识别成了汉字“一”等。如果要想解决这个问题,必须要从头训练日文,这个工作量非常大!而这真的是Tesseract一个非常不智能的地方,应该支持在原有训练字库的基础上追加训练内容!或者在官网上提供Box文件和训练用Tif供开发者下载。
六大原始神物分别是:灵魂宝石(绿色)、时间宝石(橘色)、空间宝石(紫色)、心灵宝石(蓝色)、现实宝石(黄色)、力量宝石(红色)。
1、灵魂宝石
灵魂宝石允许持有者窃取、控制、操作或改变生者以及死者的灵魂。同时灵魂宝石也是通往一个如田园诗般美丽的口袋宇宙的入口。如果将灵魂宝石的能力提升至极致的话,它能赋予持有者拥有对宇宙一切生命的控制权。
2、时间宝石
时间宝石允许持有者窥探过去与未来;停止、加速、减速或逆转时间;穿越时间旅行;改变过去或未来;增加或减少寿命;使人乃至整个宇宙陷入到无限循环的时间陷阱中。如果将时间宝石的能力提升至极致的话,它能赋予持有者全知以及完全掌控过去、现在和未来的能力。
3、空间宝石
空间宝石允许持有者出现在任何地方;在现实中任何地方移动任何物体;扭曲或重新排列空间;将自己或他人传送到任何想象得到的地方;提高速度;无视物理规则而改变任何事物之间的距离。如果将空间宝石的能力提升至极致的话,它能赋予持有者全在能力。
4、心灵宝石
首次出场于漫威电影《复仇者联盟》镶嵌在洛基权杖上的黄色宝石。可以让使用者进入其他人的思维之中,也能让一切的梦想、思想和意念进入使用者大脑。它能增强精神力量,并增加心灵能力。也能够依使用者的意愿改变对方的心智。
5、现实宝石
又名以太粒子,首次出场于漫威电影《雷神2:黑暗世界》人们往往说某些看法是真实的,而使用这颗宝石可以真切地、毫不夸张地把这些看法化为真实。这颗宝石也许是最强大的,同时也是最难使用的。使用它,人们可以实现任何的梦想。
6、力量宝石
又名宇宙灵球,首次出场于漫威电影《银河护卫队》这颗宝石可以让使用者掌握并操控一切试图掌握的力量与能量。它支持其他的宝石并且能够强化它们的作用。使用这颗宝石,使用者甚至可以拷贝一切的物理性超能力,并且使得自身的物理攻击能力与防御能力达到无可战胜的程度。
参考资料:百度百科-无限宝石
纸张在许多地方已日益失宠,无纸化办公谈论40多年,办公环境正限制纸山的生成。而过去几年,无纸化办公的概念发生了显着的转变。在计算机软件的帮助 下,包含大量重要管理数据和资讯的文档可以更方便的以电子形式储存。扫描文档的好处不纯粹是存档理由。为了访问基于纸张的信息和将信息整合进数字工作流, 光学字符识别(OCR)技术至关重要。选择正确的OCR工具要基于特定需求而定,例如在线OCR服务对某些人有用,但可能存在隐私问题和文件大小限制。 OCR软件非大众产品,因此开源替代相对于商业级重量级产品相对较少,再加上OCR软件需要先进的算法将扫描的图像正确翻译成实际的文字,而图像不仅仅含 有文字,它还包含布局、图形和表格,可能会跨越多页。
优秀的开源OCR软件包括:
Tesseract
原本由惠普开发的图像识别类库tesseract-ocr已经更新到2.04, 就是最近Google支持的那个OCR。原先是惠普写的,现在Open source了。
OCRopus
Ocropus的(TM)是一个先进的文件分析和OCR系统,采用可插入的布局分析,可插入的字符识别,自然语言统计建模和多语言支持功能。
Cuneiform
Cuneiform 是一个 OCR 文字识别系统的商标,最开始是由Cognitive 技术所开发的运行在 Windows 下的软件。而这个项目是该软件在 Linux 系统下的移植版本。
GOCR
GOCR 是一个开源的OCR光学识别程序。
OCRFeeder
OCRFeeder 是 GNOME 桌面下的一个开源 OCR 套件。可将纸质或者图形文档转成电子文档。
Lios
linux-intelligent-ocr-solution (Lios) 是Linux下一个开源的 OCR 解决方案,可将打印的文档转成可编辑的文本。
C:\Program Files (x86)\Tesseract-OCR\tessdata\configs文件夹目录下,复制digits并命名为yours,用notepad++编辑。
tessedit_char_whitelist 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ。
如果你是使用的3.04,按教程直接使用。
tesseract C:\1.jpg C:\1 yours。
你会很轻松地得到想要的结果。
但是如果你使用的是4.00,你会发现白名单毫无作用。
奇怪,难道是配置环境出错了?还是字母打错了?都不是。
tesseract提供了OCR引擎模式。
0 =仅限原始Tesseract。
1 =只有神经网络LSTM
2 =Tesseract + LSTM。
3 =基于可用的默认值
目前LSTM是无法支持白名单的,并且似乎tesseract的团队无意去解决这个问题。
选择原始tesseract 即 --oem 0。
tesseract --oem 0 C:\1.jpg C:\1 yours。
这样你就能使用白名单了。但是识别正确率会比原先低。
也是初学者,我想到一个办法,就是在image.png前面加个绝对路径,然后CMD下直接运行如下命令:tesseract D:\Python\Python37-32\Scripts\image.png D:\Python\Python37-32\Scripts\result233 然后就会在D:\Python\Python37-32\Scripts\下自动生成一个名为result233的.txt文本。
1.把image.png图片存放到D:\Python\Python37-32\Scripts(路径随便自己定义)
2.打开CMD输入:tesseract D:\Python\Python37-32\Scripts\image.png D:\Python\Python37-32\Scripts\result233。
在D:\Python\Python37-32\Scripts生成一个名为result233.txt的文件。
打开一看就是想要的效果了。
------------------------------------------the end---------------------------------------------。