目录

1 如何在Ubuntu和windows上安装Tesseract

1.1 在ubuntu18.04上安装Tesseract4

1.2 在Ubuntu 14.04,16.04,17.04,17.10上安装Tesseract 4.0

1.3 在windows下安装Tesseract 4.0

1.4 检查Tesseract版本

2 Tesseract基本用法

2.1 命令行用法

2.2 使用pytesseract

2.3 使用C ++ API

2.4 语言包错误

3 结果与评价

4 参考


在今天的文章中,我们将学习如何使用名为Tesseract和OpenCV的开源工具识别图像中的文本。从图像中提取文本的方法也称为光学字符识别(OCR)或有时简称为文本识别。Tesseract是由Hewlett Packard Labs开发的专有软件。2005年,惠普与内华达拉斯维加斯大学合作开源。自2006年以来,它一直由谷歌和许多开源贡献者积极开发。

当Tesseract开始支持许多图像格式并逐渐添加大量脚本(语言)时,Tesseract在3.x版本中逐渐完善。Tesseract 3.x基于传统的计算机视觉算法。在过去几年中,基于深度学习的方法在计算机视觉的许多领域中在准确性方面已经超越了传统的机器学习技术。手写识别是一个突出的例子。因此,Tesseract也有一个基于深度学习的识别引擎只是时间问题。在Tesseract4版本中,Tesseract实现了基于长短期记忆(LSTM)的识别引擎。LSTM是一种递归神经网络(RNN)。

注意要识别包含单个字符的图像,我们通常使用卷积神经网络(CNN)。任意长度的文本是字符序列,并且使用RNN解决这些问题,并且LSTM是RNN的流行形式。阅读以下文章以了解有关LSTM的更多信息。

http://colah.github.io/posts/2015-08-Understanding-LSTMs/

Tesseract的第4版也有Tesseract 3的传统OCR引擎,但是LSTM引擎是默认的,我们在这篇文章中专门使用它。Tesseract库附带了一个名为tesseract的便捷命令行工具。我们可以使用此工具对图像执行OCR,输出存储在文本文件中。如果我们想在我们的C

++或Python代码中集成Tesseract,我们将使用Tesseract的API。用法在第2节中介绍,但我们首先从安装说明开始。

1 如何在Ubuntu和windows上安装Tesseract

详细安装操作见:

https://github.com/tesseract-ocr/tesseract/wiki

我们将安装:

Tesseract库(libtesseract)

命令行Tesseract工具(tesseract-ocr)

用于tesseract的Python包装器(pytesseract)

在本教程的后面部分,我们将讨论如何为英语以外的语言安装语言和脚本文件。

1.1 在ubuntu18.04上安装Tesseract4

Tesseract 4包含在Ubuntu 18.04中,因此我们将使用Ubuntu软件包管理器直接安装它。具体命令见:

sudo apt install tesseract-ocr

sudo apt install libtesseract-dev

sudo pip install pytesseract

1.2 在Ubuntu 14.04,16.04,17.04,17.10上安装Tesseract 4.0

由于某些依赖性,只有Tesseract 3可从官方发布渠道获得,适用于早于18.04的Ubuntu版本。幸运的是Ubuntu PPA - alex-p /

tesseract-ocr为Ubuntu版本14.04,16.04,17.04,17.10维护Tesseract

4。我们将这个PPA添加到我们的Ubuntu机器并安装Tesseract。如果您拥有除此之外的Ubuntu版本,则必须从源代码编译Tesseract。具体命令见:

sudo add-apt-repository ppa:alex-p/tesseract-ocr

sudo apt-get update

sudo apt install tesseract-ocr

sudo apt install libtesseract-dev

sudo pip install pytesseract

1.3 在windows下安装Tesseract 4.0

Tesseract本身没有windows的安装包,不过它指定了一个第三方的封装的windows安装包,在其wiki上有说明,大家可直接到这个地址进行下载:

https://digi.bib.uni-mannheim.de/tesseract/

其中文件名中带有 dev 的为开发版本,不带 dev 的为稳定版本。

下载后就是一个exe安装包,直接右击安装即可,安装完成之后,配置一下环境变量,编辑 系统变量里面 path,添加下面的安装路径:

C:\Program Files (x86)\Tesseract-OCR

