深刻学习使用ocr算法识别图片中文字的方法

  公司有个需求,简单点说须要从一张图片中识别出中文,经过python来实现,固然其余程序也行,只要能实现,而小编主要学习python,因此就提了python。一个小白在网上遨游了一天,终于找到一丝丝思绪,特地在此分享,但愿大神提出宝贵的意见。php

  今天仍是在学习OCR算法中,可是好像本身摸索确实比较难一点,并且python实现图片中文识别的方法仍是很少,因此我打算记录一下本身学习的过程。今天看到一个菜鸟均可以用的开源项目,那就是OCR开源项目tesseract,可能对于仍是菜鸟的我来讲,最好不过了,能够试试此项目,还能够看看源码,何乐而不为呢!html

  OCR开源项目不少,给你们一个连接,这个连接列出了现有的比较出名的OCR开源项目,连接以下:python

https://en.wikipedia.org/wiki/Comparison_of_optical_character_recognition_softwaregit

  从上面的排名能够看到,Tesseract是排在第一名的!因此下面就认真学习一下Tesseract。首先介绍一下Tesseract,而后安装,测试,了解其不足等等。github

     Tesseract的OCR引擎目前已做为开源项目发布在Google Project,
其项目主页在这里查看https://github.com/tesseract-ocr, 

    它支持中文OCR,并提供了一个命令行工具。python中对应的包是
pytesseract. 经过这个工具咱们能够识别图片上的文字。

一    Tesseract的安装测试使用

1.1   小编的开发环境以下:

  • windows 7 
  • python 3.6
  • pycharm

 

1.2   下载安装包

  首先下载Tesseract在Windows下的安装版。(由于在国外访问不了谷歌,因此别人翻墙下载了下来,这里给你们百度网盘连接)算法

http://pan.baidu.com/s/1i56Uxlrwindows

  根据https://github.com/tesseract-ocr/tesseract/wiki,找到非官方的安装包,好像只看到64位的安装包    http://digi.bib.uni-mannheim.de/tesseract/tesseract-ocr-setup-4.00.00dev.exe,下载后直接安装便可,可是要记得你的安装目录,咱们等会配置环境变量要用。编辑器

  若是不是作英文的图文识别,还须要下载其余语言的识别包https://github.com/tesseract-ocr/tesseract/wiki/Data-Files。函数

  简体字识别包:https://raw.githubusercontent.com/tesseract-ocr/tessdata/4.00/chi_sim.traineddata工具

  繁体字识别包:https://github.com/tesseract-ocr/tessdata/raw/4.0/chi_tra.traineddata

 

安装python对应的包:pytesseract

pip install pytesseract

1.3    安装Tesseract

  下载Tesseract-OCR引擎,注意要3.0以上才支持中文哦,按照提示安装就行。(此处附上windows 4.0的安装过程)

既然是要训练中文,记得勾选 additional language data

找到中文简体和中文繁体,按需勾选,而后点下一步

能够先不勾选,由于这样直接下载语言的包实在太慢。能够从网页上直接下载语言包,而后等程序安装好后,放入安装目录下tessdata目录下面

 

  下载下来以后一路Next安装好,而后在开始菜单找到其控制台引导程序,以下图所示:

使用Tesseract ocr有两种方式:
    动态库方式 libtesseract和执行程序方式 tesseract.exe

    小编使用的是第二个方式,也方便Python调用(主要是小编比较菜)。

  

 1.4   测试英文字符识别

  上面的安装包里自带了已经训练好的英文-拉丁文识别数据~因此咱们先来测试一下英文字符的识别吧~识别图像以下:

1.4.1 把上面的图片放到Tesseract的安装目录下,以下图所示:

 

1.4.2  打开上面提到的控制台窗口,以下图所示:

1.4.3  在窗口中输入命令:“tesseract.exe 0.jpg 1”,并回车,以下图所示:

01.jpg表明待识别的源文件,1表明输出文件名,默认输出格式是txt文件格式!

注意,上面的 lang以前是-l 而不是-1!

1.4.4 让咱们先查看一下01.jpg照片,以下图:

 

1.4.5  在安装目录下生成了1.txt文件,识别结果以下图所示:

 

   既然安装好了,测试也能够了,咱们就进行实战,作图像识别。

二   python用tesseract-ocr作图像识别

  虽说一行代码能够搞定识别图片,可是咱们须要导入两个库,这是别人写好的封装好的库文件。只有导入人家库,咱们才能识别一行代码实现图片文字。

  • 这里咱们须要用到两个库:pytesseract和PIL
  • 同时咱们还须要安装识别引擎tesseract-ocr

2.1   pytesseract和PIL的安装

  安装这两个包能够借助pip 

