安装Tesseract实现OCR

本教程翻译自PyImageSearch英文原文

实现效果

今天的博客文章是安装和使用Tesseract library 进行OCR识别的两章系列中的第一部分。

OCR可以自动对手写或者印刷字体进行类型转化为机器编码文本字符串,供我们存取和操作。

本系列第一部分将专注于在你的机器上安装和配置Tesseract,其次是利用tesseract命令实现对输入图片的OCR应用。

下一章我们将讲述如何通过Python绑定Tesseract库去实现调用Tesseract方法。

安装 Tesseract

Tesseract,最初是由Hewlett Packard在1980年代开发的,在2005年开源。2006年以后Google开始赞助这个项目。

Tesseract可以处理很多自然语音,英语、葡萄牙语系、意第绪语等。截止到2015年为止支持超过100种书面语言,并且可以通过训练学习轻松掌握其他语言。

最初Tesseract是用C语言写的,在1998年改用C++。Tesseract是无GUI交互的,可以通过命令后被执行。但是有一些其他软件提供GUI对Tesseract进行了封装。

更多Tesseract的介绍可以访问GitHub或者Wikipedia article

这篇文章分三部分:

  • 安装Tesseract
  • 验证Tesseract是否正确
  • 对输入图片进行OCR识别

学习完这篇文章你将学会使用Tesseract处理你的图片。

步骤1: 安装Tesseract

如果要使用Tesseract库,首先需要安装它到你的机器上。

针对macOS用户,我们使用Homebrew 去安装Tesseract:

$ brew install tesseract
在macOS上安装Tesseract OCR.

如果使用Ubuntu系统,使用apt-get 安装Tesseract。

$ sudo apt-get install tesseract-ocr
在Ubuntu上安装Tesseract OCR.

Windows,请参考 Tesseract documentation PyImageSearch不支持或者不推荐使用Windows去开发。

步骤2: 验证Tesseract是否安装成功

执行如下命令,可以验证Tesseract是否安装成功:

$ tesseract -v
tesseract 3.05.00
 leptonica-1.74.1
  libjpeg 8d : libpng 1.6.29 : libtiff 4.0.7 : zlib 1.2.8
验证Tesseract是否安装成功.

如果你看到Tesseract的版本和其依赖的库的版本列表,证明你已经安装成功。

如果你安装失败:

-bash: tesseract: command not found

如果看到以上结果,证明你的机器没有安装Tesseract。请返回到步骤1重写开始。或者你需要更新你的PATH环境。

步骤 3: 使用Tesseract对图片OCR识别

我们将使用干净的预处理过的图片,以便获取更好的识别结果。

当使用Tesseract时,我建议:

  • 尽可能使用高分辨率和高DPI的图片。
  • 应用阈值处理从背景中分割文本。
  • 确保前景色和背景色可以清晰的分开。(例如:没有像素化或字符变形)
  • 应用text skew correction处理输入图片确保文字合理的对其。

如果因为如上问题导致的识别偏差,我们将在后续的章节中介绍如何处理。

现在,让我们来实现对图片的OCR识别吧:

示例1

只需要在terminal中使用如下命令即可:

$ tesseract tesseract_inputs/example_01.png stdout 
Warning in pixReadMemPng: work-around: writing to a temp file
Testing Tesseract OCR

识别正确! Tesseract 非常正确的识别出, “Testing Tesseract OCR”, 并且在terminal中打印出来。

下面,我们试试另外的图片:


示例2

在Terminal中输入下面的命令,注意输入文字名的改变:

$ tesseract tesseract_inputs/example_02.png stdout 
Warning in pixReadMemPng: work-around: writing to a temp file
PyImageSearch
Tesseract可以正确的识别出图片内容

成功!Tesseract正确识别出图片包含的文本“PyImageSearch”

下面,让我们尝试去识别数字

数字图片

这个示例使用命令行识别数字:

$ tesseract tesseract_inputs/example_03.png stdout digits
Warning in pixReadMemPng: work-around: writing to a temp file
650 3428

又一次,Tesseract成功识别出我们要识别的字符串(这个例子使纯数字)。

在上面的三个示例中,Tesseract都能成功的识别出我们的图片。你可以会以为Tesseract可以识别你所有的情况。

但是,我们将要在下个段落列出,Tesseract使用的局限性。

Tesseract的局限性

几周之前,我正在做的工作是通过OCR识别信用卡上面的16为数字。

我非常容易的通过python代码定位四组四位数的每一组。

以下是4位数字ROI(region of interest)的示例:

定位信用卡上的一组四位数字

但是,当我尝试使用Tesseract去识别以下图片的时候,结果并不理想:

尝试识别有噪音的图片
$ tesseract tesseract_inputs/example_04.png stdout digits
Warning in pixReadMemPng: work-around: writing to a temp file
5513

这里看到Tesseract的识别结果是 5513,但是图片显示的数字是5678。

不幸的是,这是Tesseract限制的最好的一个例子。当我们将前景文本和背景区分开后,文本的像素化特性使Tesseract混淆了。换个说法应该使Tesseract并没有对信用卡的字体进行学习训练。

Tesseract最适合在构建扫描图像,预处理图像的文档处理管道时,需要应用光学字符识别的情况。

我们应该了解Tesseract并不是一个OCR识别的现成的解决方案,不能应用所有的图片。

为了实现这个目标,我们将需要应用特征提取,机器学习和深度学习技术。

一个非常好的学习特征提取和机器学习去构建手写字体识别系统的列子可以在我的书中找到。 Practical Python and OpenCV.

本章摘要

今天我们在学习Tesseract进行OCR识别的教程的第一部分,学习到了如何在计算机上安装和配置Tesseract。并且我们使用tesseract库去识别一些图片示例。

但是,我们发现除非我们的图片非常清晰的分离的前景和背景才能被Tesseract很好的识别出结果。在有"噪点"的图片情况,我们需要获取更好的,更精确的训练模型去适应这种特别的情况。

对于具有高分辨率输入的情况,其中前景文本被干净地从背景中分割的图片,Tesseract 是最适合的。

下周我们将要学习通过Python代码,更多的与Tesseract交互,请继续关注。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,456评论 5 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,370评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,337评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,583评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,596评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,572评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,936评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,595评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,850评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,601评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,685评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,371评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,951评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,934评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,167评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,636评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,411评论 2 342

推荐阅读更多精彩内容