具体使用安装见:

https://www.cnblogs.com/gl1573/p/9876397.html

https://blog.csdn.net/qq_35531549/article/details/95191677

1.4 检查Tesseract版本

要检查前面的步骤中是否一切正常,请在命令行上尝试以下操作

tesseract –version

你会看到输出类似于

tesseract 4.0.0-beta.1-306-g45b11

leptonica-1.76.0

libjpeg 9c : libpng 1.6.34 : libtiff 4.0.9 : zlib 1.2.8

Found AVX2

Found AVX

Found SSE

2 Tesseract基本用法

如前所述,我们可以使用命令行实用程序或使用Tesseract API将其集成到我们的C ++和Python应用程序中。在最基本的用法中,我们指定以下内容

(1) 输入文件名:我们在下面的例子中使用image.jpg。

(2) OCR语言:我们基本示例中的语言设置为英语(eng)。在命令行和pytesseract上,使用-l选项指定它。

(3) OCR引擎模式(oem):Tesseract 4有两个OCR引擎 - 1)Legacy Tesseract引擎2)LSTM引擎。使用该--

oem选项可以选择四种操作模式。0仅限传统引擎、1神经网络仅限LSTM引擎、2 Legacy + LSTM引擎、3默认,基于可用的内容。

(4) 页面分段模式(psm):当您有关于文本结构的其他信息时,PSM非常有用。我们将在后续教程中介绍其中一些模式。在本教程中,我们将坚持使用psm =

3(即PSM_AUTO)。注意如果未指定PSM,则在命令行和python版本中默认为3,但在C ++ API中默认为6。如果使用命令行版本和C ++

API未获得相同的结果,请显式设置PSM。

如果你想查看具体参数,命令行输入

tesseract --help-psm

或者tesseract –help-oem

PSM命令详解:

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.

2.1 命令行用法

以下示例显示了如何使用tesseract命令行工具执行OCR。选择语言为英语,OCR引擎模式设置为1(即仅限LSTM)。

# Output to terminal 输出到终端

tesseract image.jpg stdout -l eng --oem 1 --psm 3

# Output to output.txt 输出到到txt文档

tesseract image.jpg output -l eng --oem 1 --psm 3

2.2 使用pytesseract

在Python中,我们使用pytesseract模块。它只是命令行工具的包装器,其中使用config参数指定了命令行选项。基本使用要求我们先阅读使用OpenCV的图像,并通过图像image_to_string的pytesseract类的方法与语言(ENG)一起。Pytesseract通过pip

install Pytesseract就可以安装。详细使用代码见:

import cv2
import pytesseract # 图像路径
imPath = 'image/computer-vision.jpg' # 命令
config = ('-l eng --oem 1 --psm 3') # Read image from disk 获得彩色图像
im = cv2.imread(imPath, cv2.IMREAD_COLOR) # Run tesseract OCR on image
text = pytesseract.image_to_string(im, config=config) # Print recognized text
print(text)

2.3 使用C ++ API

在C ++版本中,我们首先需要包括tesseract / baseapi.h和leptonica/allheaders.h。然后,我们创建一个指向TessBaseAPI类实例的指针。我们将语言初始化为英语(eng),将OCR引擎初始化为tesseract:: OEM_LSTM_ONLY(这相当于命令行选项 --oem1)。最后,我们使用OpenCV读取图像,并使用其SetImage方法将此图像传递给OCR引擎。使用GetUTF8Text()读出输出文本。详细使用代码下:

#include <string>
#include <tesseract/baseapi.h>
#include <leptonica/allheaders.h>
#include <opencv2/opencv.hpp> using namespace std;
using namespace cv; int main()
{
string outText;
string imPath = "image/receipt.png"; // Create Tesseract object
tesseract::TessBaseAPI *ocr = new tesseract::TessBaseAPI(); /*
Initialize OCR engine to use English (eng) and The LSTM
OCR engine. There are four OCR Engine Mode (oem) available OEM_TESSERACT_ONLY Legacy engine only.
OEM_LSTM_ONLY Neural nets LSTM engine only.
OEM_TESSERACT_LSTM_COMBINED Legacy + LSTM engines.
OEM_DEFAULT Default, based on what is available.
*/
// 初始化
ocr->Init(NULL, "eng", tesseract::OEM_LSTM_ONLY); // Set Page segmentation mode to PSM_AUTO (3)
// Other important psm modes will be discussed in a future post.
// 设置分割模式
ocr->SetPageSegMode(tesseract::PSM_AUTO); // Open input image using OpenCV
Mat im = cv::imread(imPath, IMREAD_COLOR); // Set image data
ocr->SetImage(im.data, im.cols, im.rows, 3, im.step); // Run Tesseract OCR on image
outText = string(ocr->GetUTF8Text()); // print recognized text
cout << outText << endl; // Destroy used object and release memory
ocr->End(); return 0;
}

