目录

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. Kafka与Flume之集成比较

    Kafka与Flume之集成比较 一.Kafka与Flume比较 在企业中必须要清楚流式数据采集框架flume和kafka的定位是什么:flume:cloudera公司研发: 适合多个生产者: 适合下 ...

  2. SpringCloud微服务实战——搭建企业级开发框架(四十六):【移动开发】整合uni-app搭建移动端快速开发框架-环境搭建

      近年来uni-app发展势头迅猛,只要会vue.js,就可以开发一套代码,发布移动应用到iOS.Android.Web(响应式).以及各种小程序(微信/支付宝/百度/头条/飞书/QQ/快手/钉钉/ ...

  3. 2.Python封装练习及私有属性

    面向对象三大特性 封装:根据职责将属性和方法封装到一个抽象的类中 继承:实现代码的重用,相同代码不需要重复的编写 1.单继承 2.多继承 多态:不同的对象调用相同的方法,产生不同的执行结果,增加代码的 ...

  4. Tauri-Vue3桌面端聊天室|tauri+vite3仿微信|tauri聊天程序EXE

    基于tauri+vue3.js+vite3跨桌面端仿微信聊天实例TauriVue3Chat. tauri-chat 运用最新tauri+vue3+vite3+element-plus+v3layer等 ...

  5. HashMap基本使用方法

    HashMap Map集合基于 键(key)/值(value)映射.每个键最多只能映射一个值.键可以是任何引用数据类型的值,不可重复:值可以是任何引用数据类型的值,可以重复:键值对存放无序. Hash ...

  6. 从0到1搭建redis6.0.7续更~

    "心有所向,日复一日,必有精进" 前言: 想必大家看完我之前写的搭建redis服务器,大家都已经把redis搭建起来了吧如果没有搭建起来的小可爱请移步这里哦从0到1搭建redis6 ...

  7. day17-Servlet06

    Servlet06 15.HttpServletResponse 15.1HttpServletResponse介绍 每次HTTP请求,Tomcat都会创建一个HttpServletResponse对 ...

  8. SolidWorks2020下载安装中文版教程,你solidworks安装失败是什么原因?

    SW2020 WIN10 64位安装步骤: 1.先使用"百度网盘客户端"下载SW20S5_CN_x64安装包到电脑磁盘英文路径文件夹里,并鼠标右击进行解压缩,安装前先断开电脑网络, ...

  9. VMware 虚拟机打开电源失败

    vmware上虚拟机关机导出ovf失败后,再次启动虚拟机,突然无法打开虚拟机,并伴随如下报错: 模块"disk"打开电源失败,无法打开磁盘/***/.../***.vmdk 解决方 ...

  10. NOI2011真题:兔兔与蛋蛋游戏

    NOI2011真题:兔兔与蛋蛋游戏 题目描述 这些天,兔兔和蛋蛋喜欢上了一种新的棋类游戏. 这个游戏是在一个 n行 m 列的棋盘上进行的.游戏开始之前,棋盘上有一个格子是空的,其它的格子中都放置了一枚 ...