pyrender 渲染mesh
目录
render_meshes函数
调用函数
render_meshes函数
def overlay_human_meshes(humans, K, model, img_pil, unique_color=False):# Color of humans seen in the image._color = [color[0] for _ in range(len(humans))] if unique_color else color# Get focal and princpt for rendering.focal = np.asarray([K[0,0,0].cpu().numpy(),K[0,1,1].cpu().numpy()])princpt = np.asarray([K[0,0,-1].cpu().numpy(),K[0,1,-1].cpu().numpy()])# Get the vertices produced by the model.verts_list = [humans[j]['v3d'].cpu().numpy() for j in range(len(humans))]faces_list = [model.smpl_layer['neutral_10'].bm_x.faces for j in range(len(humans))]# Render the meshes onto the image.pred_rend_array = render_meshes(np.asarray(img_pil), verts_list,faces_list,{'focal': focal, 'princpt': princpt},alpha=1.0,color=_color)return pred_rend_array, _colordef render_meshes(img, l_mesh, l_face, cam_param, color=None, alpha=1.0, show_camera=False,intensity=3.0,metallicFactor=0., roughnessFactor=0.5, smooth=True,):"""Rendering multiple mesh and project then in the initial image.Args:- img: np.array [w,h,3]- l_mesh: np.array list of [v,3]- l_face: np.array list of [f,3]- cam_param: info about the camera intrinsics (focal, princpt) and (R,t) is possibleReturn:- img: np.array [w,h,3]"""# scenescene = pyrender.Scene(ambient_light=(0.3, 0.3, 0.3))# meshfor i, mesh in enumerate(l_mesh):if color is None:_color = (np.random.choice(range(1,225))/255, np.random.choice(range(1,225))/255, np.random.choice(range(1,225))/255)else:if isinstance(color,list):_color = color[i]elif isinstance(color,tuple):_color = colorelse:raise NotImplementedErrormesh = trimesh.Trimesh(mesh, l_face[i])# import ipdb# ipdb.set_trace()# mesh.visual = trimesh.visual.TextureVisuals(# uv=None, # material=trimesh.visual.material.PBRMaterial(# metallicFactor=metallicFactor,# roughnessFactor=roughnessFactor,# alphaMode='OPAQUE',# baseColorFactor=(_color[0], _color[1], _color[2], 1.0)# ),# image=None, # face_materials=None# )# print('saving')# mesh.export('human.obj')# mesh = trimesh.load('human.obj')# print('loading')# mesh = pyrender.Mesh.from_trimesh(mesh, smooth=smooth)material = pyrender.MetallicRoughnessMaterial(metallicFactor=metallicFactor,roughnessFactor=roughnessFactor,alphaMode='OPAQUE',baseColorFactor=(_color[0], _color[1], _color[2], 1.0))mesh = pyrender.Mesh.from_trimesh(mesh, material=material, smooth=smooth)scene.add(mesh, f"mesh_{i}")# Adding coordinate system at (0,0,2) for the moment# Using lines defined in pyramid https://docs.pyvista.org/version/stable/api/utilities/_autosummary/pyvista.Pyramid.htmlif show_camera:import pyvistadef get_faces(x):return x.faces.astype(np.uint32).reshape((x.n_faces, 4))[:, 1:]# Camera = Box + Cone (or Cylinder?)material_cam = pyrender.MetallicRoughnessMaterial(metallicFactor=metallicFactor, roughnessFactor=roughnessFactor, alphaMode='OPAQUE', baseColorFactor=(0.5,0.5,0.5))height = 0.2radius = 0.1cone = pyvista.Cone(center=(0.0, 0.0, -height/2), direction=(0.0, 0.0, -1.0), height=height, radius=radius).extract_surface().triangulate()verts = cone.pointsmesh = pyrender.Mesh.from_trimesh(trimesh.Trimesh(verts, get_faces(cone)), material=material_cam, smooth=smooth)scene.add(mesh, f"cone")size = 0.1box = pyvista.Box(bounds=(-size, size, -size, size, verts[:,-1].min() - 3*size, verts[:,-1].min())).extract_surface().triangulate()verts = box.pointsmesh = pyrender.Mesh.from_trimesh(trimesh.Trimesh(verts, get_faces(box)), material=material_cam, smooth=smooth)scene.add(mesh, f"box")# Coordinate system# https://docs.pyvista.org/version/stable/api/utilities/_autosummary/pyvista.Arrow.htmll_color = [(1,0,0,1.0), (0,1,0,1.0), (0,0,1,1.0)]l_direction = [(1,0,0), (0,1,0), (0,0,1)]scale = 0.2pose3d = [2*scale, 0.0, -scale]for i in range(len(l_color)):arrow = pyvista.Arrow(direction=l_direction[i], scale=scale)arrow = arrow.extract_surface().triangulate()verts = arrow.points + np.asarray([pose3d])faces = arrow.faces.astype(np.uint32).reshape((arrow.n_faces, 4))[:, 1:]mesh = trimesh.Trimesh(verts, faces)material = pyrender.MetallicRoughnessMaterial(metallicFactor=metallicFactor, roughnessFactor=roughnessFactor, alphaMode='OPAQUE', baseColorFactor=l_color[i])mesh = pyrender.Mesh.from_trimesh(mesh, material=material, smooth=smooth)scene.add(mesh, f"arrow_{i}")focal, princpt = cam_param['focal'], cam_param['princpt']camera_pose = np.eye(4)if 'R' in cam_param.keys():camera_pose[:3, :3] = cam_param['R']if 't' in cam_param.keys():camera_pose[:3, 3] = cam_param['t']camera = pyrender.IntrinsicsCamera(fx=focal[0], fy=focal[1], cx=princpt[0], cy=princpt[1])# cameracamera_pose = OPENCV_TO_OPENGL_CAMERA_CONVENTION @ camera_posecamera_pose = np.linalg.inv(camera_pose)scene.add(camera, pose=camera_pose)# rendererrenderer = pyrender.OffscreenRenderer(viewport_width=img.shape[1], viewport_height=img.shape[0], point_size=1.0)# lightlight = pyrender.DirectionalLight(intensity=intensity)scene.add(light, pose=camera_pose)# renderrgb, depth = renderer.render(scene, flags=pyrender.RenderFlags.RGBA)rgb = rgb[:,:,:3].astype(np.float32)fg = (depth > 0)[:,:,None].astype(np.float32)# Simple smoothing of the maskbg_blending_radius = 1bg_blending_kernel = 2.0 * torch.ones((1, 1, 2 * bg_blending_radius + 1, 2 * bg_blending_radius + 1)) / (2 * bg_blending_radius + 1) ** 2bg_blending_bias = -torch.ones(1)fg = fg.reshape((fg.shape[0],fg.shape[1]))fg = torch.from_numpy(fg).unsqueeze(0)fg = torch.clamp_min(torch.nn.functional.conv2d(fg, weight=bg_blending_kernel, bias=bg_blending_bias, padding=bg_blending_radius) * fg, 0.0)fg = fg.permute(1,2,0).numpy()# Alpha-blendingimg = (fg * (alpha * rgb + (1.0-alpha) * img) + (1-fg) * img).astype(np.uint8)renderer.delete()return img.astype(np.uint8)
调用函数
p_x, p_y = None, NoneK = get_camera_parameters(model.img_size, fov=args.fov, p_x=p_x, p_y=p_y)print(i,K)# Make model predictionsstart = time.time()humans = forward_model(model, x, K,det_thresh=args.det_thresh,nms_kernel_size=args.nms_kernel_size)duration = time.time() - startl_duration.append(duration)if len(humans)==0:print('----------humans:0--------')if len(humans)>0:# Superimpose predicted human meshes to the input image.img_array = np.asarray(img_pil_nopad)img_pil_visu= Image.fromarray(img_array)pred_rend_array, _color = overlay_human_meshes(humans, K, model, img_pil_visu, unique_color=args.unique_color)
相关文章:
pyrender 渲染mesh
目录 render_meshes函数 调用函数 render_meshes函数 def overlay_human_meshes(humans, K, model, img_pil, unique_colorFalse):# Color of humans seen in the image._color [color[0] for _ in range(len(humans))] if unique_color else color# Get focal and princpt …...

