Python的开源人脸识别库:离线识别率高达99.38%附源码!

Python的开源人脸识别库:离线识别率高达99.38%(附源码)!

进群:548377875   即可获取数十套PDF哦!源码后台私信~

以往的人脸识别主要是包括人脸图像采集、人脸识别预处理、身份确认、身份查找等技术和系统。现在人脸识别已经慢慢延伸到了ADAS中的驾驶员检测、行人跟踪、甚至到了动态物体的跟踪。由此可以看出,人脸识别系统已经由简单的图像处理发展到了视频实时处理。而且算法已经由以前的Adaboots、PCA等传统的统计方法转变为CNN、RCNN等深度学习及其变形的方法。现在也有相当一部分人开始研究3维人脸识别识别,这种项目目前也受到了学术界、工业界和国家的支持

首先看看现在的研究现状。如上的发展趋势可以知道,现在的主要研究方向是利用深度学习的方法解决视频人脸识别。

主要的研究人员

如下:中科院计算所的山世光教授、中科院生物识别研究所的李子青教授、清华大学的苏光大教授、香港中文大学的汤晓鸥教授、Ross B. Girshick等等。

主要开源项目

  1. SeetaFace人脸识别引擎。该引擎由中科院计算所山世光研究员带领的人脸识别研究组研发。代码基于C++实现,且不依赖于任何第三方的库函数,开源协议为BSD-2,可供学术界和工业界免费使用。

主要软件API/SDK:

  1. face++。Face++.com 是一个提供免费人脸检测、人脸识别、人脸属性分析等服务的云端服务平台。Face++是北京旷视科技有限公司旗下的全新人脸技术云平台,在黑马大赛中,Face++获得年度总冠军,已获得联想之星投资。
  2. skybiometry.。主要包含了face detection、face recognition、face grouping。

主要的人脸识别图像库

目前公开的比较好的人脸图像库有LFW(Labelled Faces in the Wild)和YFW(Youtube Faces in the Wild)。现在的实验数据集基本上是来源于LFW,而且目前的图像人脸识别的精度已经达到99%,基本上现有的图像数据库已经被刷爆。下面是现有人脸图像数据库的总结:

Python的开源人脸识别库:离线识别率高达99.38%(附源码)!

现在在中国做人脸识别的公司已经越来越多,应用也非常的广泛。其中市场占有率最高的是汉王科技。主要公司的研究方向和现状如下:

  1. 汉王科技:汉王科技主要是做人脸识别的身份验证,主要用在门禁系统、考勤系统等等。
  2. 科大讯飞:科大讯飞在香港中文大学汤晓鸥教授团队支持下,开发出了一个基于高斯过程的人脸识别技术–Gussian face, 该技术在LFW上的识别率为98.52%,目前该公司的DEEPID2在LFW上的识别率已经达到了99.4%。
  3. 川大智胜:目前该公司的研究亮点是三维人脸识别,并拓展到3维全脸照相机产业化等等。
  4. 商汤科技:主要是一家致力于引领人工智能核心“深度学习”技术突破,构建人工智能、大数据分析行业解决方案的公司,目前在人脸识别、文字识别、人体识别、车辆识别、物体识别、图像处理等方向有很强的竞争力。在人脸识别中有106个人脸关键点的识别。

人脸识别的过程

人脸识别主要分为四大块:人脸定位(face detection)、 人脸校准(face alignment)、 人脸确认(face verification)、人脸鉴别(face identification)。

人脸定位(face detection)

对图像中的人脸进行检测,并将结果用矩形框框出来。在openCV中有直接能拿出来用的Harr分类器。

人脸校准(face alignment)

对检测到的人脸进行姿态的校正,使其人脸尽可能的”正”,通过校正可以提高人脸识别的精度。校正的方法有2D校正、3D校正的方法,3D校正的方法可以使侧脸得到较好的识别。 在进行人脸校正的时候,会有检测特征点的位置这一步,这些特征点位置主要是诸如鼻子左侧,鼻孔下侧,瞳孔位置,上嘴唇下侧等等位置,知道了这些特征点的位置后,做一下位置驱动的变形,脸即可被校”正”了。如下图所示:

