简介
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/#