原文:Dlib 库 - 人脸检测及人脸关键点检测 - AIUAI
Dlib 是一个十分优秀好用的机器学习库,其源码均由 C++ 实现,并提供了 Python 接口,可广泛适用于很多场景.
这里主要记录 Dlib 中关于人脸检测和人脸关键点等技术的 python 应用.
pip 安装:
sudo apt-get install cmake
sudo pip install dlib
或 Github 源码安装.
1. 人脸检测 Face Detector
人脸检测,是检测出图片中包含的正面人脸.
1.1. 基于 HOG 特征和线性分类器的人脸检测
下面是采用经典的 HOG(Histogram of Oriented Gradients) 特征 结合线性分类器、图像金字塔(image pyramid) 及滑窗检测机制(sliding window detection scheme)实现的人脸检测器.
#!/usr/bin/python
# -*- coding: utf-8 -*-
import sys
import dlib
detector = dlib.get_frontal_face_detector()
def face_detect(imgfile):
win = dlib.image_window()
print("Processing file: {}".format(imgfile))
img = dlib.load_rgb_image(imgfile)
# 人脸检测
dets = detector(img, 1)
# len(dets) 即为检测到的人脸个数
print("Number of faces detected: {}".format(len(dets)))
# 遍历所有检测到人脸的坐标
# left:人脸左边距离图片左边界的距离
# right:人脸右边距离图片左边界的距离
# top:人脸上边距离图片上边界的距离
# bottom:人脸下边距离图片上边界的距离
for i, d in enumerate(dets):
print("Detection {}: Left: {} Top: {} Right: {} Bottom: {}".format(
i, d.left(), d.top(), d.right(), d.bottom()))
win.clear_overlay()
win.set_image(img)
win.add_overlay(dets)
dlib.hit_enter_to_continue()
def face_detect_with_scores(imgfile):
win = dlib.image_window()
# 如果要进一步得到更全面的检测信息,如每个检测结果的分数(score).
# score 值越大,则检测的可信度越高.
img = dlib.load_rgb_image(imgfile)
# 第三个参数 -1 用于设置调整检测阈值;
# 如果该参数值为负数,则返回更多的结果;
# 如果该参数值为正数,则返回较少的结果.
dets, scores, idx = detector.run(img, 1, -1)
for i, d in enumerate(dets):
print("Detection {}, score: {}, face_type:{}".format(
d, scores[i], idx[i]))
win.clear_overlay()
win.set_image