3D人脸识别——点云转化为可训练的图片

article/2025/9/10 8:31:14

1.场景介绍

     3D人脸点云不容易直接训练,需要将其转化为二维图片。大部分论文是这样做的:首先求出每个点所在平面的法向量,发向量与水平面和竖直平面的夹角组成两个通道,深度图是一个通道。然后,将这三个通道归一到[0~255],形成我们人眼可见的图片。最后,就可以像训练图片一样训练人脸识别了。

2. 原始的点云

     将点云MashLab中打开,如下图所示:

        如果你没有安装MeshLab,也可用代码打开,更加直观的查看点云,代码如下:

#coding:UTF-8
import os
import sys
reload(sys)
sys.setdefaultencoding("utf-8")
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3Ddef ply_reader(ply_file):with open(ply_file, "r") as f:lines = f.readlines()lines = lines[12:-3]x = []y = []z = []for line in lines:parts = line.split(" ")x.append(float(parts[0]))y.append(float(parts[1]))z.append(float(parts[2]))return x, y, zdef obj_reader(obj_file):alpha, beta, theta, x, y, z = [], [], [], [], [], []with open(obj_file, "r") as f:lines = f.readlines()lines = [i for i in lines if i[0]=="v"]for line in lines:if line[:2] == "vn":parts = line.rstrip("\n").split(" ")alpha.append(float(parts[1]))beta.append(float(parts[2]))theta.append(float(parts[3]))else:parts = line.rstrip("\n").split(" ")x.append(float(parts[1]))y.append(float(parts[2]))z.append(float(parts[3]))return x, y, z, alpha, beta, thetadef points_show(x, y, z):fig = plt.figure()ax = Axes3D(fig)ax.set_xlabel('X label',color='r')ax.set_ylabel('Y label',color='r')ax.set_zlabel('Z label')ax.scatter(x,y,z,c='b',marker='.',s=2,linewidth=0,alpha=1,cmap='spectral')plt.show()if __name__ == "__main__":x, y, z, alpha, beta, theta = obj_reader("60.obj")points_show(x,y,z)

          打开的点云如下:

3. 点云法向量三个分和深度分量四个通道的图片如图所示

     四张图片从左到右分别是法向量与三维空间三个平面夹角的余弦值,最后一张图是深度值。

     将第一张图、第三张图、第四张图三个通道叠加起来,形成训练的彩色图,如下图所示:

     代码实现如下:

#coding:UTF-8
import sys
reload(sys)
sys.setdefaultencoding("utf-8")
import numpy as np
import cv2
import mathdef obj_reader(obj_file):alpha, beta, theta, x, y, z = [], [], [], [], [], []with open(obj_file, "r") as f:lines = f.readlines()lines = [i for i in lines if i[0]=="v"]for line in lines:if line[:2] == "vn":parts = line.rstrip("\n").split(" ")alpha.append(float(parts[1]))beta.append(float(parts[2]))theta.append(float(parts[3]))else:parts = line.rstrip("\n").split(" ")x.append(float(parts[1]))y.append(float(parts[2]))z.append(float(parts[3]))return x, y, z, alpha, beta, thetadef img_norm(img):img_max = (img[img != 0]).max()img_min = (img[img != 0]).min()img_new = (img-img_min)*255.0/(img_max-img_min)th = (0-img_min)*255.0/(img_max - img_min)img_new[img_new==th] = 0img_new = cv2.medianBlur(img_new.astype(np.float32), 3)return img_newdef point2gray(x, y, z, alpha, beta, theta):u_list, v_list, z_list = [], [], []for i, j, k in zip(x, y, z):u_list.append((i*616.009)/k)v_list.append((j*614.024)/k)z_list.append(k/1000)width = int(max(u_list) - min(u_list))height = int(max(v_list) - min(v_list))gray_img = np.zeros((width+1, height+1, 1))alpha_img = np.zeros((width+1, height+1, 1))beta_img = np.zeros((width+1, height+1, 1))theta_img = np.zeros((width+1, height+1, 1))rst_img = np.zeros((width+1, height+1, 3))u_min = min(u_list)v_min = min(v_list)u_list = [int(i-u_min) for i in u_list]v_list = [int(i-v_min) for i in v_list]for u, v, z, al, be, th in zip(u_list, v_list, z_list, alpha, beta, theta):gray_img[u,v] = z# al,be,th are anglesalpha_img[u,v] = abs(al)beta_img[u,v] = abs(be)theta_img[u,v] = abs(th)img_gray = img_norm(gray_img)cv2.imwrite("gray.jpg", img_gray)alpha_img = img_norm(alpha_img)cv2.imwrite("alpha.jpg", alpha_img)beta_img = img_norm(beta_img)cv2.imwrite("beta.jpg", beta_img)  theta_img = img_norm(theta_img)cv2.imwrite("theta.jpg", theta_img)rst_img[:,:,0] = img_grayrst_img[:,:,1] = alpha_imgrst_img[:,:,2] = theta_imgcv2.imwrite("rst.jpg", rst_img)if __name__ == "__main__":x, y, z, alpha, beta, theta = obj_reader("60.obj")point2gray(y,x,z, alpha, beta, theta)

