3D人脸识别——人脸点云前处理

article/2025/9/10 13:04:22

1. 获取点云与显示点云

    博主做项目是用realsense系列获取深度信息的,获得对齐的RGB图和深度图。

    获取数据的代码如下:

## License: Apache 2.0. See LICENSE file in root directory.
## Copyright(c) 2017 Intel Corporation. All Rights Reserved.#####################################################
##       Align Depth to Color and get data         ##
###################################################### First import the library
import pyrealsense2 as rs
# Import Numpy for easy array manipulation
import numpy as np
# Import OpenCV for easy image rendering
import cv2
import time
import os# Declare pointcloud object, for calculating pointclouds and texture mappings
pc = rs.pointcloud()
# We want the points object to be persistent so we can display the last cloud when a frame drops
points = rs.points()# Create a pipeline
pipeline = rs.pipeline()# Create a config and configure the pipeline to stream
#  different resolutions of color and depth streams
config = rs.config()
config.enable_stream(rs.stream.depth, 640, 360, rs.format.z16, 30)
config.enable_stream(rs.stream.color, 640, 480, rs.format.bgr8, 30)# Start streaming
profile = pipeline.start(config)# Getting the depth sensor's depth scale (see rs-align example for explanation)
depth_sensor = profile.get_device().first_depth_sensor()
depth_scale = depth_sensor.get_depth_scale()
print("Depth Scale is: " , depth_scale)# We will be removing the background of objects more than
#  clipping_distance_in_meters meters away
clipping_distance_in_meters = 1 #1 meter
clipping_distance = clipping_distance_in_meters / depth_scale# Create an align object
# rs.align allows us to perform alignment of depth frames to others frames
# The "align_to" is the stream type to which we plan to align depth frames.
align_to = rs.stream.color
align = rs.align(align_to)save_dir = "RGBD_dataset"def check_dir(save_dir):if not os.path.exists(save_dir):os.makedirs(save_dir)return save_dirn = 0# Streaming loop
try:while True:# Get frameset of color and depthframes = pipeline.wait_for_frames()# frames.get_depth_frame() is a 640x360 depth image# Align the depth frame to color framealigned_frames = align.process(frames)# Get aligned framesaligned_depth_frame = aligned_frames.get_depth_frame() # aligned_depth_frame is a 640x480 depth imagecolor_frame = aligned_frames.get_color_frame()# Validate that both frames are validif not aligned_depth_frame or not color_frame:continuecolor_image = np.asanyarray(color_frame.get_data())save_dir = check_dir(save_dir)name = str(n)depth_image = np.asanyarray(aligned_depth_frame.get_data())#print "Saveing to *.png ..."depth_name = name + ".png"cv2.imwrite(os.path.join(save_dir, depth_name), depth_image)image_name = name + ".jpg"print "Saveing to *.jpg ..."cv2.imwrite(os.path.join(save_dir, image_name), color_image)n += 1print("Frame num is %s" % n)if n == 1000:print("You get 1000 RGBD-imgs!")breakcv2.namedWindow('Align Example', cv2.WINDOW_AUTOSIZE)cv2.imshow('Align Example', color_image)key = cv2.waitKey(1)# Press esc or 'q' to close the image windowif key & 0xFF == ord('q') or key == 27:cv2.destroyAllWindows()break
finally:pipeline.stop()

            点云的显示请参考我的博客:Open3D——RGBD图转化为点云(pcd)并显示

2. 人脸点云处理关键步骤

      (1) 点云分割

             以人脸鼻尖为球心,8cm半径组成的球,只保留在球内的点云同时去除无效的点云,即分割出人脸点云,去除了背景的干扰。

     (2)计算人脸在空间的旋转角度,并实现人脸对齐

             根据人脸关键点,求出人脸的姿态,即Pitch,Yaw,Roll三个偏转角。

             根据齐次坐标变换,获得对齐的人脸点云。

             我处理后的结果如下(用MeshLab显示):

     (3)法向量估计算法:基于Open3D计算每个点的法向量。

     (4)点云的信息投影到平面:根基相机模型把深度的法向量投影到平面内,并归一化,变为人眼可见的3通道图片。

              我的投影效果如图所示:

注:处理开源的3D人脸点云数据,请参考我的博客:3D人脸识别——点云转化为可训练的图片。

       以上点云处理的所有代码由python编写,如需技术交流,请联系博主(下方二维码)。

 


http://chatgpt.dhexx.cn/article/CwfYY5Ib.shtml

相关文章

3d人脸识别算法opencv_10行代码实现人脸识别

什么是人脸识别 人脸识别,是基于人的脸部特征信息进行身份识别的一种生物识别技术。用摄像机或摄像头采集含有人脸的图像或视频流,并自动在图像中检测和跟踪人脸,进而对检测到的人脸进行脸部识别的一系列相关技术,通常也叫做人像识别、面部识别。 目前的人脸识别技术已经非…

3D人脸识别准确率提升,成未来发展趋势

https://www.toutiao.com/a6678896218048823811/ 随着技术升级,生物识别技术已经被应用到越来越多的行业当中,渗透人们生活的方方面面,你的面部、眼睛、步态乃至表情都在告诉识别系统:你是谁。而近些年越来越火的人脸识别更是在证…

2D与3D人脸识别详解

人脸是人体最重要的生物特征之一,而人脸研究主要集中在人脸识别方面,人脸的表达模型分为2D人脸和3D人脸。2D人脸识别研究的时间相对较长,方法流程也相对成熟,在多个领域都有使用,但由于2D信息存在深度数据丢失的局限性,无法完整的表达出真实人脸,所以在实际应用中存在着…

