Open CV非常牛逼!众所周知!今天就来见识一下它究竟有多牛逼!

Open CV非常牛逼!众所周知!今天就来见识一下它究竟有多牛逼!,第1张

概述  私信小编007即可获取数十套PDF哦!▌理解深度学习面部识别嵌入那么,基于深度学习的面部识别是怎样工作的呢?秘密就是一种叫做“深度度量学习”的技术。

私信小编007即可获取数十套pdf哦!

▌理解深度学习面部识别嵌入

那么,基于深度学习的面部识别是怎样工作的呢?秘密就是一种叫做“深度度量学习”的技术。

如果你有深度学习的经验,你应该知道,通常情况下训练好的网络会接受一个输入图像,并且给输入的图像生成一个分类或标签。

图1:利用深度度量学习进行面部识别需要“三元组训练”。三元组包括三张不同的面部图像,其中两张属于同一个人。神经网络为每张面部图像生成一个128维向量。对于同一个人的两张面部图像,我们调整神经网络使得输出向量的距离度量尽可能接近。

强烈建议阅读以上文章,以深入了解深度学习面部嵌入的工作原理。

▌安装面部识别库

为了用Python和OpenCV吸纳面部识别,我们需要安装一些库:

$ workon # optional

$ pip install dlib

或者从源代码进行编译:

$ workon # optional

$ git clone https://github.com/davisking/dlib.git

$ cd dlib

$ mkdir build

$ cd build

$ cmake .. -DUSE_AVX_INSTRUCTIONS=1

$ cmake --build .

$ cd ..

$ python setup.py install --yes USE_AVX_INSTRUCTIONS

安装有GPU支持的dlib(可选)

如果你有兼容CUDA的GPU,那么可以安装有GPU支持的dlib,这样面部识别能更快、更精确。

我建议从源代码安装dlib,这样可以更精细地控制安装过程:

$ workon # optional

$ git clone https://github.com/davisking/dlib.git

$ cd dlib

$ mkdir build

$ cd build

$ cmake .. -DDliB_USE_CUDA=1 -DUSE_AVX_INSTRUCTIONS=1

$ cmake --build .

$ cd ..

$ python setup.py install --yes USE_AVX_INSTRUCTIONS --yes DliB_USE_CUDA

安装face_recognition包

face_recognition模块只需简单地使用pip命令即可安装:

$ workon # optional

$ pip install face_recognition

安装imutlis

我们还需要imutils包提供一些遍历的函数。在Python虚拟环境中使用pip即可:

$ workon # optional

$ pip install imutils

▌面部识别数据集

$ tree --filelimit 10 --dirsfirst

.

├── dataset

│ ├── alan_grant [22 entrIEs]

│ ├── claire_dearing [53 entrIEs]

│ ├── ellIE_sattler [31 entrIEs]

│ ├── ian_malcolm [41 entrIEs]

│ ├── john_hammond [36 entrIEs]

│ └── owen_grady [35 entrIEs]

├── examples

│ ├── example_01.png

│ ├── example_02.png

│ └── example_03.png

├── output

│ └── lunch_scene_output.avi

├── vIDeos

│ └── lunch_scene.mp4

├── search_bing_API.py

├── encode_faces.py

├── recognize_faces_image.py

├── recognize_faces_vIDeo.py

├── recognize_faces_vIDeo_file.py

└── enCodings.pickle

10 directorIEs,11 files

▌用OpenCV和深度学习对面部进行编码

图3:利用深度学习和Python进行面部识别。对每一个面部图像,用face_recognition模块的方法生成一个128维实数特征向量。

在识别图像和视频中的面部之前,我们首先需要在训练集中识别面部。要注意的是,我们并不是在训练网络——该网络已经在300万图像的训练集上训练过了。

首先需要导入必需的包。这个脚本需要事先安装imutils、face_recognition和OpenCV。请翻到前面“安装面部识别库”一节确保你已经安装了必须的库。

首先用argparse处理运行时传递的命令行参数:

行3用输入数据集的路径,建立了一个列表imagePaths。