注:将人脸点云转化为上述图片,就可以进行3D人脸识别了。

       RGBD人脸数据的处理,请参考我的博客:https://blog.csdn.net/Guo_Python/article/details/115080436。

       如需技术交流,请留言,或添加作者微信(下面二维码)。

       


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

相关文章

人脸识别

自20世纪下半叶,计算机视觉技术逐渐地发展壮大。同时,伴随着数字图像相关的软硬件技术在人们生活中的广泛使用,数字图像已经成为当代社会信息来源的重要构成因素,各种图像处理与分析的需求和应用也不断促使该技术的革新。计算机视…

人脸识别技术

2D人脸识别技术早在安防、监控、门禁、考勤中就已有应用,其硬件结构相当于一颗RGB摄像头,通过捕捉人脸图像,从图像中提取对应的特征,依据尺度特征不变的原理,和已经录入的图像库进行对比判定。目前基于神经网络的人脸识…

什么是人脸识别?

什么是人脸识别? 人脸识别是一种用于识别陌生人或从特定人的脸中认证特定人的身份的方法。它是计算机视觉的一个分支,但是人脸识别是专门的,并且在某些应用程序中带有社交功能,并且存在一些欺骗的漏洞。 人脸识别如何工作&#…

揭秘“2020年度AI生产力创新奖”:清微智能3D人脸识别模组

“2020年度AI生产力创新奖“作为2020年行业内的最后一个奖项,在年前的最后两周才正式公布。姗姗来迟的评选结果,也从一个侧面证明了该奖项评比的激烈程度。清微智能与百度、京东、浪潮等企业一起,共同斩获IOT与智慧城市领域的”AI生产力创新奖…

android 脸部识别之3D,这两款安卓手机也支持3D结构光人脸识别

1、oppo Find X-4999元(8128G) oppo Find X为滑屏(双轨潜望结构)设计,3D结构光模组隐藏在内部,当需要解锁时会自动探出,不用时又会自动收回。 OPPO Find X的O-Face 3D结构光可以在人面部投射15,000个识别点,以此来为用户的面部构建…

android 脸部识别之3D,Android Q新功能曝光了:原生支持3D人脸识别

原标题:Android Q新功能曝光了:原生支持3D人脸识别 【PConline资讯】如今不少机型已经支持3D人脸识别,像iPhoneX、iPhoneXR、iPhoneXSMax、华为Mate20Pro、OPPOFindX、小米8透明探索版等等。 值得注意的是,目前原生Android并没有提…

嵌入式3D人脸识别(笔记)

3D人脸识别在人脸识别中所占比例58%(2020年),3D是趋势。 3D人脸误识率1/100万,2D人脸误识率1/1万。 应用人脸活体、高精度识别。 几种深度相机比较: 双目:运算量大,受光照影响(过…

AI深度 | 3D人脸识别和双目结构光惯导

文/纽豪斯 发布/AI智道 一文看尽双目摄像、结构光、ToF和激光雷达技术;一文深入了解小觅智能、奥比中光、华捷艾米、的卢深视、Pico和镭神智能;AI赋能2大趋势、4大核心技术。 前言 纽豪斯刚刚完成《AI深度(上) | 3D人脸识别和结构…

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

1. 获取点云与显示点云 博主做项目是用realsense系列获取深度信息的,获得对齐的RGB图和深度图。 获取数据的代码如下: ## License: Apache 2.0. See LICENSE file in root directory. ## Copyright(c) 2017 Intel Corporation. All Rights Reserved.###…

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,不存…