Python的开源人脸识别库:离线识别率高达99.38%(附源码)!

这里介绍一种MSRA在14年的技术:Joint Cascade Face Detection and Alignment(ECCV14)。这篇文章直接在30ms的时间里把detection和alignment都给做了。

人脸确认(face verification)

Face verification,人脸校验是基于pair matching的方式,所以它得到的答案是“是”或者“不是”。在具体操作的时候,给定一张测试图片,然后挨个进行pair matching,matching上了则说明测试图像与该张匹配上的人脸为同一个人的人脸。一般在小型办公室人脸刷脸打卡系统中采用的(应该)是这种方法,具体操作方法大致是这样一个流程:离线逐个录入员工的人脸照片(一个员工录入的人脸一般不止一张),员工在刷脸打卡的时候相机捕获到图像后,通过前面所讲的先进行人脸检测,然后进行人脸校正,再进行人脸校验,一旦match结果为“是”,说明该名刷脸的人员是属于本办公室的,人脸校验到这一步就完成了。在离线录入员工人脸的时候,我们可以将人脸与人名对应,这样一旦在人脸校验成功后,就可以知道这个人是谁了。上面所说的这样一种系统优点是开发费用低廉,适合小型办公场所,缺点是在捕获时不能有遮挡,而且还要求人脸姿态比较正(这种系统我们所有,不过没体验过)。下图给出了示意说明:

Python的开源人脸识别库:离线识别率高达99.38%(附源码)!

人脸识别(face identification/recognition)