防火墙安全策略
目录 一.拓扑信息 二.需求分析 三.命令行详细配置信息 1.配置IP 2.交换机配置 3.修改安全区域 4.安全策略 四.web界面详细配置 1.配置IP和设置安全区域 2.交换机配置 3.安全策略 五.测试 一.拓扑信息 二.需求分析 1.VLAN 2属于办公区域;VLAN 3属于生…...
selenium clear()方法清除文本框内容
在使用Selenium进行Web自动化测试时,清除文本框内容是一个常见的需求。这可以通过多种方式实现,取决于你使用的是哪种编程语言(如Python、Java等)以及你的具体需求。以下是一些常见的方法: 1. 使用clear()方法 clear…...

(回溯分割)leetcode93 复原IP地址
#include<iostream> #include<vector> #include<string> #include<algorithm> using namespace std; //卡尔的图不是按照程序执行过程而是直接画程序会执行的过程 // 实际执行是:n个字符,递推n1后(叶子节点ÿ…...
高性能队列 Disruptor 在 IM 系统中的实战
高性能队列 Disruptor 在 IM 系统中的实战 前三期我们介绍了Disruptor的典型使用场景和相关高性能原理,本期我介绍一下Disruptor在IM系统用的应用实战,IM系统即社交聊天系统,对实时性的要求非常高,非常符合Disruptor的使用场景。 …...
原生HTML集合
一、表格 1、固定表格 <div class"tablebox"><div class"table-container"><table id"myTable" border"0" cellspacing"0" cellpadding"0"><thead><tr></tr></thead>…...