- 1,命令行安装 
pip install PIL 
pip install pytesseract 

- 2,若是你用的pycharm编辑器,就能够直接借助pycharm实现快速安装。 

2.2  大概介绍下相关模块的概念

  Python-tesseract 是光学字符识别Tesseract OCR引擎的Python封装类。可以读取任何常规的图片文件(JPG, GIF ,PNG , TIFF等)并解码成可读的语言。在OCR处理期间不会建立任何临文件

  PIL (Python Imaging Library)是 Python 中最经常使用的图像处理库,目前版本为 1.1.7,咱们能够 在这里 下载学习和查找资料。

  Image 类是 PIL 库中一个很是重要的类,经过这个类来建立实例能够有直接载入图像文件,读取处理过的图像和经过抓取的方法获得的图像这三种方法。

  python对图像的处理比较常见的是用pytesseract识别验证码,要安装pytesseract库,必须先安装其依赖的PIL及tesseract-ocr,其中PIL为图像处理库,然后面的tesseract-ocr则为google的ocr识别引擎。

    下载连接:http://www.waitalone.cn/python-php-ocr.html   

    该连接文档描述了如何配置相关环境,以及识别验证码的python代码,
总结起来就三步:    安装PIL.exe;
                           安装tesseract-ocr-setup.exe;
                           安装pip install pytesseract    

 

2.3   解决python2.X中PIL在Python3.X中不能使用

   目前PIL的官方最新版本为1.1.7,支持的版本为python 2.5, 2.6, 2.7,并不支持python3,经查询python3.X用pillow代替,进入DOS命令行窗口,敲入如下代码

pip install pillow

  提示安装成功,再运行程序没有问题。

 2.4 正式识别图片中的文字(包括简单的英文和复杂的英文)

2.4.1 下面进入正题,咱们识别下面的东西,看图(三种状况):

 

 

2.4.2  python代码以下:  

import pytesseract
from PIL import Image

#打开验证码图片
image = Image.open('02.jpg')
#加载一下图片防止报错,此处能够省略
image.load()
#调用show来展现图片,调试用此处能够省略
image.show()
text = pytesseract.image_to_string(Image.open('02.jpg'))
print(text)

2.4.3  查看运行结果,运行后,结果以下:

 

2.4.5 总结

  从上面咱们能够发现,运行代码后的结果, 清晰的印刷体字体比较清晰,基本没有问题。简单的图片识别率仍是能够的,可是复杂的话 就...,因此但愿本身继续学习,继续寻找有用的库。

三   Image模块的用法介绍(转)

3.1  简介

    图像处理是一门应用很是广的技术,而拥有很是丰富第三方扩展库的 Python 固然不会错过这一门盛宴。PIL (Python Imaging Library)是 Python 中最经常使用的图像处理库,目前版本为 1.1.7,咱们能够 在这里 下载学习和查找资料。

    Image 类是 PIL 库中一个很是重要的类,经过这个类来建立实例能够有直接载入图像文件,读取处理过的图像和经过抓取的方法获得的图像这三种方法。

3.2  使用

    导入 Image 模块。而后经过 Image 类中的 open 方法便可载入一个图像文件。若是载入文件失败,则会引发一个 IOError ;若无返回错误,则 open 函数返回一个 Image 对象。如今,咱们能够经过一些对象属性来检查文件内容,即:

1 >>> import Image
2  >>> im = Image.open("j.jpg")
3  >>> print im.format, im.size, im.mode
4 JPEG (440, 330) RGB

  

这里有三个属性,咱们逐一了解。

        format : 识别图像的源格式,若是该文件不是从文件中读取的,则被置为 None 值。

        size : 返回的一个元组,有两个元素,其值为象素意义上的宽和高。

        mode : RGB(true color image),此外还有,L(luminance),CMTK(pre-press image)。

3.3 简单的几何变化

  色彩空间变换。

convert() : 该函数能够用来将图像转换为不一样色彩模式。

   图像加强。

 Filters : 在 ImageFilter 模块中可使用 filter 函数来使用模块中
一系列预约义的加强滤镜。

 

>>>out = im.resize((128, 128))                     

 >>>out = im.rotate(45)                             #逆时针旋转 45 度角。

 >>>out = im.transpose(Image.FLIP_LEFT_RIGHT)       #左右对换。

 >>>out = im.transpose(Image.FLIP_TOP_BOTTOM)       #上下对换。

 >>>out = im.transpose(Image.ROTATE_90)             #旋转 90 度角。

 >>>out = im.transpose(Image.ROTATE_180)            #旋转 180 度角。

>>>out = im.transpose(Image.ROTATE_270)            #旋转 270 度角。