13.图像识别与文字处理

本篇重点介绍机器视觉的一个分支——文字识别,介绍如何用一些 Python 库来识别和使用基于文字的图像。
验证码(CAPTCHA)就利用了这种人类用户可以正常读取但是大多数机器人都无法读取的图片。
将图像转化成文字被称为光学字符识别(optical character recognition,OCR)
1.OCR库概述
Python有很多库可以进行图像处理,但这里只重点介绍两个库:Pillow 和Tesseract。这两个库互为补充,共同对互联网上的图片进行处理和 OCR 识别。
Pillow 执行第一步,清洗和过滤图像,而 Tesseract 尝试将图像中的形状与库里面存储的文字相匹配。
(1)Pillow
Pillow 是从 Python 2.x 的 Python 图像库(Python Imaging Library,PIL)分出来的,支持Python 3.x。和 PIL 一样,Pillow 也可以轻松地导入图片,并通过大量的过滤、修饰甚至像素级的变换处理图片:

from PIL import Image, ImageFilter

kitten = Image.open('kitten.jpg')
blurryKitten = kitten.filter(ImageFilter.GaussianBlur)
blurryKitten.save('kitten_blurred.jpg')
blurryKitten.show()

图片前后对比:
在这里插入图片描述
在这里插入图片描述
ImageFilter模块,Python中的图像滤波,主要对图像进行平滑、锐化、边界增强等滤波处理。GaussianBlur(高斯模糊)为滤波器的一种。图像滤波是指在尽量保留图像细节特征的条件下对目标图像的噪声进行抑制。由于成像系统、传输介质和记录设备等的不完善,数字图像在其形成、传输记录过程中往往会受到多种噪声的污染,所以才有图像滤波。
Pillow 还可以完成许多复杂的图像处理工作。更多的信息,请查看 Pillow 文档。
(2)Tesseract
Tesseract 是一个 OCR 库,Tesseract 是目前公认最优秀、最精确的开源 OCR 系统。
Tesseract 具有很高的灵活性。它可以通过训练识别出任何字体(只要这些字体的风格保持不变就可以),也可以识别出任何 Unicode 字符。
注:本篇的Tesseract指的是命令行软件,pytesseract指的是第三方 Python 包装器。

安装Tesseract
Windows 系统上,下载方便的可执行安装文件安装即可。
https://digi.bib.uni-mannheim.de/tesseract/ 下载3.05版本的(带dev的为开发版本,不带dev为稳定版本) tesseract-ocr-setup-3.05.00dev.exe,直接执行文件安装,然后将安装目录加入到系统变量Path的值中。
命令行执行命令 tesseract -v ,执行成功即安装成功。
在这里插入图片描述
pytesseract
利用已安装好的 Tesseract 读取图像文件并输出字符串和可用在 Python 代码中的对象。
命令行执行 pip install pytesseract 安装 pytesseract 。
结合 PIL 使用 pytesseract,以从图像中读取文字:

from PIL import Image
import pytesseract

print(pytesseract.image_to_string(Image.open('text_2.png')))

在这里插入图片描述
在这里插入图片描述
上述代码要运行成功需要在Python安装目录下找到pytesseract.py文件(D:\APP\Python\Lib\site-packages\pytesseract\pytesseract.py)修改代码 tesseract_cmd = r’D:\APP\Tesseract-OCR\tesseract.exe’ (添加tesseract安装目录)
在这里插入图片描述
image_to_boxes() :估计边界(每个字符的边界的像素位置)。第一列符号是图片中的每个字符,后面的 4 个数字分别是包围这个字符的最小矩形的坐标(左下角x,y坐标,右上角x,y坐标),最后一个数字“0”表示图片样本的编号。

print(pytesseract.image_to_boxes(Image.open('text_2.png')))

在这里插入图片描述
image_to_data():返回所有数据的完整输出,例如置信分数、页数、行数、像素位置数据以及其他信息:

print(pytesseract.image_to_data(Image.open('files/test.png')))

在这里插入图片描述
默认情况下,最后两个输出文件是用空格或 tab 分隔的字符串文件,但是你也可以输出字典,或者在不能够进行 UTF-8 解码的情况下输出字节字符串:

from PIL import Image
import pytesseract
from pytesseract import Output


print(pytesseract.image_to_string(Image.open('text_2.png'), output_type=Output.BYTES))
print('\n')
print(pytesseract.image_to_data(Image.open('text_2.png'), output_type=Output.DICT))

在这里插入图片描述
本篇pytesseract 库和命令行 Tesseract 结合起来使用,并从 Python 通过 subprocess 库触发 Tesseract。

NumPy
训练Tesseract需要用到这个库。
NumPy 是一个非常强大的库,具有大量线性代数以及大规模科学计算的方法。因为NumPy 可以用数学方法把图片表示成巨大的像素数组,所以它可以流畅地配合 Tesseract完成任务。
NumPy 可以通过第三方包管理器(比如 pip)或者通过下载包利用$python setup.py install 来安装。
NumPy可以替代 Python 内置的数学库并且有很多实用的功能,特别是数组的运算操作。
NumPy 的导入和使用方式如下所示:(打印一组数的标准差和平均值)

import numpy as np
numbers = [100, 102, 98, 97, 103]
print(np.std(numbers)) 
print(np.mean(numbers)
  • 0
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值