使用Intel Realsense相机提取出包含人脸的点云中人脸的关键点

该代码示例展示了如何结合IntelRealSenseD405相机和Dlib库来提取点云中人脸的68个关键点。通过C++实现,代码利用了librealsense库以及PCL处理点云数据,最终在3D点云上可视化红色标记的关键点。
摘要由CSDN通过智能技术生成

KeypointExtractUsingDlib

Extract the key point from the face point cloud.

使用Intel Realsense相机提取出包含人脸的点云中人脸的关键点,使用了dlib库对点云中的人脸进行识别。

识别点数为68点,也可使用5点,但需更改部分代码。

有些代码直接使用了librealsense的dlib示例。

github链接:https://github.com/binfenseca2969/KeypointExtractUsingDlib

参考代码

librealsense的dlib示例:https://github.com/IntelRealSense/librealsense/tree/master/wrappers/dlib

利用IntelRealSense D435i 提取一帧pcl::PointXYZRGB图像(C++):https://blog.csdn.net/m0_56838271/article/details/121157332

代码环境

Windows 10 22H2,PCL-1.12.0,librealsense-2.53.1,dlib-19.24,使用Visual Studio 2019,RelWithDebInfo,CMake-3.20,使用的Realsense相机为D405。

附件下载

shape_predictor_68_face_landmarks.dat下载网址:http://dlib.net/files/shape_predictor_68_face_landmarks.dat.bz2

结果

平板找的Lena图,红色为识别出的关键点,真人也可以(但是不想放自己的照片……)。

请添加图片描述

代码

CMakelists.txt

# CMakeList.txt: KeypointExtractUsingDlibNew 的 CMake 项目,在此处包括源代码并定义
# 项目特定的逻辑。
#
cmake_minimum_required (VERSION 3.12)

project ("KeypointExtractUsingDlib")

find_package(realsense2 REQUIRED)
if(NOT realsense2_FOUND)
	message(FATAL_ERROR "Error: Unable to find the realsense2 folder.")
endif()

find_package(dlib REQUIRED)
if(NOT dlib_FOUND)
	message(FATAL_ERROR "Error: Unable to find the dlib folder.")
endif()

find_package(PCL REQUIRED)
if(NOT PCL_FOUND)
	message(FATAL_ERROR "Error: Unable to find the PCL folder.")
endif()

# 将源代码添加到此项目的可执行文件。
add_executable (KeypointExtractUsingDlib "KeypointExtractUsingDlibNew.cpp" "KeypointExtractUsingDlibNew.h" "rs_frame_image.h" "markup_68.h")

target_link_libraries(KeypointExtractUsingDlib PRIVATE 
	dlib::dlib ${
   realsense2_LIBRARY} ${
   PCL_LIBRARIES})
target_include_directories(KeypointExtractUsingDlib PRIVATE 
	${
   dlib_INCLUDE_DIRS} ${
   realsense2_INCLUDE_DIR} ${
   PCL_INCLUDE_DIRS})
# TODO: 如有需要,请添加测试并安装目标。

markup_68.h

// License: Apache 2.0. See LICENSE file in root directory.
// Copyright(c) 2019 Intel Corporation. All Rights Reserved.

#pragma once


/*
    The 68-point annotations for the iBUG 300-W face landmark dataset.
    See this picture:
        https://ibug.doc.ic.ac.uk/media/uploads/images/annotpics/figure_68_markup.jpg
    NOTE: the indexes in the picture are 1-based, so the actual C++ indexes are less 1.
    NOTE: "Right" and "left" refer to the face being described, so are the mirror of the
    side that an onlooker (from the front) would see.
*/
enum markup_68
{
   
    // Starting with right ear, the jaw [1-17]
    RIGHT_EAR, JAW_FROM = RIGHT_EAR, RIGHT_JAW_FROM = RIGHT_EAR,
    RIGHT_1, RIGHT_2, RIGHT_3, RIGHT_4, RIGHT_5, RIGHT_6, RIGHT_7, RIGHT_JAW_TO = RIGHT_7,
    CHIN, CHIN_FROM = CHIN - 1, CHIN_TO = CHIN + 1,
    LEFT_7 = CHIN + 1, LEFT_JAW_FROM = LEFT_7, LEFT_6, LEFT_5, LEFT_4, LEFT_3, LEFT_2, LEFT_1,
    LEFT_EAR, LEFT_JAW_TO = LEFT_EAR, JAW_TO = LEFT_EAR,

    // Eyebrows [18-22] and [23-27]
    RIGHT_EYEBROW_R, RIGHT_EYEBROW_FROM = RIGHT_EYEBROW_R, RIGHT_EYEBROW_1, RIGHT_EYEBROW_2, RIGHT_EYEBROW_3, RIGHT_EYEBROW_L, RIGHT_EYEBROW_TO = RIGHT_EYEBROW_L,
    LEFT_EYEBROW_R, LEFT_EYEBROW_FROM = LEFT_EYEBROW_R, LEFT_EYEBROW_1, LEFT_EYEBROW_2, LEFT_EYEBROW_3, LEFT_EYEBROW_L, LEFT_EYEBROW_TO = LEFT_EYEBROW_L,

    // Nose [28-36]
    NOSE_RIDGE_TOP, NOSE_RIDGE_FROM = NOSE_RIDGE_TOP, NOSE_RIDGE_1, NOSE_RIDGE_2, NOSE_TIP, NOSE_RIDGE_TO = NOSE_TIP,
    NOSE_BOTTOM_R, NOSE_BOTTOM_FROM = NOSE_BOTTOM_R, NOSE_BOTTOM_1, NOSE_BOTTOM_2, NOSE_BOTTOM_3, NOSE_BOTTOM_L, NOSE_BOTTOM_TO = NOSE_BOTTOM_L,

    // Eyes [37-42] and [43-48]
    RIGHT_EYE_R, RIGHT_EYE_FROM = RIGHT_EYE_R, RIGHT_EYE_1, RIGHT_EYE_2, RIGHT_EYE_L, RIGHT_EYE_4, RIGHT_EYE_5, RIGHT_EYE_TO = RIGHT_EYE_5,
    LEFT_EYE_R, LEFT_EYE_FROM = LEFT_EYE_R, LEFT_EYE_1, LEFT_EYE_2, LEFT_EYE_L, LEFT_EYE_4, LEFT_EYE_5, LEFT_EYE_TO = LEFT_EYE_5,

    // Mouth [49-68]
    MOUTH_R, MOUTH_OUTER_R = MOUTH_R, MOUTH_OUTER_FROM = MOUTH_OUTER_R, MOUTH_OUTER_1, MOUTH_OUTER_2, MOUTH_OUTER_TOP, MOUTH_OUTER_4, MOUTH_OUTER_5,
    MOUTH_L, MOUTH_OUTER_L = MOUTH_L, MOUTH_OUTER_7, MOUTH_OUTER_8, MOUTH_OUTER_BOTTOM, MOUTH_OUTER_10, MOUTH_OUTER_11, MOUTH_OUTER_TO = MOUTH_OUTER_11,
    MOUTH_INNER_R, MOUTH_INNER_FROM = MOUTH_INNER_R, MOUTH_INNER_1, MOUTH_INNER_TOP, MOUTH_INNER_3,
    MOUTH_INNER_L, MOUTH_INNER_5, MOUTH_INNER_BOTTOM, MOUTH_INNER_7, MOUTH_INNER_TO = MOUTH_INNER_7,

    N_POINTS
};

rs_frame_image.h


                
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值