我们还需要在循环开始之前初始化两个列表,分别是kNownEnCodings和kNownnames。这两个列表分别包含面部编码数据和数据集中相应人物的名字(行6和行7)。

现在可以依次循环侏罗纪公园中的每个角色了!

接下来定位面部位置并计算编码:

1 # detect the (x,y)-coordinates of the bounding Boxes

2 # corresponding to each face in the input image

3 Boxes = face_recognition.face_locations(rgb,

4 model=args["detection_method"])

5

6 # compute the facial embedding for the face

7 enCodings = face_recognition.face_enCodings(rgb,Boxes)

8

9 # loop over the enCodings

10 for enCoding in enCodings:

11 # add each enCoding + name to our set of kNown names and

12 # enCodings

13 kNownEnCodings.append(enCoding)

14 kNownnames.append(name)

这段代码是最有意思的部分!

每次循环都会检测一个面部图像(或者一张图像中有多个面部,我们假设这些面部都属于同一个人,但如果你使用自己的图像的话,这个假设有可能不成立,所以一定要注意)。

比如,假设rgb里的图像是EllIE Sattler的脸。

行3和4查找面部位置,返回一个包含了许多方框的列表。我们给face_recognition.face_locations方法传递了两个参数:

行3构建了一个字典,它包含enCodings和names两个键。

行4-6将名字和编码保存到硬盘中,供以后使用。

怎样才能在终端上运行encode_faces.py脚本?

要创建面部嵌入,可以从终端执行以下命令:

1$ python encode_faces.py --dataset dataset --enCodings enCodings.pickle

2[INFO] quantifying faces...

3[INFO] processing image 1/218

4[INFO] processing image 2/218

5[INFO] processing image 3/218

6...

7[INFO] processing image 216/218

8[INFO] processing image 217/218

9[INFO] processing image 218/218

10[INFO] serializing enCodings...

11$ ls -lh enCodings*

12-rw-r--r--@ 1 adrian staff 234K May 29 13:03 enCodings.pickle

从输出中课件,它生成了个名为enCodings.pickle的文件,该文件包含了数据集中每个面部图像的128维面部嵌入。

在我的Titan X GPU上,处理整个数据集花费了一分钟多一点,但如果只使用cpu,就要做好等待很久的心理准备。

在我的Macbook Pro上(没有GPU),编码218张图像需要21分20秒。

如果你有GPU并且编译dlib时选择了支持GPU,那么速度应该会快得多。

▌识别图像中的面部

注意:别忘了我们的模型是根据原版电影中的四个角色进行训练的:Alan Grant、EllIE Sattler、Ian Malcolm和John Hammond。模型并没有针对Donald Gennaro(律师)进行训练,所以他的面部被标记为“UnkNown”。这个行为是特意的(不是意外),以演示我们的视频识别系统在识别训练过的面部的同时,会把不认识的面部标记为“UnkNown”。

▌面部识别代码能运行在树莓派上吗?

从某种意义上,可以。不过有一些限制:

树莓派内存太小,没办法运行更准确的基于CNN的面部检测器;

因此只能用HOG方式;

即使如此,HOG方式在树莓派上也太慢,没办法用于实时面部检测;

所以只能用OpenCV的Haar层叠方式。

即使这样能运行起来,实际的速率也只有1~2FPS,而且就算是这种速率也需要许多技巧。

▌总结

在这篇指南中,我们学习了如何利用OpenCV、Python和深度学习来进行面部识别。此外,我们还利用了Davis King的dlib库和Adam Geitgey的face_recognition模块,后者对dlib的深度度量学习进行了封装,使得面部识别更容易完成。

我们发现,我们的面部识别实现同时具有以下两个特点:准确,并且能在GPU上实时运行。

进群:125240963   即可获取数十套pdf哦!

总结

以上是内存溢出为你收集整理的Open CV非常牛逼!众所周知!今天就来见识一下它究竟有多牛逼!全部内容,希望文章能够帮你解决Open CV非常牛逼!众所周知!今天就来见识一下它究竟有多牛逼!所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1208905.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-04
下一篇 2022-06-04

发表评论

登录后才能评论

评论列表(0条)

保存