Windows下使用tesseract需要编译后使用,编译教程见:

http://www.dengb.com/cjjc/1345780.html

2.4 语言包错误

您可能会遇到错误Error opening data file tessdata/eng.traineddata

它只是意味着语言包(tessdata / eng.traineddata)不在正确的路径中。您可以通过两种方式解决此问题。

1:确保文件位于预期路径中(例如,在linux上,路径为/usr/share/tesseract-ocr/4.00/tessdata/eng.traineddata)。

2:创建目录tessdata,下载eng.traineddata并将文件保存到tessdata/eng.traineddata。然后,您可以指示Tesseract使用查找此目录中的语言包。(这种方法不推荐问题很多)。

如果你想下载新的语言库,下载地址见:

https://github.com/tesseract-ocr/tessdata

3 结果与评价

Tesseract是一种通用的OCR引擎,但是当我们在普通字体的纯白色背景上使用干净的黑色文本时,它最有效。当文本大致水平且文本高度至少为20像素时,它也可以很好地工作。如果文本具有周围边界,则可以将其检测为一些随机文本。具体使用类似于平常OCR软件。如果能够联网建议使用百度云OCR。

所有代码见:

https://github.com/luohenyueji/OpenCV-Practical-Exercise

具体评测见:

https://segmentfault.com/a/1190000012861561?utm_source=tag-newest

如果使用tesseract,在实际工程tesseract错误率很高,识别率极差。一般需要对图像进行各种图像处理后再用tesseract识别,最后根据错误类型进行二次识别。tesseract的错误还是具有一定规律的。另外tesseract识别中文效果并不好,你要制作专门的中文训练集通过jTessBoxEditor.jar去训练它,但是整个制作流程较为复杂。具体见:

https://github.com/tesseract-ocr/tesseract/wiki/TrainingTesseract-4.00

tesseract要想有好的识别效果,就必须有大量的训练样本。但是tesseract对英文支持还是不错的。

4 参考

https://www.learnopencv.com/deep-learning-based-text-recognition-ocr-using-tesseract-and-opencv/