ES6 简单练习笔记--变量申明
一、ES5 变量定义 1.在全局作用域中 this 其实就是window对象 <script>console.log(window this) </script>输出结果: true 2.在全局作用域中用var定义一个变量其实就相当于在window上定义了一个属性 例如: var name "孙悟空" 其实就相当于执行了 win…...

2025.1.21——六、BUU XSS COURSE 1
题目来源:buuctf BUU XSS COURSE 1 一、打开靶机,整理信息 有吐槽和登陆两个尝试点,题目名称提示是XSS漏洞 XSS(Cross-Site Scripting)漏洞 1.定义:跨站脚本攻击,是一种常见的 Web 安全漏洞。攻…...
Linux - 五种常见I/O模型
I/O操作 (输入/输出操作, Input/Output) 是指计算机与外部设备就行数据交互的过程. 什么是外部设备: 如键盘, 鼠标, 硬盘, 网卡等. 五种常见的 I/O 模型: 阻塞 I/O非阻塞 I/O信号驱动 I/OI/O 多路复用异步 I/O 阻塞 I/O 阻塞 I/O 的特点: 当用户发起 I/O 请求后, 进程/线程就…...

【负载均衡式在线OJ】加载题目信息(文件版)
目录 如何读取文件 -- 常见流程 代码 如何读取文件 -- 常见流程 在C中使用 std::ifstream来打开文件流是一个常见的操作,用于创建一个输入文件流,并尝试打开名为 question_list的文件。if (!in.is_open()):检查文件是否成功打开。如果文件未…...
“上门按摩” 小程序开发项目:基于 SOP 的全流程管理
在竞争激烈的生活服务市场,“上门按摩” 服务需求日益增长。为满足这一需求,我们启动了 O2O 模式的 “上门按摩” 小程序开发项目,该项目涵盖客户端、系统管理端、技师端。以下将通过各类 SOP 对项目进行全面管理,确保项目顺利推进。 一、项目启动 SOP:5W2H 分析法 What(…...

WPF1-从最简单的xaml开始
1. 最简单的WPF应用 1.1. App.config1.2. App.xaml 和 App.xaml.cs1.3. MainWindow.xaml 和 MainWindow.xaml.cs 2. 正式开始分析 2.1. 声明即定义2.2. 命名空间 2.2.1. xaml的Property和Attribute2.2.2. xaml中命名空间2.2.3. partial关键字 学习WPF,肯定要先学…...

2025牛客寒假算法营2
A题 知识点:模拟 打卡。检查给定的七个整数是否仅包含 1,2,3,5,6 即可。为了便于书写,我们可以反过来,检查这七个整数是否不为 4 和 7。 时间 O(1);空间 O(1)。 #include <bits/stdc.h> using namespace std;signed main()…...

编译Android平台使用的FFmpeg库
目录 前言 一、编译环境 二、搭建环境 1.安装MSYS2 2.更新系统包 2.1 打开MSYS2 MinGW 64-bit终端(mingw64.exe) 2.2 更新所有软件包到最新版本 2.3 安装必要的工具和库。 3. 克隆FFmpeg源码 4. 配置编译选项 5. 执行编译 总结 前言 记录学习…...

【C++高并发服务器WebServer】-2:exec函数簇、进程控制
本文目录 一、exec函数簇介绍二、exec函数簇 一、exec函数簇介绍 exec 函数族的作用是根据指定的文件名找到可执行文件,并用它来取代调用进程的内容,换句话说,就是在调用进程内部执行一个可执行文件。 exec函数族的函数执行成功后不会返回&…...

力扣707题(2)——设计链表
#题目 #3,5和6的代码 今天看剩下几个题的代码,1,2,4的代码已经在上篇博客写过了想看的小伙伴移步到: 力扣707题——设计链表-CSDN博客 //第3题头插法 void addAtHead(int val){ //记录头结点ListNode nhead; //新节点的创建,并让它指向原本头结点的后…...

K8S中ingress详解
Ingress介绍 Kubernetes 集群中,服务(Service)是一种抽象,它定义了一种访问 Pod 的方式,无论这些 Pod 如何变化,服务都保持不变。服务可以被映射到一个静态的 IP 地址(ClusterIP)、一…...

SpringBoot打包为JAR包或WAR 包,这两种打包方式在运行时端口将如何采用?又有什么不同?这篇文章将给你解惑
你们好,我是金金金。 前提 SpringBoot打包方式:不是jar就是war包 场景 写这篇文章也是我遇到一个很不理解的点,所以就去研究了一下 场景如下: 这是后端生产配置文件给项目设置的端口,然后我前端写的url是:我就很纳闷,前端写了域名以及后端服务上下文路径,咋没写端口呢,…...

zabbix6.0安装及常用监控配置
文章目录 部署zabbix-serverzabbix监控节点部署解决zabbix中文乱码创建主机组创建模版配置主机与模版关联 监控boot分区监控网卡流量出网卡流量监控进入和出的总流量监控内存监控服务器端口用户自定应监控key值 (监控mysql查询数量)zabbix触发器监控cpu监控入网卡流量 邮件告警…...

SQL-leetcode—1179. 重新格式化部门表
1179. 重新格式化部门表 表 Department: ---------------------- | Column Name | Type | ---------------------- | id | int | | revenue | int | | month | varchar | ---------------------- 在 SQL 中,(id, month) 是表的联合主键。 这个表格有关…...
RestClient
什么是RestClient RestClient 是 Elasticsearch 官方提供的 Java 低级 REST 客户端,它允许HTTP与Elasticsearch 集群通信,而无需处理 JSON 序列化/反序列化等底层细节。它是 Elasticsearch Java API 客户端的基础。 RestClient 主要特点 轻量级ÿ…...
conda相比python好处
Conda 作为 Python 的环境和包管理工具,相比原生 Python 生态(如 pip 虚拟环境)有许多独特优势,尤其在多项目管理、依赖处理和跨平台兼容性等方面表现更优。以下是 Conda 的核心好处: 一、一站式环境管理:…...
基于大模型的 UI 自动化系统
基于大模型的 UI 自动化系统 下面是一个完整的 Python 系统,利用大模型实现智能 UI 自动化,结合计算机视觉和自然语言处理技术,实现"看屏操作"的能力。 系统架构设计 #mermaid-svg-2gn2GRvh5WCP2ktF {font-family:"trebuchet ms",verdana,arial,sans-…...

docker详细操作--未完待续
docker介绍 docker官网: Docker:加速容器应用程序开发 harbor官网:Harbor - Harbor 中文 使用docker加速器: Docker镜像极速下载服务 - 毫秒镜像 是什么 Docker 是一种开源的容器化平台,用于将应用程序及其依赖项(如库、运行时环…...

JavaScript 中的 ES|QL:利用 Apache Arrow 工具
作者:来自 Elastic Jeffrey Rengifo 学习如何将 ES|QL 与 JavaScript 的 Apache Arrow 客户端工具一起使用。 想获得 Elastic 认证吗?了解下一期 Elasticsearch Engineer 培训的时间吧! Elasticsearch 拥有众多新功能,助你为自己…...

UR 协作机器人「三剑客」:精密轻量担当(UR7e)、全能协作主力(UR12e)、重型任务专家(UR15)
UR协作机器人正以其卓越性能在现代制造业自动化中扮演重要角色。UR7e、UR12e和UR15通过创新技术和精准设计满足了不同行业的多样化需求。其中,UR15以其速度、精度及人工智能准备能力成为自动化领域的重要突破。UR7e和UR12e则在负载规格和市场定位上不断优化…...

Redis数据倾斜问题解决
Redis 数据倾斜问题解析与解决方案 什么是 Redis 数据倾斜 Redis 数据倾斜指的是在 Redis 集群中,部分节点存储的数据量或访问量远高于其他节点,导致这些节点负载过高,影响整体性能。 数据倾斜的主要表现 部分节点内存使用率远高于其他节…...
鸿蒙DevEco Studio HarmonyOS 5跑酷小游戏实现指南
1. 项目概述 本跑酷小游戏基于鸿蒙HarmonyOS 5开发,使用DevEco Studio作为开发工具,采用Java语言实现,包含角色控制、障碍物生成和分数计算系统。 2. 项目结构 /src/main/java/com/example/runner/├── MainAbilitySlice.java // 主界…...

Aspose.PDF 限制绕过方案:Java 字节码技术实战分享(仅供学习)
Aspose.PDF 限制绕过方案:Java 字节码技术实战分享(仅供学习) 一、Aspose.PDF 简介二、说明(⚠️仅供学习与研究使用)三、技术流程总览四、准备工作1. 下载 Jar 包2. Maven 项目依赖配置 五、字节码修改实现代码&#…...
Linux离线(zip方式)安装docker
目录 基础信息操作系统信息docker信息 安装实例安装步骤示例 遇到的问题问题1:修改默认工作路径启动失败问题2 找不到对应组 基础信息 操作系统信息 OS版本:CentOS 7 64位 内核版本:3.10.0 相关命令: uname -rcat /etc/os-rele…...