为了大家能够对人工智能常用的 Python 库有一个初步的了解,以选择能够满足自己需求的库进行学习,对目前较为常见的人工智能库进行简要全面的介绍。


**1、Numpy
**
NumPy(Numerical Python)是 Python的一个扩展程序库,支持大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库,Numpy底层使用C语言编写,数组中直接存储对象,而不是存储对象指针,所以其运算效率远高于纯Python代码。我们可以在示例中对比下纯Python与使用Numpy库在计算列表sin值的速度对比:
import numpy as np``import math``import random``import time`` ``start = time.time()``for i in range(10):` `list_1 = list(range(1,10000))` `for j in range(len(list_1)):` `list_1[j] = math.sin(list_1[j])``print("使用纯Python用时{}s".format(time.time()-start))`` ``start = time.time()``for i in range(10):` `list_1 = np.array(np.arange(1,10000))` `list_1 = np.sin(list_1)``print("使用Numpy用时{}s".format(time.time()-start))
从如下运行结果,可以看到使用 Numpy 库的速度快于纯 Python 编写的代码:
使用纯Python用时0.017444372177124023s
使用Numpy用时0.001619577407836914s
**2、OpenCV
**
OpenCV 是一个的跨平台计算机视觉库,可以运行在 Linux、Windows 和 Mac OS 操作系统上。它轻量级而且高效——由一系列 C 函数和少量 C++ 类构成,同时也提供了 Python 接口,实现了图像处理和计算机视觉方面的很多通用算法。下面代码尝试使用一些简单的滤镜,包括图片的平滑处理、高斯模糊等:
import numpy as np``import cv2 as cv``from matplotlib import pyplot as plt``img = cv.imread('h89817032p0.png')``kernel = np.ones((5,5),np.float32)/25``dst = cv.filter2D(img,-1,kernel)``blur_1 = cv.GaussianBlur(img,(5,5),0)``blur_2 = cv.bilateralFilter(img,9,75,75)``plt.figure(figsize=(10,10))``plt.subplot(221),plt.imshow(img[:,:,::-1]),plt.title('Original')``plt.xticks([]), plt.yticks([])``plt.subplot(222),plt.imshow(dst[:,:,::-1]),plt.title('Averaging')``plt.xticks([]), plt.yticks([])``plt.subplot(223),plt.imshow(blur_1[:,:,::-1]),plt.title('Gaussian')``plt.xticks([]), plt.yticks([])``plt.subplot(224),plt.imshow(blur_1[:,:,::-1]),plt.title('Bilateral')``plt.xticks([]), plt.yticks([])``plt.show()

OpenCV
**3、Scikit-image
**
scikit-image是基于scipy的图像处理库,它将图片作为numpy数组进行处理。例如,可以利用scikit-image改变图片比例,scikit-image提供了rescale、resize以及downscale_local_mean等函数。
from skimage import data, color, io``from skimage.transform import rescale, resize, downscale_local_mean`` ``image = color.rgb2gray(io.imread('h89817032p0.png'))`` ``image_rescaled = rescale(image, 0.25, anti_aliasing=False)``image_resized = resize(image, (image.shape[0] // 4, image.shape[1] // 4),` `anti_aliasing=True)``image_downscaled = downscale_local_mean(image, (4, 3))``plt.figure(figsize=(20,20))``plt.subplot(221),plt.imshow(image, cmap='gray'),plt.title('Original')``plt.xticks([]), plt.yticks([])``plt.subplot(222),plt.imshow(image_rescaled, cmap='gray'),plt.title('Rescaled')``plt.xticks([]), plt.yticks([])``plt.subplot(223),plt.imshow(image_resized, cmap='gray'),plt.title('Resized')``plt.xticks([]), plt.yticks([])``plt.subplot(224),plt.imshow(image_downscaled, cmap='gray'),plt.title('Downscaled')``plt.xticks([]), plt.yticks([])``plt.show()

Scikit-image
**4、PIL
**
Python Imaging Library(PIL) 已经成为 Python 事实上的图像处理标准库了,这是由于,PIL 功能非常强大,但API却非常简单易用。但是由于PIL仅支持到 Python 2.7,再加上年久失修,于是一群志愿者在 PIL 的基础上创建了兼容的版本,名字叫 Pillow,支持最新 Python 3.x,又加入了许多新特性,因此,我们可以跳过 PIL,直接安装使用 Pillow。
**5、Pillow
**
使用 Pillow 生成字母验证码图片:
from PIL import Image, ImageDraw, ImageFont, ImageFilter`` ``import random`` ``# 随机字母:``def rndChar():` `return chr(random.randint(65, 90))`` ``# 随机颜色1:``def rndColor():` `return (random.randint(64, 255), random.randint(64, 255), random.randint(64, 255))`` ``# 随机颜色2:``def rndColor2():` `return (random.randint(32, 127), random.randint(32, 127), random.randint(32, 127))`` ``# 240 x 60:``width = 60 * 6``height = 60 * 6``image = Image.new('RGB', (width, height), (255, 255, 255))``# 创建Font对象:``font = ImageFont.truetype('/usr/share/fonts/wps-office/simhei.ttf', 60)``# 创建Draw对象:``draw = ImageDraw.Draw(image)``# 填充每个像素:``for x in range(width):` `for y in range(height):` `draw.point((x, y), fill=rndColor())``# 输出文字:``for t in range(6):` `draw.text((60 * t + 10, 150), rndChar(), font=font, fill=rndColor2())``# 模糊:``image = image.filter(ImageFilter.BLUR)``image.save('code.jpg', 'jpeg')

验证码
**6、SimpleCV
**
SimpleCV 是一个用于构建计算机视觉应用程序的开源框架。使用它,可以访问高性能的计算机视觉库,如 OpenCV,而不必首先了解位深度、文件格式、颜色空间、缓冲区管理、特征值或矩阵等术语。但其对于 Python3 的支持很差很差,在 Python3.7 中使用如下代码:
from SimpleCV import Image, Color, Display``# load an image from imgur``img = Image('http://i.imgur.com/lfAeZ4n.png')``# use a keypoint detector to find areas of interest``feats = img.findKeypoints()``# draw the list of keypoints``feats.draw(color=Color.RED)``# show the resulting image.` `img.show()``# apply the stuff we found to the image.``output = img.applyLayers()``# save the results.``output.save('juniperfeats.png')
会报如下错

238

被折叠的 条评论
为什么被折叠?



