Open CV非常牛逼!众所周知!今天就来见识一下它究竟有多牛逼!
私信小编007即可获取数十套PDF哦! ▌理解深度学习面部识别嵌入 那么,基于深度学习的面部识别是怎样工作的呢?秘密就是一种叫做“深度度量学习”的技术。 如果你有深度学习的经验,你应该知道,通常情况下训练好的网络会接受一个输入图像,并且给输入的图像生成一个分类或标签。 图1:利用深度度量学习进行面部识别需要“三元组训练”。三元组包括三张不同的面部图像,其中两张属于同一个人。神经网络为每张面部图像生成一个128维向量。对于同一个人的两张面部图像,我们调整神经网络使得输出向量的距离度量尽可能接近。 强烈建议阅读以上文章,以深入了解深度学习面部嵌入的工作原理。 ▌安装面部识别库 为了用Python和OpenCV吸纳面部识别,我们需要安装一些库: $ workon # optional $ pip install dlib 或者从源代码进行编译: $ workon $ 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 $ 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 $ pip install face_recognition 安装imutlis 我们还需要imutils包提供一些遍历的函数。在Python虚拟环境中使用pip即可: $ workon $ 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哦! (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |