现在公开的68点特征提取权重非常强大,但是有的时候我们并不想提取这些,在有数据的基础上,就应该自己训练一个模型权重。如何制作数据集请参考博主上篇博客。
训练
在制作完数据集后,在你的images文件夹的同级目录下有一个xml后缀的文件,这个文件就是我们的数据。
# -*- coding: utf-8 -*-
import os
import sys
import glob
import dlib
import cv2
# options用于设置训练的参数和模式
options = dlib.simple_object_detector_training_options()
options.add_left_right_image_flips = True
options.C = 5
options.num_threads = 4
options.be_verbose = True
# 获取路径
train_xml_path ='你的xml文件路径'
# 训练
dlib.train_simple_object_detector(train_xml_path, 'detector.svm', options)
最后就会在相对目录下得到一个svm文件,就是我们训练好的权重。
测试
因为每个人的特征标注不一样,所以测试的代码也不一样。总的思路是用detector函数去读取检测出来的特征位置。然后用cv2里面画框画点的来画出来。具体可以参考官方例子train_object_detector.py。
https://github.com/davisking/dlib/tree/master/python_examples