乐趣区

关于python:爬虫系列图像识别与文字处理

从 Google 的无人驾驶汽车到能够辨认假钞的主动售卖机,机器视觉始终都是一个利用宽泛且具备深远的影响和宏伟的愿景的畛域。在接下来的几篇文章中,咱们将重点介绍机器视觉的一个分支:文字辨认,介绍如何用一些 Python 库来辨认和应用在线图片中的文字。

当你不想让本人的文字被网络机器人采集时,把文字做成图片放在网页上是罕用的方法。在一些联系人通讯录里常常能够看到,一个邮箱地址被局部或全副转换成图片。人们可能发觉不出显著的差别,然而机器人浏览这些图片会十分艰难,这种办法能够避免少数垃圾邮件发送器轻易地获取你的邮箱地址。

利用这种人类用户能够失常读取然而大多数机器人都没法读取的图片、验证码(CAPTCHA)就呈现了。验证码读取的难易水平也大不相同,有些验证码比其余的更加难读,前面咱们会介绍这种问题。

然而,验证码并不是网络爬虫数据采集时须要进行图像转文字翻译工作的惟一对象。目前,有很多文档都是简略地扫描后间接放到网上,它们和互联网上的很多文档一样都没法儿间接应用,只管它们都“近在眼前”。如果无奈将图像转为文字,要想应用这些文档的内容,就只能人工手敲了——没人违心花工夫干这事儿。

将图像翻译成文字个别被称为 光学文字辨认(Optical Character Recognition, OCR)。能够实现 OCR 的底层库并不多,目前很多库都是应用独特的几个底层 OCR 库,或者是在下面进行定制。这类 OCR 零碎有时会变得非常复杂。

OCR 库概述

在读取和解决图像、图像相干的机器学习以及创立图像等工作中,Python 始终都是十分杰出的语言。尽管有很多库能够进行图像处理,但在这里咱们只重点介绍两个库:Pillow 和 Tesseract。

每个库都能够从它们的网站上下载并装置,或者用第三方管理器(像 pip)通过“pillow”和“pytesseract”进行装置。

Pillow

只管 Pillow 算不上是图像处理性能最全的库,然而它领有你须要应用的全副性能,除非你要用 Python 重写一个 Photoshop 或进行更加简单的钻研。它也是一个文档健全且非常易用的库。

Pillow 是从 Python 2.x 版本的 Python 图像库(Python Imaging Library, PIL)分进去的,反对 Python 3.x 版本。和 PIL 一样,Pillow 也能够轻松地导入代码,并通过大量的过滤、润饰甚至像素级的变换操作解决图片:

from PIL import Image, ImageFilter


class ImageRecognitionWordProcessing(object):

    @staticmethod
    def process_image():
        kitten = Image.open("files/Snipaste_2022-04-06_10-36-03.png")
        blurryKitten = kitten.filter(ImageFilter.GaussianBlur)
        blurryKitten.save("files/Snipaste_2022-04-06_10-36-03_new.png")
        blurryKitten.show()


if __name__ == '__main__':
    ImageRecognitionWordProcessing().process_image()

在下面这个例子中,图片 kitten.jpg 会在默认的图片浏览器里关上,不过看着会有点儿含糊。之后这个比拟含糊的图片被另存为 kitten_blured.jpg,与原图放在一个文件夹里。

咱们能够用 Pillow 实现图片的预处理,让机器能够更不便地读取图片。除了这些简略的事件之外,Pillow 还能够实现许多简单的图像处理工作。更多的信息,请查看 Pillow 文档。

Tesseract

Tesseract 是一个 OCR 库,目前由 Google 资助(Google 也是一家以 OCR 和机器学习技术闻名于世的公司)。Tesseract 是目前公认最优良、最准确的开源 OCR 零碎。

除了极高的精确度,Tesseract 也具备很高的灵活性。它能够通过训练辨认出任何字体(只有这些字体的格调放弃不变就能够,前面咱们会介绍),也能够辨认出任何 Unicode 字符。

Tesseract 是一个 Python 的命令行工具,不是通过 import 语句导入的库。装置之后,应用 tesseract 命令在 Python 的里面运行。

装置 Tesseract

在 Windows 零碎上,能够下载 Tesseract 安装文件,装置即可。

Linux 用户能够通过 apt-get 装置:

$sudo apt-get install tesseract-ocr

要应用 Tesseract 的性能,比方前面的示例中训练程序辨认字母,你须要先在零碎中设置一个新的环境变量 $TESSDATA_PREFIX,让 Tesseract 晓得训练的数据文件存储在哪里。

在大多数 Linux 零碎和 Mac OS X 零碎上,你能够这么设置:

$export TESSDATA_PREFIX=/usr/local/share/

值得注意的是,尽管 /usr/local/share/ 是 Tesseract 的默认数据存储地位,然而你还是应该认真地检查一下,确保本人的装置没问题。

在 Windows 零碎上也相似,你能够通过上面这行命令设置环境变量:

#setx TESSDATA_PREFIX C:\Program Files\Tesseract OCR\

NumPy

尽管 NumPy 并非解决 OCR 问题时必须应用的库,然而如果你想训练 Tesseract 辨认互联网上一些图片验证码,那么就会用到它。NumPy 是一个十分弱小的库,具备大量线性代数以及大规模科学计算的办法。因为 NumPy 能够用数学方法把图片示意成微小的像素数组,所以它能够流畅地配合 Tesseract 实现工作。

和其余 Python 库一样,NumPy 能够通过第三方包管理器(比方 pip)来装置:

$pip install numpy



退出移动版