图片人脸检测——Dlib

马上就五一了,发呆的时候想到了之前接触过一点儿的Dlib,在c++下的使用,正好今天有人问起了会不会OpenCV,于是…

dlib与OpenCV对比:识别精准度:Dlib >= OpenCV,Dlib更多的人脸识别模型,可以检测脸部68甚至更多的特征点。Dlib是一个跨平台的C++公共库,除了线程支持,网络支持,提供测试以及大量工具等等优点,Dlib还是一个强大的机器学习的C++库,包含了许多机器学习常用的算法。同时支持大量的数值算法如矩阵、大整数、随机数运算等等。Dlib同时还包含了大量的图形模型算法。
Dlib主页:http://dlib.net/
之前是在vs环境下,今天主要说一下在ubuntu下的环境配置。人脸标记的算法也是来自Dlib库,Dlib实现了One Millisecond Face Alignment with an Ensemble of Regression Trees中的算法(http://www.csc.kth.se/~vahidk/papers/KazemiCVPR14.pdf,作者为Vahid Kazemi 和Josephine Sullivan)

安装模块:之前使用的一些模块numpy、python-dev、python-scipy、python-matplotlib等,还是“缺啥装啥”就可以。

安装dlib

首先必须安装libboost,不然是不能使用.so库的:

 sudo apt-get install libboost-python-dev cmake

以dlib-18.17为例:下载在自己的一个目录下 链接:https://pan.baidu.com/s/1QWL1XA9E79KiVuTgotPaIA 提取码:qfmz

之后进入python_examples下使用bat文件进行编译,编译需要先安装libboost-python-dev和cmake

cd  /home/*****/dlib-18.17/python_examples

sudo chmod 777 /home/*****/dlib-18.17/python_examples/compile_dlib_python_module.bat 

./compile_dlib_python_module.bat 

之后会得到一个dlib.so,复制到dist-packages目录下即可使用(视自己的电脑python版本而定的对应目录)

sudo cp dlib.so /usr/local/lib/python2.7/dist-packages/
或者 sudo cp dlib.so /usr/local/lib/python3.5/dist-packages/

安装skimage的时候,发现有问题
(1)from skimage import io 报错,找不到模块,直接安装发现pip版本不对
在这里插入图片描述
(2)sudo apt-get install python-skimage 发现已经安装

在这里插入图片描述
(3)sudo apt-get install scikit-image
在这里插入图片描述

之后使用 sudo -H python3 -m pip install scikit-image完成了.whl的安装

在这里插入图片描述
需要注意的是,在py文件import的时候,不需要from scikit-image import io,否则会报错“SyntaxError: invalid syntax”输入符号错误,直接使用from skimage import io即可。

测试照片:
控制台命令行输入:python3 test.py ./data/2.jpg

# -*- coding: utf-8 -*-

import sys
import dlib
from skimage import io

#使用dlib自带的frontal_face_detector作为我们的特征提取器
detector = dlib.get_frontal_face_detector()

#使用dlib提供的图片窗口
win = dlib.image_window()

#sys.argv[]是用来获取命令行参数的,sys.argv[0]表示代码本身文件路径,所以参数从1开始向后依次获取图片路径
for f in sys.argv[1:]:

    #输出目前处理的图片地址
    print("Processing file: {}".format(f))

    #使用skimage的io读取图片
    img = io.imread(f)

    #使用detector进行人脸检测 dets为返回的结果
    dets = detector(img, 1)

    #dets的元素个数即为脸的个数
    print("Number of faces detected: {}".format(len(dets)))

    #使用enumerate 函数遍历序列中的元素以及它们的下标
    #下标i即为人脸序号
    #left:人脸左边距离图片左边界的距离 ;right:人脸右边距离图片左边界的距离 
    #top:人脸上边距离图片上边界的距离 ;bottom:人脸下边距离图片上边界的距离
    for i, d in enumerate(dets):
        print("dets{}".format(d))
        print("Detection {}: Left: {} Top: {} Right: {} Bottom: {}"
            .format( i, d.left(), d.top(), d.right(), d.bottom()))

    #也可以获取比较全面的信息,如获取人脸与detector的匹配程度
    dets, scores, idx = detector.run(img, 1)
    for i, d in enumerate(dets):
        print("Detection {}, dets{},score: {}, face_type:{}".format( i, d, scores[i], idx[i]))    

    #绘制图片(dlib的ui库可以直接绘制dets)
    win.set_image(img)
    win.add_overlay(dets)

    #等待点击
    dlib.hit_enter_to_continue()

在这里插入图片描述

from skimage import io
import matplotlib.pyplot as plt
img=io.imread(‘2.jpg’)
io.imshow(img)
plt.show()

在这里插入图片描述

  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 人脸融合是指将两张或多张人脸图像进行融合,生成一张合成的人脸图像。Python中的dlib库提供了一些相关的函数和工具,用于实现人脸融合。 首先,需要使用dlib库中的人脸检测器来检测图像中的人脸位置和关键点。可以使用dlib.get_frontal_face_detector()函数来获取一个人脸检测器,然后使用detect()函数来检测人脸。检测到的人脸位置可以用一个矩形框表示,关键点包括眼睛、鼻子、嘴巴等特征点。 接下来,可以使用dlib.shape_predictor()函数来获取一个人脸关键点检测器,该检测器能够检测出人脸关键点的位置。使用predictor()函数来检测人脸关键点,传入图像和人脸位置矩形框参数。 之后,可以使用dlib.get_face_chip()函数将人脸从图像中提取出来,并进行缩放和归一化处理。然后,根据需要的融合效果,使用图像处理技术,如图像融合、图像混合等,将多张人脸图像进行融合。 需要注意的是,在进行人脸融合时,不同人脸的关键点位置和人脸形状可能有所不同。可以使用dlib.find_corresponding_landmarks()函数来查找两张人脸关键点之间的对应关系,从而更好地进行融合。 最后,将融合后的人脸图像保存到文件或显示在屏幕上。 总之,使用Python的dlib库可以方便地进行人脸融合。通过人脸检测、关键点检测和图像处理等技术,可以实现人脸图像的融合效果。 ### 回答2: 人脸融合是指在一张照片中将两个或多个人的面部特征进行融合,生成一张合成的新图片。而Python和dlib是实现人脸融合的工具和库。 Python是一种高级编程语言,具有易于上手、功能强大的特点。在人脸融合中,Python常用于图像处理、机器学习等方面的编程任务。它拥有丰富的第三方库和工具,提供了大量的函数和类,方便我们进行图像处理和算法实现。 而dlib是一个开源的面部检测和特征提取的库,可以用于人脸融合中的人脸定位、面部标记和特征点提取等任务。它基于C++编写,但同时也提供了Python接口,使得我们可以方便地使用Python来调用dlib的功能。 人脸融合的具体步骤一般包括以下几个阶段: 1. 人脸检测:使用dlib库中的人脸检测器,定位输入图像中的人脸位置。 2. 面部标记:利用dlib的面部标记器,找到人脸上的关键特征点,如眼睛、鼻子、嘴巴等。 3. 形变和对齐:根据两个或多个人的面部特征点,对其进行形变和对齐操作,使得它们的位置和形状更加一致。 4. 纹理合成:将多个人的脸部纹理信息进行合成,生成融合后的新纹理。 5. 图像合成:使用图像处理技术,将融合后的纹理信息与原始图像进行叠加或混合,生成最终的人脸融合图像。 总之,人脸融合是一项基于图像处理和机器学习的技术,通过Python编程和dlib库的使用,我们可以实现对人脸的定位、标记和特征提取,从而进行人脸融合操作。这种技术可以应用于娱乐产业、虚拟现实、安全监控等领域,提供了一种有趣和有用的图像合成方法。 ### 回答3: 人脸融合是一种使用技术将两张以上的人脸进行合成的方法。Python中的dlib库提供了一些强大的人脸识别和图像处理功能,可以用于实现人脸融合。 要实现人脸融合,首先需要使用dlib库进行人脸检测和标定。dlib库中的人脸检测器可以帮助我们找到图像中的人脸,并将其标定为一组关键点,如眼睛、鼻子、嘴巴等。通过这些关键点,可以准确地定位人脸的位置和形状。 接下来,我们可以使用dlib中的形状预测器来对这些关键点进行更精确的标定。形状预测器可以根据已有的训练模型推测出更多的关键点,从而更好地描述人脸的特征。 一旦我们成功检测和标定了人脸,就可以进行人脸融合了。通常的做法是将两张或多张人脸图像进行对齐,以确保它们的位置和尺寸相同。然后,我们可以按照不同的算法进行人脸融合,如权重平均、像素取样等。最终,将融合后的图像输出保存。 在人脸融合过程中,还可以进行一些后期处理,如平滑处理、颜色校正、纹理合成等,以提高合成图像的质量和真实度。 总的来说,通过使用Python中的dlib库,我们可以实现人脸融合。这个过程包括人脸检测和标定、形状预测、图像对齐、融合算法和后期处理等步骤。通过合理地利用dlib库提供的功能,可以实现高质量、真实度较高的人脸融合效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值