一文读懂3D人脸识别十年发展及未来趋势

来源丨机器之心 人脸识别 是机器学习社区研究最多的课题之一,以 3D 人脸识别为代表的相关 ML 技术十年来都有哪些进展? 这篇文章给出了 答案。 近年来,人脸识别的研究已经转向使用 3D 人脸表面,因为 3D 几何信息可以表征更多的鉴别…

商汤科技3D人脸识别技术加持智能门锁,帮你解放双手

刚刚过去的元旦佳节,很多人选择聚餐聚会,共同迎接新年的到来,或是跟恋人一起度过浪漫的跨年夜。 在外有欢声笑语的氛围,回到家也应该有舒适的惬意。若是来到家门口,还要放下拎着的大包小包年货,腾出手来去…

3D人脸识别

目录 导语 3D人脸基础知识 初识3D人脸 相机模型 3D相机 3D人脸数据 3D人脸相关任务 常见Pipeline 3D人脸识别 3D人脸重建 总结 导语 随着深度学习技术的推进,人脸相关任务研究也跃升为学界和业界的热点。人们所熟知的人脸任务一般包括人脸检测&#xff0…

一文为你详解2D与3D人脸识别有什么区别?

最近业界内刮起了一股“人脸识别安全”的大讨论,小到个人大到超市以及银行,都在使用这个刷脸认证或支付,说它好吧,确实解决了无接触,快速高效等问题,你说它不好吧,也是有原因的,比如…

图像算法之3D人脸识别技术原理概述

随着深度学习技术的进步,面部相关任务的研究也成为学术界和工业界的热门话题。众所周知的面部任务通常包括面部检测,面部识别,面部表情识别等,其主要使用2D RGB面部(通常包括一些纹理信息)作为输入; 3D扫描…

vue 小结

var vm new Vue({el : // 挂载点})string 字符串。indexof(‘x’) 如果含有x 则返回 -1 数组添加:push 数组截取:splice

文件加密软件

在电商年代,互联网给大家的衣食住行、工作造成巨大便捷,随之各种各样电子设备的呈现,客户也开始运用文件加密软件来保障自己的数据。现阶段市场上的免费加密软件诸多,客户都是犹豫不决文件加密软件哪家好用这个难题,因…

第十八节 JS中的正则表达式

复习字符串操作: search    查找 substring   获取子字符串 charAt    获取某个字符 split     分割字符串,获取数组 1 var str abcdefghijk; 2 alert(str.search(b)); //返回1,表示b在字符串中的位置是1,不存…

ansible-playbook部署Docker Swarm集群

通过ansible-playbook,部署Docker Swarm集群。 docker安装目录: /var/lib/dockerdocker命令目录: /usr/bin/dockercompose命令目录: /usr/local/bin/docker-composeweavescope: docker可视化管理工具scope命令目录: …

WebGIS中利用AGS JS+eCharts实现一些数据展示的探索

文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/。 1.背景 eCharts提供了迁徙图、热点图、夜视图等跟地图能够很好的结合起来的数据展示方式。但是如何将eCharts和我们的AGS JS框架以及自身的地图相结合&…

AngularJS所有版本下载地址

AngularJS官网本身采用AngularJS库构建,页面中的AngularJS库通过Google的CDN(内容分发网络)引入,所以国内访问会有问题。 大家可以从下面地址获取AngularJS所以版本: https://code.angularjs.org/ 各种版本应有尽有&a…

视频教程-Web前端进阶-AngularJs4从基础到实战-AngularJS

Web前端进阶-AngularJs4从基础到实战 优就业互联网营销首席讲师 精通各大搜索引擎原理,对SEO有深入的研究和独到见解,擅长站内与站外优化与策略部署。熟悉常用的Web项目开发技术,擅长营销型、成交型网站策划,精通织梦、帝国、word…

arcgis js(二)显示三维地图

1、上一节讲了arcgis js入门与提高(一)加载二维地图arcgis js(一)显示二维地图_郝大大的博客-CSDN博客,本节继续讲如何加载三维地图,与3.x版本不同,ArcGIS API for JavaScript 3.x版本地图都是显…

【九】坐标格网添加以及调整

一、前言 有些小伙伴应该见过上述这种专业的制图,本节主要是针对上述图片中的坐标格网进行讲解。如果添加并且对其进行设置。 二、具体步骤 1、接上前文的内容继续,首先一样添加相关数据并且切换到布局视图。 2、 单击一下数据格网,然后被选…

AngularJS简单入门教学和使用

前端框架千千万&#xff0c;今天我们来学习简单的AngularJS的入门案例和学习&#xff0c;让我们快速掌握和使用 使用步骤 引入js文件&#xff0c;前端框架首先就是引入js脚本&#xff0c;这里可以去官网上进行下载 <script src"../plugins/angularjs/angular.min.j…

js搭建网站 web服务器,AngularJS如何搭建web服务器?angularjs搭建web服务器的详细过程...

本篇文章主要的介绍了关于angularjs启动web服务器的操作&#xff0c;希望能帮到大家&#xff0c;现在开始看文章吧 安装node.js 下载链接 官网地址&#xff1a; https://nodejs.org/en/ 我下的解压版的&#xff0c;直接解压到你想安装的目录中 在我的电脑(右键)→属性→高级系统…

python画气球_戳气球(python)

问题描述* 有 n 个气球&#xff0c;编号为0 到 n-1&#xff0c;每个气球上都标有一个数字&#xff0c;这些数字存在数组 nums 中。 现在要求你戳破所有的气球。如果你戳破气球 i &#xff0c;就可以获得 nums[left] * nums[i] * nums[right] 个硬币。 这里的 left 和 right 代…