Dlib库基本使用方法

简介

Dlib是一个用C ++编写的工具库,其中包含一些机器学习方面的算法和软件,用来解决复杂现实世界问题,目前该软件库在工业上和学术界都得到了广泛的使用(该库为开源库)。

主要特点

文档详细:每个类和功能都有完整详细的文档说明。
高质量的可移植代码:适合大部分的平台,如 Windows,Linux、Mac OS X以及 POSIX(可移植操作系统接口)、Solaris(UNIX的衍生版本)、HPUX(惠普9000系列服务器的操作系统)、BSD(Unix的衍生系统)。
机器学习算法:深度学习、大量分类和回归算法、多种svm工具、半度量学习、聚类算法、多层感知机等。
数值算法:矩阵、大整数、随机数运算、一些优化算法等。
图形模型推断算法:贝叶斯网络、马尔科夫链蒙特卡罗方法(MCMC)
图像处理:常见的图像处理(格式转换、色彩空间转换等)、边缘查找、特征提取、姿态检测、人脸识别。
线程:简单的线程API、线程池
联网:可移植的简单的TCP套接字API和基于TCP的服务器对象。
图形用户界面:整个dlib GUI工具包都是线程安全的
数据压缩和完整性算法:加密解密算法、多种压缩算法
测验:线程完全日志、单元模块化测试、多种assert支持
通用工具:xml解析、多种容器类、序列化支持、内存管理器、base64转换、matlab支持。

示例(图像处理)

检测统计图片中人脸的数量并标记出来

import dlib
cnn_face_detector = dlib.cnn_face_detection_model_v1('./mmod_human_face_detector.dat')
win = dlib.image_window()
path='./7person.jpg'
print("处理文件中: {}".format(path))
img = dlib.load_rgb_image(path)
dets = cnn_face_detector(img, 1)#1表示将图片放大一倍,以便检测到更多的人脸
print("检测到人脸数目: {}".format(len(dets)))
for i, d in enumerate(dets):
    print("检测到 {}: Left: {} Top: {} Right: {} Bottom: {} 可信度: {}".format(
        i, d.rect.left(), d.rect.top(), d.rect.right(), d.rect.bottom(), d.confidence))

rects = dlib.rectangles()
rects.extend([d.rect for d in dets])

win.clear_overlay()
win.set_image(img)
win.add_overlay(rects)
dlib.hit_enter_to_continue()

运行结果:

处理文件中: ./7person.jpg
检测到人脸数目: 7
检测到 0: Left: 181 Top: 65 Right: 220 Bottom: 105 可信度: 1.1296461820602417
检测到 1: Left: 385 Top: 134 Right: 432 Bottom: 182 可信度: 1.101375937461853
检测到 2: Left: 37 Top: 118 Right: 105 Bottom: 186 可信度: 1.073663353919983
检测到 3: Left: 451 Top: 151 Right: 508 Bottom: 208 可信度: 1.0721375942230225
检测到 4: Left: 97 Top: 25 Right: 136 Bottom: 65 可信度: 1.0554574728012085
检测到 5: Left: 323 Top: 110 Right: 370 Bottom: 158 可信度: 1.0327470302581787
检测到 6: Left: 293 Top: 37 Right: 332 Bottom: 77 可信度: 0.9874222278594971
Hit enter to continue

在这里插入图片描述

在原有基础上添加人脸关键点识别
注:为了缩短运行时间,这里将目标检测图片替换为仅有单一人脸的图像。

import dlib

predictor_path='./shape_predictor_68_face_landmarks.dat'
imag_path='./testImg.png'

detector = dlib.get_frontal_face_detector()
predictor = dlib.shape_predictor(predictor_path)
win = dlib.image_window()

img = dlib.load_rgb_image(imag_path)

win.clear_overlay()
win.set_image(img)
dets = detector(img, 1)

for k, d in enumerate(dets):
    shape = predictor(img, d)
    win.clear_overlay()
    win.add_overlay(d)
    win.add_overlay(shape)
    face_chip = dlib.get_face_chip(img, shape)
    dlib.hit_enter_to_continue()

运行结果:

在这里插入图片描述

除了可以使用dlib库本身有的模型以外,还可以在原来的基础上训练自己的模型。

Dlib与OpenCV