[OpenCV实战]35 使用Tesseract和OpenCV实现文本识别的更多相关文章

  1. [OpenCV实战]7 使用YOLOv3和OpenCV进行基于深度学习的目标检测

    目录 1 YOLO介绍 1.1 YOLOv3原理 1.2 为什么要将OpenCV用于YOLO? 1.3 在Darknet和OpenCV上对YOLOv3进行速度测试 2 使用YOLOv3进行对象检测(C ...

  2. OpenCV实战:人脸关键点检测(FaceMark)

    Summary:利用OpenCV中的LBF算法进行人脸关键点检测(Facial Landmark Detection) Author:    Amusi Date:       2018-03-20 ...

  3. win10 vs2015源码编译opencv、opencv_contrib、Tesseract

    1.软件包准备 opencv源码包地址:                官网  github opencv_contrib源码包地址:   github Tesseract源码包地址:        ...

  4. [OpenCV实战]50 用OpenCV制作低成本立体相机

    本文主要讲述利用OpenCV制作低成本立体相机以及如何使用OpenCV创建3D视频,准确来说是模仿双目立体相机,我们通常说立体相机一般是指双目立体相机,就是带两个摄像头的那种(目就是指眼睛,双目就是两 ...

  5. [OpenCV实战]49 对极几何与立体视觉初探

    本文主要介绍对极几何(Epipolar Geometry)与立体视觉(Stereo Vision)的相关知识.对极几何简单点来说,其目的就是描述是两幅视图之间的内部对应关系,用来对立体视觉进行建模,实 ...

  6. [OpenCV实战]48 基于OpenCV实现图像质量评价

    本文主要介绍基于OpenCV contrib中的quality模块实现图像质量评价.图像质量评估Image Quality Analysis简称IQA,主要通过数学度量方法来评价图像质量的好坏. 本文 ...

  7. [OpenCV实战]21 使用OpenCV的Eigenface

    目录 1 PCA 1.1 方差是什么 1.2 什么是PCA 1.3 什么是矩阵的特征向量和特征值? 1.4 如何计算PCA 2 什么是EigenFaces? 2.1 将图像作为向量 2.2 如何计算如 ...

  8. [OpenCV实战]14 使用OpenCV实现单目标跟踪

    目录 1 背景 1.1 什么是目标跟踪 1.2 跟踪与检测 2 OpenCV的目标跟踪函数 2.1 函数调用 2.2 函数详解 2.3 综合评价 3 参考 在本教程中,我们将了解OpenCV 3中引入 ...

  9. [OpenCV实战]5 基于深度学习的文本检测

    目录 1 网络加载 2 读取图像 3 前向传播 4 处理输出 3结果和代码 3.1结果 3.2 代码 参考 在这篇文章中,我们将逐字逐句地尝试找到图片中的单词!基于最近的一篇论文进行文字检测. EAS ...

随机推荐

  1. BZOJ3732 Network(Kruskal重构树)

    Kruskal重构树的模板题. 给你N个点的无向图 (1 <= N <= 15,000),记为:1-N.图中有M条边 (1 <= M <= 30,000) ,第j条边的长度为: ...

  2. 【算法训练营day1】LeetCode704. 二分查找 LeetCode27. 移除元素

    [算法训练营day1]LeetCode704. 二分查找 LeetCode27. 移除元素 LeetCode704. 二分查找 题目链接:704. 二分查找 初次尝试 看到题目标题是二分查找,所以尝试 ...

  3. 实例分析Scheduled Thread Pool Executor与Timer的区别

    摘要:JDK 1.5开始提供Scheduled Thread PoolExecutor类,Scheduled Thread Pool Executor类继承Thread Pool Executor类重 ...

  4. java实现单链表的创建、增、删、改、查

    文章目录 单链表的创建.增.删.改.查 1.增加一个节点 2.删除一个节点 3.修改某一个节点 5.遍历单链表 单链表的创建.增.删.改.查 双向链表的增删改查:https://blog.csdn.n ...

  5. C++之值传递&指针传递&引用传递详解

    C++之值传递&指针传递&引用传递详解 目录 C++之值传递&指针传递&引用传递详解 1.函数基础 2.值传递 3.指针传递 4.引用传递 1.函数基础 一个函数由以下 ...

  6. 浅谈--ETCD的基本概念及用法

    1. 简介 ETCD 是一个高可用的分布式键值数据库,可用于服务发现.ETCD 采用 raft 一致性算法,基于 Go 语言实现. raft是一个强一致的集群日志同步算法. ETCD使用gRPC,网络 ...

  7. Linux系统文件与启动流程

    Linux系统文件与启动流程 /etc初始化系统重要文件 /etc/sysconfig/network-scripts/ifcfg-eth0:网卡配置文件 /etc/resolv.conf:Linux ...

  8. 使用 html2canvas 将页面中某一部分转为图片下载

    今天在项目中遇到一个需求是将生成的二维码和一些背景作为海报,然后将海报以图片的形式下载 使用了 html2canvas  插件 import html2canvas from "html2c ...

  9. jdk线程池ThreadPoolExecutor工作原理解析(自己动手实现线程池)(一)

    jdk线程池ThreadPoolExecutor工作原理解析(自己动手实现线程池)(一) 线程池介绍 在日常开发中经常会遇到需要使用其它线程将大量任务异步处理的场景(异步化以及提升系统的吞吐量),而在 ...

  10. [排序算法] 2路插入排序 (C++)

    前言 本文章是建立在 插入排序 的基础上写的,如果还有不懂 插入排序 的童鞋先停下脚步,可以先看看这里~ 直接/折半插入排序 2路插入排序解释 在 插入排序 中,当待插入元素需要插入的位置位于当前有序 ...