虹膜关键点检测

版权声明:本文为博主原创文章,未经博主允许不得转载。 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;
}

猜你喜欢

转载自blog.csdn.net/zhongqianli/article/details/87211591