iDP3复现代码数据预处理全流程(二)——vis_dataset.py
vis_dataset.py 主要作用在于点云数据的可视化,并可以做一些简单的预处理
关键参数基本都在 vis_dataset.sh 中定义了,需要改动的仅以下两点:
1. 点云图像保存位置,因为 dataset_path 被设置为了绝对路径,因此需要相应修改:
save_dir = f"{dataset_path}/{episode_idx}" # 设置当前集的保存目录
2. 点云视频保存位置,对应修改:
if vis_cloud:# 将图像序列转换为视频os.system(f"ffmpeg -r 10 -i {save_dir}/%d.png -vcodec mpeg4 -y {dataset_path}/{episode_idx}.mp4")
运行生成:


更详细解释如下:
目录
1 库函数调用
2 创建 ArgumentParser 对象,解析命令行参数
3 打开指定路径 Zarr 数据集并获取数据
4 分割数据、处理并保存
5 回放图像和点云数据
6 将点云图像存为视频
1 库函数调用
import zarr # 导入 zarr 库,用于处理 zarr 格式的数据
import cv2 # 导入 OpenCV 库,用于图像处理
from termcolor import cprint # 从 termcolor 库导入 cprint 函数,用于彩色打印输出
import time # 导入 time 库,用于时间相关操作
from tqdm import tqdm # 导入 tqdm 库,用于显示进度条
import visualizer # 导入自定义的 visualizer 模块,用于点云可视化
import os # 导入 os 库,用于操作系统相关功能
import argparse # 导入 argparse 库,用于解析命令行参数
import numpy as np # 导入 numpy 库,用于数值计算
除了 visualizer 为自定义库函数,其余均为标准库
2 创建 ArgumentParser 对象,解析命令行参数
# 创建 ArgumentParser 对象,用于解析命令行参数
parser = argparse.ArgumentParser()
parser.add_argument("--dataset_path", type=str, default="data/box_zarr") # 添加 dataset_path 参数,默认值为 "data/box_zarr"
parser.add_argument("--use_img", type=int, default=0) # 添加 use_img 参数,默认值为 0(不使用图像数据)
parser.add_argument("--vis_cloud", type=int, default=0) # 添加 vis_cloud 参数,默认值为 0(不可视化点云数据)
parser.add_argument("--use_pc_color", type=int, default=0) # 添加 use_pc_color 参数,默认值为 0(不使用点云颜色)
parser.add_argument("--downsample", type=int, default=0) # 添加 downsample 参数,默认值为 0(不下采样)# 解析命令行参数
args = parser.parse_args()
use_img = args.use_img
dataset_path = args.dataset_path
vis_cloud = args.vis_cloud
use_pc_color = args.use_pc_color
downsample = args.downsample
命令行参数均在 vis_dataset.sh 中定义,若未定义,则会使用默认参数
3 打开指定路径 Zarr 数据集并获取数据
# 使用 zarr 打开指定路径的数据集
with zarr.open(dataset_path) as zf:print(zf.tree()) # 打印数据集的树状结构# 获取数据if use_img:all_img = zf['data/img'] # 获取图像数据all_point_cloud = zf['data/point_cloud'] # 获取点云数据all_episode_ends = zf['meta/episode_ends'] # 获取集结束标记
打开 dataset_path 位置数据集,并获取对应数据
4 分割数据、处理并保存
# 根据 episode_ends 划分每一集的数据for episode_idx, episode_end in enumerate(all_episode_ends):if episode_idx == 0:if use_img:img_episode = all_img[:episode_end] # 获取第一集的图像数据point_cloud_episode = all_point_cloud[:episode_end] # 获取第一集的点云数据else:if use_img:img_episode = all_img[all_episode_ends[episode_idx-1]:episode_end] # 获取当前集的图像数据point_cloud_episode = all_point_cloud[all_episode_ends[episode_idx-1]:episode_end] # 获取当前集的点云数据save_dir = f"visualizations/{dataset_path}/{episode_idx}" # 设置当前集的保存目录if vis_cloud:os.makedirs(save_dir, exist_ok=True) # 创建保存目录(如果需要可视化点云)cprint(f"replay episode {episode_idx}", "green") # 打印当前集的重放信息,使用绿色字体
5 回放图像和点云数据
# 回放每一帧的数据for i in range(point_cloud_episode.shape[0]):pc = point_cloud_episode[i] # 获取当前帧的点云数据# 如果需要下采样if downsample:num_points = 4096 # 设置下采样点数idx = np.random.choice(pc.shape[0], num_points, replace=False) # 随机选择点pc = pc[idx] # 获取下采样后的点云数据if use_img:img = img_episode[i] # 获取当前帧的图像数据img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB) # 将图像从 BGR 转换为 RGBcv2.imshow('img', img) # 显示图像cv2.waitKey(1) # 等待 1 毫秒time.sleep(0.05) # 暂停 0.05 秒if vis_cloud:if not use_pc_color:pc = pc[:, :3] # 如果不使用点云颜色,只保留前三个维度(XYZ)visualizer.visualize_pointcloud(pc, img_path=f"{save_dir}/{i}.png") # 可视化点云并保存图像print(f"vis cloud saved to {save_dir}/{i}.png") # 打印保存路径print(f"frame {i}/{point_cloud_episode.shape[0]}") # 打印当前帧的处理进度
6 将点云图像存为视频
if vis_cloud:# 将图像序列转换为视频os.system(f"ffmpeg -r 10 -i {save_dir}/%d.png -vcodec mpeg4 -y {dataset_path}/{episode_idx}.mp4")
使用 ffmpeg 命令将保存在{save_dir}目录下的一系列PNG图片(按序号命名)转换为帧率为10帧每秒的MPEG-4格式视频
并保存到 {dataset_path}/{episode_idx}.mp4,如果输出文件已存在,则会直接覆盖
相关文章:
iDP3复现代码数据预处理全流程(二)——vis_dataset.py
vis_dataset.py 主要作用在于点云数据的可视化,并可以做一些简单的预处理 关键参数基本都在 vis_dataset.sh 中定义了,需要改动的仅以下两点: 1. 点云图像保存位置,因为 dataset_path 被设置为了绝对路径,因此需要相…...
容器化部署服务全流程
系列文章目录 文章目录 系列文章目录前言一、什么是容器?二、如何安装docker三、如何写dockerfile四、如何启动服务五、常见命令总结总结 前言 这篇文章,主要目的是通过容器化技术简化应用程序的部署、运行和管理,提高开发、测试和生产环境…...
Flutter DragTarget拖拽控件详解
文章目录 1. DragTarget 控件的构造函数主要参数: 2. DragTarget 的工作原理3. 常见用法示例 1:实现一个简单的拖拽目标解释:示例 2:与 Draggable 结合使用解释: 4. DragTarget 的回调详解5. 总结 DragTarget 是 Flutt…...
操作系统动态分区分配算法-首次适应算法c语言实现
目录 一、算法原理 二、算法特点 1.优先利用低址空闲分区: 2.查找开销: 3.内存碎片: 三、内存回收四种情况 1.回收区上面(或后面)的分区是空闲分区: 2.回收区下面(或前面)的…...
mybatis-plus自动填充时间的配置类实现
mybatis-plus自动填充时间的配置类实现 在实际操作过程中,我们并不希望创建时间、修改时间这些来手动进行,而是希望通过自动化来完成,而mybatis-plus则也提供了自动填充功能来实现这一操作,接下来,就来了解一下mybatis…...
Vite内网ip访问,两种配置方式和修改端口号教程
目录 问题 两种解决方式 结果 总结 preview.host preview.port 问题 使用vite运行项目的时候,控制台会只出现127.0.0.1(localhost)本地地址访问项目。不可以通过公司内网ip访问,其他团队成员无法访问,这是因为没…...
【星海随笔】删除ceph
cephadm shell ceph osd set noout ceph osd set norecover ceph osd set norebalance ceph osd set nobackfill ceph osd set nodown ceph osd set pause参考文献: https://blog.csdn.net/lyf0327/article/details/90294011 systemctl stop ceph-osd.targetyum re…...
HarmonyOS NEXT实战:自定义封装多种样式导航栏组件
涉及知识点和装饰器 ComponentV2,Local, Builder,BuilderParam,Extend, Require ,Param,Event等第三方库:ZRouter ,如项目中本来就用了ZRouter路由库,案例中…...
大数据面试笔试宝典之Flink面试
1.Flink 是如何支持批流一体的? F link 通过一个底层引擎同时支持流处理和批处理. 在流处理引擎之上,F link 有以下机制: 1)检查点机制和状态机制:用于实现容错、有状态的处理; 2)水印机制:用于实现事件时钟; 3)窗口和触发器:用于限制计算范围,并定义呈现结果的…...
pytorch整体环境打包安装到另一台电脑上
步骤一:安装conda-pack 首先利用 pip list 指令检查conda环境安装在哪里,在系统环境(base)下,于是我是使用的conda指令完成的。 # 使用Conda安装(如果已安装conda) conda install conda-pack …...
PostgreSQL 数据库连接
title: PostgreSQL 数据库连接 date: 2024/12/29 updated: 2024/12/29 author: cmdragon excerpt: PostgreSQL是一款功能强大的开源关系数据库管理系统,在现代应用中广泛应用于数据存储和管理。连接到数据库是与PostgreSQL进行交互的第一步,这一过程涉及到多个方面,包括连…...
【算法】复杂性理论初步
六、算法复杂性初步 重要的复杂性类 P P P 的定义 多项式时间内可解的问题 若 L ∈ P L∈P L∈P,则存在确定性多项式时间的图灵机 M M M,使得 M ( x ) 1 ⟺ x ∈ L M(x)1⟺x∈L M(x)1⟺x∈L N P NP NP 的定义 多项式时间内可验证验证解的正确性 &…...
HarmonyOS NEXT应用开发实战:免费练手的网络API接口分享
学习一项技能,最好也最快的办法就是直接动手实战。在实战中不断的总结经验和收获成就感。这里分享些好用且免费的网络API练手接口,这对于想要提升自己网络开发能力的开发者来说,无疑是极大的福音。今天,我将详细介绍一个API接口集…...
C++的第一个程序
前言 在学习c之前,你一定还记得c语言的第一个程序 当时刚刚开始进行语言学习 因此告诉到,仅仅需要记住就可以 #include <stdio.h>int main(){printf("Hello World");return 0; }而对于c中的第一个程序,似乎有所变化 C的…...
Java 中 Stream 流的使用详解
Java 中 Stream 流的使用详解 什么是 Stream? Stream 是 Java 8 引入的一种全新的操作集合的方式。它支持通过声明性方式对集合进行复杂的数据操作(如过滤、排序、聚合等),避免使用大量的 for 循环,提高代码的可读性…...
【UE5.3.2】生成vs工程并rider打开
Rider是跨平台的,UE也是,当前现在windows上测试首先安装ue5.3.2 会自动有右键的菜单: windows上,右键,生成vs工程 生成的结果 sln默认是vs打开的,我的是vs2022,可以open with 选择 rider :Rider 会弹出 RiderLink是什么插...
ssh免密码登陆配置
ssh 命令本身不支持直接在命令中带上密码,出于安全考虑,SSH 协议不允许将密码明文写在命令中。直接在命令行中输入密码是一种不推荐的做法,因为它会暴露密码,增加安全风险。 如果你希望实现自动化登录而不手动输入密码࿰…...
Hive之import和export使用详解
在hive-0.8.0后引入了import/export命令。 Export命令可以导出一张表或分区的数据和元数据信息到一个输出位置,并且导出数据可以被移动到另一个hadoop集群或hive实例,并且可以通过import命令导入数据。 当导出一个分区表,原始数据可能在hdf…...
数据库锁的深入探讨
数据库锁(Database Lock)是多用户环境中用于保证数据一致性和隔离性的机制。随着数据库系统的发展,特别是在高并发的场景下,锁的机制变得尤为重要。通过使用锁,数据库能够防止并发操作导致的数据冲突或不一致。本文将深…...
【每日学点鸿蒙知识】沉浸式状态栏、类似ref 属性功能属性实现、自定义对话框背景透明、RichEditor粘贴回调、自动滚动列表
1、HarmonyOS 沉浸式状态栏? 实现沉浸式状态栏功能时,能够实现,但是目前每个自定义组件都需要padding top 状态栏的高度才行,有办法实现统一设置吗?不需要每个自定义组件中都padding top 状态栏的高度? 暂…...
DeepSeek 赋能智慧能源:微电网优化调度的智能革新路径
目录 一、智慧能源微电网优化调度概述1.1 智慧能源微电网概念1.2 优化调度的重要性1.3 目前面临的挑战 二、DeepSeek 技术探秘2.1 DeepSeek 技术原理2.2 DeepSeek 独特优势2.3 DeepSeek 在 AI 领域地位 三、DeepSeek 在微电网优化调度中的应用剖析3.1 数据处理与分析3.2 预测与…...
以下是对华为 HarmonyOS NETX 5属性动画(ArkTS)文档的结构化整理,通过层级标题、表格和代码块提升可读性:
一、属性动画概述NETX 作用:实现组件通用属性的渐变过渡效果,提升用户体验。支持属性:width、height、backgroundColor、opacity、scale、rotate、translate等。注意事项: 布局类属性(如宽高)变化时&#…...
聊一聊接口测试的意义有哪些?
目录 一、隔离性 & 早期测试 二、保障系统集成质量 三、验证业务逻辑的核心层 四、提升测试效率与覆盖度 五、系统稳定性的守护者 六、驱动团队协作与契约管理 七、性能与扩展性的前置评估 八、持续交付的核心支撑 接口测试的意义可以从四个维度展开,首…...
Maven 概述、安装、配置、仓库、私服详解
目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...
ABAP设计模式之---“简单设计原则(Simple Design)”
“Simple Design”(简单设计)是软件开发中的一个重要理念,倡导以最简单的方式实现软件功能,以确保代码清晰易懂、易维护,并在项目需求变化时能够快速适应。 其核心目标是避免复杂和过度设计,遵循“让事情保…...
并发编程 - go版
1.并发编程基础概念 进程和线程 A. 进程是程序在操作系统中的一次执行过程,系统进行资源分配和调度的一个独立单位。B. 线程是进程的一个执行实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位。C.一个进程可以创建和撤销多个线程;同一个进程中…...
PHP 8.5 即将发布:管道操作符、强力调试
前不久,PHP宣布了即将在 2025 年 11 月 20 日 正式发布的 PHP 8.5!作为 PHP 语言的又一次重要迭代,PHP 8.5 承诺带来一系列旨在提升代码可读性、健壮性以及开发者效率的改进。而更令人兴奋的是,借助强大的本地开发环境 ServBay&am…...
人工智能--安全大模型训练计划:基于Fine-tuning + LLM Agent
安全大模型训练计划:基于Fine-tuning LLM Agent 1. 构建高质量安全数据集 目标:为安全大模型创建高质量、去偏、符合伦理的训练数据集,涵盖安全相关任务(如有害内容检测、隐私保护、道德推理等)。 1.1 数据收集 描…...
用 FFmpeg 实现 RTMP 推流直播
RTMP(Real-Time Messaging Protocol) 是直播行业中常用的传输协议。 一般来说,直播服务商会给你: ✅ 一个 RTMP 推流地址(你推视频上去) ✅ 一个 HLS 或 FLV 拉流地址(观众观看用)…...
02-性能方案设计
需求分析与测试设计 根据具体的性能测试需求,确定测试类型,以及压测的模块(web/mysql/redis/系统整体)前期要与相关人员充分沟通,初步确定压测方案及具体的性能指标QA完成性能测试设计后,需产出测试方案文档发送邮件到项目组&…...