Face identification或Face recognition,人脸识别正如下图所示的,它要回答的是“我是谁?”,相比于人脸校验采用的pair matching,它在识别阶段更多的是采用分类的手段。它实际上是对进行了前面两步即人脸检测、人脸校正后做的图像(人脸分类

Python的开源人脸识别库:离线识别率高达99.38%(附源码)!


根据上面四个概念的介绍,我们可以了解到人脸识别主要包括三个大的、独立性强的模块:

Python的开源人脸识别库:离线识别率高达99.38%(附源码)!

我们将上面的步骤进行详细的拆分,得到下面的过程图:

Python的开源人脸识别库:离线识别率高达99.38%(附源码)!

人脸识别分类

现在随着人脸识别技术的发展,人脸识别技术主要分为了三类:一是基于图像的识别方法、二是基于视频的识别方法、三是三维人脸识别方法

基于图像的识别方法

这个过程是一个静态的图像识别过程,主要利用图像处理。主要的算法有PCA、EP、kernel method、 Bayesian Framwork、SVM 、HMM、Adaboot等等算法。但在2014年,人脸识别利用Deep learning 技术取得了重大突破,为代表的有deepface的97.25%、face++的97.27%,但是deep face的训练集是400w集的,而同时香港中文大学汤晓鸥的Gussian face的训练集为2w。

基于视频的实时识别方法

这个过程可以看出人脸识别的追踪过程,不仅仅要求在视频中找到人脸的位置和大小,还需要确定帧间不同人脸的对应关系。

DeepFace

参考论文(资料):

1. DeepFace论文。DeepFace:Closing the Gap to Human-level Performance in Face Verificaion

2. 卷积神经网络了解博客。http://blog.csdn.net/zouxy09/article/details/8781543

3. 卷积神经网络的推导博客。http://blog.csdn.net/zouxy09/article/details/9993371/

4. Note on convolution Neural Network.

5. Neural Network for Recognition of Handwritten Digits

6. DeepFace博文:http://blog.csdn.net/Hao_Zhang_Vision/article/details/52831399?locationNum=2&fps=1


DeepFace是FaceBook提出来的,后续有DeepID和FaceNet出现。而且在DeepID和FaceNet中都能体现DeepFace的身影,所以DeepFace可以谓之CNN在人脸识别的奠基之作,目前深度学习在人脸识别中也取得了非常好的效果。所以这里我们先从DeepFace开始学习。

在DeepFace的学习过程中,不仅将DeepFace所用的方法进行介绍,也会介绍当前该步骤的其它主要算法,对现有的图像人脸识别技术做一个简单、全面的叙述。

1.DeepFace的基本框架

1.1 人脸识别的基本流程

face detection -> face alignment -> face verification -> face identification

1.2 人脸检测(face detection)

1.2.1 现有技术:

haar分类

人脸检测(detection)在opencv中早就有直接能拿来用的haar分类器,基于Viola-Jones算法。

Adaboost算法(级联分类器)

1.参考论文: Robust Real-Time face detection 。

2. 参考中文博客:http://blog.csdn.net/cyh_24/article/details/39755661

3. 博客:http://blog.sina.com.cn/s/blog_7769660f01019ep0.html


1.2.2 文章中所用方法

本文中采用了基于检测点的人脸检测方法(fiducial Point Detector)。

  • 先选择6个基准点,2只眼睛中心、 1个鼻子点、3个嘴上的点。
  • 通过LBP特征用SVR来学习得到基准点。

效果如下

Python的开源人脸识别库:离线识别率高达99.38%(附源码)!

1.3 人脸校准(face alignment)

2D alignment

  • 对Detection后的图片进行二维裁剪, scale,rotate and translate the image into six anchor locations。 将人脸部分裁剪出来。

3D alignment

  • 找到一个3D 模型,用这个3D模型把二维人脸crop成3D人脸。67个基点,然后delaunay三角化,在轮廓处添加三角形来避免不连续。
  • 将三角化后的人脸转换成3D形状
  • 三角化后的人脸变为有深度的3D三角网
  • 将三角网做偏转,使人脸的正面朝前
  • 最后放正的人脸

效果如下

Python的开源人脸识别库:离线识别率高达99.38%(附源码)!

上面的2D alignment对应(b)图,3D alignment依次对应(c) ~ (h)。

1.4 人脸表示(face verification)

1.4.1 现有技术

LBP && joint Beyesian

通过高维LBP跟Joint Bayesian这两个方法结合。

  • 论文: Bayesian Face Revisited: A Joint Formulation

DeepID系列

将七个联合贝叶斯模型使用SVM进行融合,精度达到99.15%

  • 论文: Deep Learning Face Representation by Joint Identification-Verification

1.4.2 文章中的方法

Python的开源人脸识别库:离线识别率高达99.38%(附源码)!

论文中通过一个多类人脸识别任务来训练深度神经网络(DNN)。网络结构如上图所示。

结构参数

经过3D对齐以后,形成的图像都是152×152的图像,输入到上述网络结构中,该结构的参数如下:


提取低水平特征

过程如下所示:

  1. 预处理阶段:输入3通道的人脸,并进行3D校正,再归一化到152*152像素大小——152*152*3.
  2. 通过卷积层C1:C1包含32个11*11*3的滤波器(即卷积核),得到32张特征图——32*142*142*3。
  3. 通过max-polling层M2:M2的滑窗大小为3*3,滑动步长为2,3个通道上分别独立polling。
  4. 通过另一个卷积层C3:C3包含16个9*9*16的3维卷积核

上述3层网络是为了提取到低水平的特征,如简单的边缘特征和纹理特征。Max-polling层使得卷积网络对局部的变换更加鲁棒。如果输入是校正后的人脸,就能使网络对小的标记误差更加鲁棒。然而这样的polling层会使网络在面部的细节结构和微小纹理的精准位置上丢失一些信息。因此,文中只在第一个卷积层后面接了Max-polling层。这些前面的层称之为前端自适应的预处理层级。然而对于许多计算来讲,这是很必要的,这些层的参数其实很少。它们仅仅是把输入图像扩充成一个简单的局部特征集。

后续层

L4,L5,L6都是局部连接层,就像卷积层使用滤波器一样,在特征图像的每一个位置都训练学习一组不同的滤波器。由于校正后不同区域的有不同的统计特性,卷积网络在空间上的稳定性的假设不能成立。比如说,相比于鼻子和嘴巴之间的区域,眼睛和眉毛之间的区域展现出非常不同的表观并且有很高的区分度。换句话说,通过利用输入的校正后的图像,定制了DNN的结构。

使用局部连接层并没有影响特征提取时的运算负担,但是影响了训练的参数数量。仅仅是由于有如此大的标记人脸库,我们可以承受三个大型的局部连接层。局部连接层的输出单元受到一个大型的输入图块的影响,可以据此调整局部连接层的使用(参数)(不共享权重)

比如说,L6层的输出受到一个74*74*3的输入图块的影响,在校正后的人脸中,这种大的图块之间很难有任何统计上的参数共享。

顶层

最后,网络顶端的两层(F7,F8)是全连接的:每一个输出单元都连接到所有的输入。这两层可以捕捉到人脸图像中距离较远的区域的特征之间的关联性。比如,眼睛的位置和形状,与嘴巴的位置和形状之间的关联性(这部分也含有信息)可以由这两层得到。第一个全连接层F7的输出就是我们原始的人脸特征表达向量。

在特征表达方面,这个特征向量与传统的基于LBP的特征描述有很大区别。传统方法通常使用局部的特征描述(计算直方图)并用作分类器的输入。

最后一个全连接层F8的输出进入了一个K-way的softmax(K是类别个数),即可产生类别标号的概率分布。用Ok表示一个输入图像经过网络后的第k个输出,即可用下式表达输出类标号k的概率:

Python的开源人脸识别库:离线识别率高达99.38%(附源码)!

训练的目标是最大化正确输出类别(face 的id)的概率。通过最小化每个训练样本的叉熵损失实现这一点。用k表示给定输入的正确类别的标号,则叉熵损失是:

Python的开源人脸识别库:离线识别率高达99.38%(附源码)!

通过计算叉熵损失L对参数的梯度以及使用随机梯度递减的方法来最小化叉熵损失。

梯度是通过误差的标准反向传播来计算的。非常有趣的是,本网络产生的特征非常稀疏。超过75%的顶层特征元素是0。这主要是由于使用了ReLU激活函数导致的。这种软阈值非线性函数在所有的卷积层,局部连接层和全连接层(除了最后一层F8)都使用了,从而导致整体级联之后产生高度非线性和稀疏的特征。稀疏性也与使用使用dropout正则化有关,即在训练中将随机的特征元素设置为0。我们只在F7全连接层使用了dropout.由于训练集合很大,在训练过程中我们没有发现重大的过拟合。

给出图像I,则其特征表达G(I)通过前馈网络计算出来,每一个L层的前馈网络,可以看作是一系列函数

Python的开源人脸识别库:离线识别率高达99.38%(附源码)!

归一化

在最后一级,我们把特征的元素归一化成0到1,以此降低特征对光照变化的敏感度。特征向量中的每一个元素都被训练集中对应的最大值除。然后进行L2归一化。由于我们采用了ReLU激活函数,我们的系统对图像的尺度不变性减弱。

对于输出的4096-d向量:

  • 先每一维进行归一化,即对于结果向量中的每一维,都要除以该维度在整个训练集上的最大值。
  • 每个向量进行L2归一化。

2. 验证

2.1 卡方距离

该系统中,归一化后的DeepFace特征向量与传统的基于直方图的特征(如LBP)有一下相同之处:

  1. 所有值均为负
  2. 非常稀疏
  3. 特征元素的值都在区间 [0,1]之间

卡方距离计算公式如下:

Python的开源人脸识别库:离线识别率高达99.38%(附源码)!

2.2 Siamese network

文章中也提到了端到端的度量学习方法,一旦学习(训练)完成,人脸识别网络(截止到F7)在输入的两张图片上重复使用,将得到的2个特征向量直接用来预测判断这两个输入图片是否属于同一个人。这分为以下步骤:

a. 计算两个特征之间的绝对差别;

b,一个全连接层,映射到一个单个的逻辑单元(输出相同/不同)。

3. 实验评估

3.1 数据集

  • Social Face Classification Dataset(SFC): 4.4M张人脸/4030人
  • LFW: 13323张人脸/5749人
  • restricted: 只有是/不是的标记
  • unrestricted:其他的训练对也可以拿到
  • unsupervised:不在LFW上训练
  • Youtube Face(YTF): 3425videos/1595人

result on LFW

Python的开源人脸识别库:离线识别率高达99.38%(附源码)!

result on YTF

Python的开源人脸识别库:离线识别率高达99.38%(附源码)!

DeepFace与之后的方法的最大的不同点在于,DeepFace在训练神经网络前,使用了对齐方法。论文认为神经网络能够work的原因在于一旦人脸经过对齐后,人脸区域的特征就固定在某些像素上了,此时,可以用卷积神经网络来学习特征。

本文的模型使用了C++工具箱dlib基于深度学习的最新人脸识别方法,基于户外脸部数据测试库Labeled Faces in the Wild 的基准水平来说,达到了99.38%的准确率。

更多算法

http://www.gycc.com/trends/face%20recognition/overview/

dlib:http://dlib.net/数据测试库Labeled Faces in the Wild:http://vis-www.cs.umass.edu/lfw/

模型提供了一个简单的 face_recognition 命令行工具让用户通过命令就能直接使用图片文件夹进行人脸识别操作。

图片中捕捉人脸特征

在一张图片中捕捉到所有的人脸

Python的开源人脸识别库:离线识别率高达99.38%(附源码)!

找到并处理图片人脸的特征

找到每个人眼睛、鼻子、嘴巴和下巴的位置和轮廓。

import face_recognition

image = face_recognition.load_image_file("your_file.jpg")

face_locations = face_recognition.face_locations(image)

Python的开源人脸识别库:离线识别率高达99.38%(附源码)!

捕捉脸部特征有很重要的用途,当然也可以用来进行图片的数字美颜digital make-up(例如美图秀秀)

digital make-up:https://github.com/ageitgey/face_recognition/blob/master/examples/digital_makeup.py

识别图片中的人脸

识别谁出现在照片里

Python的开源人脸识别库:离线识别率高达99.38%(附源码)!

Python的开源人脸识别库:离线识别率高达99.38%(附源码)!

安装步骤

方法支持python3/python2,我们只在macOS和Linux中测试过,还不知是否适用于Windows。

使用pypi的pip3 安装此模块(或是Python 2的pip2)

重要提示:在编译dlib时可能会出问题,你可以通过安装来自源(而不是pip)的dlib来修复错误,请见安装手册How to install dlib from source

https://gist.github.com/ageitgey/629d75c1baac34dfa5ca2a1928a7aeaf

通过手动安装dlib,运行pip3 install face_recognition来完成安装。

使用方法命令行界面

当你安装face_recognition,你能得到一个简洁的叫做face_recognition的命令行程序,它能帮你识别一张照片或是一个照片文件夹中的所有人脸

首先,你需要提供一个包含一张照片的文件夹,并且你已经知道照片中的人是谁,每个人都要有一张照片文件,且文件名需要以该人的姓名命名;

Python的开源人脸识别库:离线识别率高达99.38%(附源码)!

然后你需要准备另外一个文件夹,里面装有你想要识别人脸照片;

Python的开源人脸识别库:离线识别率高达99.38%(附源码)!

接下来你只用运行face_recognition命令,程序能够通过已知人脸文件夹识别出未知人脸照片中的人是谁;

Python的开源人脸识别库:离线识别率高达99.38%(附源码)!

针对每个人脸都要一行输出,数据是文件加上识别到的人名,以逗号分隔。

如果你只是想要知道每个照片中的人名而不要文件名,可以进行如下操作:

Python的开源人脸识别库:离线识别率高达99.38%(附源码)!

python模块

你可以通过引入face_recognition就能完成人脸识别操作:

API 文档: https://face-recognition.readthedocs.io.

图片自动识别所有人脸

请参照此案例this example: https://github.com/ageitgey/face_recognition/blob/master/examples/find_faces_in_picture.py

识别图片中的人脸并告知姓名

请参照此案例this example: https://github.com/ageitgey/face_recognition/blob/master/examples/recognize_faces_in_pictures.py

Python代码案例

所有例子在此 here.

https://github.com/ageitgey/face_recognition/tree/master/examples

·找到照片中的人脸Find faces in a photograph

https://github.com/ageitgey/face_recognition/blob/master/examples/find_faces_in_picture.py

· 识别照片中的面部特征Identify specific facial features in a photograph

https://github.com/ageitgey/face_recognition/blob/master/examples/find_facial_features_in_picture.py

· 使用数字美颜Apply (horribly ugly) digital make-up

https://github.com/ageitgey/face_recognition/blob/master/examples/digital_makeup.py

·基于已知人名找到并识别出照片中的未知人脸Find and recognize unkNown faces in a photograph based on photographs of kNown people

https://github.com/ageitgey/face_recognition/blob/master/examples/recognize_faces_in_pictures.py

人脸识别方法的原理

如果你想学习此方法人脸定位和识别原理,请参见read my article。

https://medium.com/@ageitgey/machine-learning-is-fun-part-4-modern-face-recognition-with-deep-learning-c3cffc121d78

注意事项

· 本人脸识别模型仅限用于成人,对于儿童来说效果不佳,模型可能会由于使用认的对比阈值(0.6)而无法清楚识别出儿童的脸。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


我最近重新拾起了计算机视觉,借助Python的opencv还有face_recognition库写了个简单的图像识别demo,额外定制了一些内容,原本想打包成exe然后发给朋友,不过在这当中遇到了许多小问题,都解决了,记录一下踩过的坑。 1、Pyinstaller打包过程当中出现warning,跟d
说到Pooling,相信学习过CNN的朋友们都不会感到陌生。Pooling在中文当中的意思是“池化”,在神经网络当中非常常见,通常用的比较多的一种是Max Pooling,具体操作如下图: 结合图像理解,相信你也会大概明白其中的本意。不过Pooling并不是只可以选取2x2的窗口大小,即便是3x3,
记得大一学Python的时候,有一个题目是判断一个数是否是复数。当时觉得比较复杂不好写,就琢磨了一个偷懒的好办法,用异常处理的手段便可以大大程度帮助你简短代码(偷懒)。以下是判断整数和复数的两段小代码: 相信看到这里,你也有所顿悟,能拓展出更多有意思的方法~
文章目录 3 直方图Histogramplot1. 基本直方图的绘制 Basic histogram2. 数据分布与密度信息显示 Control rug and density on seaborn histogram3. 带箱形图的直方图 Histogram with a boxplot on t
文章目录 5 小提琴图Violinplot1. 基础小提琴图绘制 Basic violinplot2. 小提琴图样式自定义 Custom seaborn violinplot3. 小提琴图颜色自定义 Control color of seaborn violinplot4. 分组小提琴图 Group
文章目录 4 核密度图Densityplot1. 基础核密度图绘制 Basic density plot2. 核密度图的区间控制 Control bandwidth of density plot3. 多个变量的核密度图绘制 Density plot of several variables4. 边
首先 import tensorflow as tf tf.argmax(tenso,n)函数会返回tensor中参数指定的维度中的最大值的索引或者向量。当tensor为矩阵返回向量,tensor为向量返回索引号。其中n表示具体参数的维度。 以实际例子为说明: import tensorflow a
seaborn学习笔记章节 seaborn是一个基于matplotlib的Python数据可视化库。seaborn是matplotlib的高级封装,可以绘制有吸引力且信息丰富的统计图形。相对于matplotlib,seaborn语法更简洁,两者关系类似于numpy和pandas之间的关系,seabo
Python ConfigParser教程显示了如何使用ConfigParser在Python中使用配置文件。 文章目录 1 介绍1.1 Python ConfigParser读取文件1.2 Python ConfigParser中的节1.3 Python ConfigParser从字符串中读取数据
1. 处理Excel 电子表格笔记(第12章)(代码下载) 本文主要介绍openpyxl 的2.5.12版处理excel电子表格,原书是2.1.4 版,OpenPyXL 团队会经常发布新版本。不过不用担心,新版本应该在相当长的时间内向后兼容。如果你有新版本,想看看它提供了什么新功能,可以查看Open
1. 发送电子邮件和短信笔记(第16章)(代码下载) 1.1 发送电子邮件 简单邮件传输协议(SMTP)是用于发送电子邮件的协议。SMTP 规定电子邮件应该如何格式化、加密、在邮件服务器之间传递,以及在你点击发送后,计算机要处理的所有其他细节。。但是,你并不需要知道这些技术细节,因为Python 的
文章目录 12 绘图实例(4) Drawing example(4)1. Scatterplot with varying point sizes and hues(relplot)2. Scatterplot with categorical variables(swarmplot)3. Scat
文章目录 10 绘图实例(2) Drawing example(2)1. Grouped violinplots with split violins(violinplot)2. Annotated heatmaps(heatmap)3. Hexbin plot with marginal dist
文章目录 9 绘图实例(1) Drawing example(1)1. Anscombe’s quartet(lmplot)2. Color palette choices(barplot)3. Different cubehelix palettes(kdeplot)4. Distribution
Python装饰器教程展示了如何在Python中使用装饰器基本功能。 文章目录 1 使用教程1.1 Python装饰器简单示例1.2 带@符号的Python装饰器1.3 用参数修饰函数1.4 Python装饰器修改数据1.5 Python多层装饰器1.6 Python装饰器计时示例 2 参考 1 使
1. 用GUI 自动化控制键盘和鼠标第18章 (代码下载) pyautogui模块可以向Windows、OS X 和Linux 发送虚拟按键和鼠标点击。根据使用的操作系统,在安装pyautogui之前,可能需要安装一些其他模块。 Windows: 不需要安装其他模块。OS X: sudo pip3
文章目录 生成文件目录结构多图合并找出文件夹中相似图像 生成文件目录结构 生成文件夹或文件的目录结构,并保存结果。可选是否滤除目录,特定文件以及可以设定最大查找文件结构深度。效果如下: root:[z:/] |--a.py |--image | |--cat1.jpg | |--cat2.jpg |
文章目录 VENN DIAGRAM(维恩图)1. 具有2个分组的基本的维恩图 Venn diagram with 2 groups2. 具有3个组的基本维恩图 Venn diagram with 3 groups3. 自定义维恩图 Custom Venn diagram4. 精致的维恩图 Elabo
mxnet60分钟入门Gluon教程代码下载,适合做过深度学习的人使用。入门教程地址: https://beta.mxnet.io/guide/getting-started/crash-course/index.html mxnet安装方法:pip install mxnet 1 在mxnet中使
文章目录 1 安装2 快速入门2.1 基本用法2.2 输出图像格式2.3 图像style设置2.4 属性2.5 子图和聚类 3 实例4 如何进一步使用python graphviz Graphviz是一款能够自动排版的流程图绘图软件。python graphviz则是graphviz的python实