dlib和opencv都有可以进行人脸检测的模块。OpenCV的Haar Cascade运行速度快,但是容易出现将非人脸部分检测为人脸的情况,DNN人脸检测在各方面的表现都比较优秀,但是似乎不能使用NVIDIA GPU。
dlib中实现了SURF、HOG和FHOG的特征提取算法。更够准确检测大部分人脸,对存在遮挡的人脸也能进行正确检测,在少数极端情况下(如俯视、仰视)以及人脸过小的情况下容易出现检测不准确的状况(小脸的情况下,用户可以用小尺寸的图像训练自己的检测器来解决)。
个人认为dlib的鲁棒性强于OpenCV,但是在相同环境下OpenCV的运行速度略快。
dlib官方文档:http://dlib.net/
OpenCV官网:https://opencv.org/#

  • 2
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
使用Pythondlib实现简单瘦脸功能,你可以按照以下步骤进行: 1. 安装dlib 你可以在终端中使用pip命令安装dlib: ``` pip install dlib ``` 2. 下载预训练的人脸关键点检测器 你可以从dlib的官方网站下载预训练的人脸关键点检测器。这个检测器是一个文件,可以用于检测人脸,并标记出面部的关键点。 下载地址:http://dlib.net/files/shape_predictor_68_face_landmarks.dat.bz2 3. 导入必要的Python代码中,你需要导入必要的: ```python import dlib import cv2 import numpy as np ``` 4. 加载人脸检测器和关键点检测器 在Python中,你可以使用dlib提供的人脸检测器和关键点检测器。你需要在代码中加载这两个检测器: ```python detector = dlib.get_frontal_face_detector() predictor = dlib.shape_predictor("shape_predictor_68_face_landmarks.dat") ``` 5. 加载图像并进行人脸检测 在Python中,你可以使用OpenCV加载图像,并使用dlib的人脸检测器检测人脸: ```python img = cv2.imread("input.jpg") gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) faces = detector(gray) ``` 6. 获取面部关键点并进行瘦脸 一旦检测到人脸,你可以使用dlib的关键点检测器获取面部关键点。一旦你有这些关键点,你可以使用NumPy中的数组操作来瘦脸。 下面是一个简单的示例,使用NumPy来轻微地瘦脸: ```python for face in faces: landmarks = predictor(gray, face) landmarks = np.array([[p.x, p.y] for p in landmarks.parts()]) # 绘制面部关键点 for landmark in landmarks: cv2.circle(img, tuple(landmark), 2, (0, 255, 0), -1) # 瘦脸 jawline = landmarks[0:17] left_brow = landmarks[17:22] right_brow = landmarks[22:27] nose = landmarks[27:31] left_eye = landmarks[36:42] right_eye = landmarks[42:48] lips = landmarks[48:60] # 将左眼、右眼和嘴巴的中心点作为瘦脸的参考点 left_eye_center = left_eye.mean(axis=0).astype("int") right_eye_center = right_eye.mean(axis=0).astype("int") mouth_center = lips.mean(axis=0).astype("int") # 计算瘦脸的偏移量 d = (right_eye_center[0] - left_eye_center[0]) // 2 offset_left = (-d, 0) offset_right = (d, 0) offset_mouth = (0, d // 2) # 应用瘦脸的偏移量 jawline += offset_left + offset_right left_brow += offset_left right_brow += offset_right nose += offset_left + offset_right left_eye += offset_left right_eye += offset_right lips += offset_mouth # 绘制瘦脸后的面部关键点 for landmark in jawline: cv2.circle(img, tuple(landmark), 2, (255, 0, 0), -1) for landmark in left_brow: cv2.circle(img, tuple(landmark), 2, (255, 0, 0), -1) for landmark in right_brow: cv2.circle(img, tuple(landmark), 2, (255, 0, 0), -1) for landmark in nose: cv2.circle(img, tuple(landmark), 2, (255, 0, 0), -1) for landmark in left_eye: cv2.circle(img, tuple(landmark), 2, (255, 0, 0), -1) for landmark in right_eye: cv2.circle(img, tuple(landmark), 2, (255, 0, 0), -1) for landmark in lips: cv2.circle(img, tuple(landmark), 2, (255, 0, 0), -1) ``` 7. 保存瘦脸后的图像 最后,你可以使用OpenCV中的imwrite函数保存瘦脸后的图像: ```python cv2.imwrite("output.jpg", img) ``` 这就是使用Pythondlib实现简单瘦脸功能的基本步骤。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值