本教程翻译自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 -vtesseract 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 fileTesting 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 filePyImageSearch

Tesseract可以正确的识别出图片内容

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

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

数字图片

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

$ tesseract tesseract_inputs/example_03.png stdout digitsWarning in pixReadMemPng: work-around: writing to a temp file650 3428

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

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

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

Tesseract的局限性

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

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

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

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

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

尝试识别有噪音的图片

$ tesseract tesseract_inputs/example_04.png stdout digitsWarning in pixReadMemPng: work-around: writing to a temp file5513

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

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

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

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

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

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

本章摘要

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

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

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

作者:TimBao链接:https://www.jianshu.com/p/cf2beb08e9b2

这里面默认只能识别英文的图片,如果需要中文、或者中文英语一起识别的话,后面文章,这边会讲到。

手写数字识别实现课设cnsd博客_使用Tesseract轻松实现OCR字体识别相关推荐

  1. 手写数字识别实现课设cnsd博客_讯飞输入法Android V9.1.9465 重磅升级拼音手写A.I.引擎...

    基于科大讯飞领先的A.I.实力,讯飞输入法Android V9.1.9465喜获拼音输入和手写输入的重磅升级,为用户带来更具智慧的输入新体验.不仅如此,高效便捷的莫得键盘2.0在继承A.I.语音强大基 ...

  2. TensorFlow实战之Softmax Regression识别手写数字

       本文根据最近学习TensorFlow书籍网络文章的情况,特将一些学习心得做了总结,详情如下.如有不当之处,请各位大拿多多指点,在此谢过. 一.相关概念 1.MNIST MNIST(Mixed N ...

  3. 机器学习:手写数字识别(Hand-written digits recognition)小项目

    该项目的所有代码在我的github上,欢迎有兴趣的同学与我探讨研究~ 地址:Machine-Learning/machine-learning-ex3/ 1. Introduction 手写数字识别( ...

  4. 生物神经网络与机器学习的碰撞,Nature论文提出DNA试管网络识别手写数字

    近日,来自加州理工学院的研究人员开发出一种由 DNA 制成的新型人工神经网络.该网络解决了一个经典的机器学习问题:正确识别手写数字.该项研究中,研究者用了 36 个手写数字 6 和 7 作为测试例子, ...

  5. 基于支持向量机的Digits手写数字识别

    基于支持向量机的Digits手写数字识别 描述 支持向量机(Support Vector Machine,简称SVM)模型既可以用于分类也可以用于回归.手写数字识别是一个多分类问题(判断一张手写数字图 ...

  6. 智科模式识别期末大课设:多种方法对数据集进行手写数字识别(数据集:MINIST)

    0结课作业内容 (1)程序编写及报告. 请大家下载70000个样本的MNIST数据集("手写体数字70000.zip",28*28像素),60000个用于训练,10000个用于测试 ...

  7. 第7-3课:K 最邻近算法(KNN)与手写数字识别

    K 最近邻(KNN,K-Nearest Neighbor)算法是一类在数据挖掘领域常用的分类算法,该算法看似神秘,其实原理很简单,算法实现也很简单.KNN 算法在类别决策时,只参考极少量的相邻样本,也 ...

  8. Python仿真及应用结课大作业—基于CNN的手写数字识别与涂鸦识别

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言 一.结课文档目录 二.涂鸦识别(篇幅问题只展示其一) 涂鸦识别 引入必要的库函数 导入数据 为各个数据文件添加标签 数 ...

  9. 全栈AI工程师指南,DIY一个识别手写数字的web应用

    作者 | shadow chi 本文经授权转载自 无界社区mixlab(ID:mix-lab) 网上大量教程都是教如何训练模型, 往往我们只学会了训练模型, 而实际应用的环节是缺失的. def AIF ...

最新文章

  1. centos桥接模式网络配置
  2. Visual Studio 32位64位的问题和如何编译32位64位工程的问题
  3. Jmeter_初步认识随笔
  4. c++程序设计_基于proteus的51单片机开发实例30-模块化程序设计
  5. creo管道设计教程_Creo产品设计教程:握力器弹簧建模,一个技巧轻松搞定
  6. IDEA Debug 无法进入断点的解决方法
  7. 机器学习基础算法33-HMM实践
  8. Spring 整合 Redis
  9. 记一次Pr安装转场插件导致AE报错问题解决
  10. C语言基础入门,编程的第一步
  11. Codeforces Round #677 (Div. 3) C. Dominant Piranha
  12. plex插件显示无服务器,deepin 15.11 安装plex和插件
  13. mac 查看 ssh key
  14. invalidate()
  15. 思科证书申请 CCNA CCNP CCIE
  16. Fly deer Technical support
  17. 利息理论习题课1答案
  18. python接口测试断言返回值json格式和数据类型
  19. STM32F10x并行驱动lcd12864遇到的问题及其解决方案
  20. comsol 稳态求解器1(sol1/s1)找不到解

热门文章

  1. Win11微软账号登录不上?Win11登录Microsoft账户出错的解决方法
  2. 小米10至尊纪念版和realmeX7pro玩家版 的区别
  3. c语言1000以内能被7或11,C++编程:求1000以内(包括1000)能被5同时又能被
  4. [原创]邪恶八进制论坛高层会晤
  5. GIT服务器使用基础
  6. 拍拍贷业务数据探索分析-基于R语言
  7. 初入HTML和CSS
  8. Java使用quartz实现任务调度定时任务
  9. java发送邮件附件乱码
  10. 团队环境搭建:MTK平台,Android 9.0内销TV编译服务器配置