版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/zhongqianli/article/details/87211591
虹膜关键点检测,类似人脸关键点检测。
开发环境准备
编译dlib,得到工具:
- imglab,由tools/imglab编译得到
- train_shape_predictor_ex,由train_shape_predictor_ex.cpp编译得到
准备数据集和标定描述文件
通过imglab标定虹膜关键点,得到xml格式的标定描述文件。
训练虹膜关键点检测模型
用train_shape_predictor_ex训练得到虹膜关键点检测模型
测试
先进行眼睛ROI检测,然后基于眼睛检测结果进行虹膜关键点检测。
模型使用方法参照dlib中的face_landmark_detection_ex.cpp。
int IA_IrisAlignment(const cv::Mat &image, const cv::Rect &rect
, std::vector<cv::Point> &shape)
{
if(rect.x < 0 || rect.y < 0
|| rect.x + rect.width > image.cols - 1
|| rect.y + rect.height > image.rows - 1
|| rect.width < 5
|| rect.height < 5)
{
return IA_RET_FAIL;
}
cv::Mat image_gray;
if(image.channels() != 1)
{
cv::cvtColor(image, image_gray, cv::COLOR_BGR2GRAY);
}
else
{
image_gray = image;
}
rectangle dlib_rect;
dlib_rect.set_left(rect.x);
dlib_rect.set_top(rect.y);
dlib_rect.set_right(rect.x + rect.width);
dlib_rect.set_bottom(rect.y + rect.height);
cv_image<uchar> cimg_gray(image_gray);
EnterCriticalSection(&g_IrisAlignmentCriticalSection);
dlib::full_object_detection dlib_shape = _shape_model(cimg_gray, dlib_rect);
LeaveCriticalSection(&g_IrisAlignmentCriticalSection);
shape.clear();
for(int i = 0; i < dlib_shape.num_parts(); i++)
{
cv::Point p(dlib_shape.part(i).x(), dlib_shape.part(i).y());
shape.push_back(p);
}
return IA_RET_SUCC;
}