告别手动操作:Rerun多模态数据批量可视化自动化指南
在数据科学和计算机视觉领域,处理多模态数据(如图像、点云、传感器数据流)时,可视化往往是最耗时的环节之一。你是否还在为逐一调整可视化参数、重复编写相似代码而烦恼?本文将带你掌握如何使用Python脚本自动化Rerun(GitHub_Trending/re/rerun)的多模态数据可视化流程,从单文件处理到大规模并行计算,让数据洞察效率提升10倍。
核心价值:为什么选择Rerun自动化
Rerun是一个基于Rust和egui构建的多模态数据可视化工具(Visualize streams of multimodal data),其核心优势在于高效集成和实时渲染。通过Python脚本自动化,我们可以实现:
- 批量处理:一次运行处理成百上千个数据文件
- 标准化流程:确保不同实验数据的可视化参数一致性
- 并行计算:利用多核CPU同时处理多源异构数据
- 结果复用:生成可重现的可视化报告和Rerun数据文件(.rrd)
项目核心文档:
- 官方指南:README.md
- Python API参考:rerun_py/README.md
- 自动化示例:examples/python/
基础自动化:单脚本处理多模态数据
从最简单的自动化开始,我们可以创建一个脚本来处理多种类型的数据文件。以下是一个能够同时可视化点云、图像和文本数据的示例:
import rerun as rr
import numpy as np
from pathlib import Path
def auto_visualize(data_dir):
# 初始化Rerun会话
rr.init("multimodal_batch_processor")
rr.spawn() # 自动启动可视化窗口
# 遍历目录中的所有数据文件
for file_path in Path(data_dir).glob("*.*"):
# 根据文件扩展名自动选择可视化方式
if file_path.suffix == ".ply":
# 可视化点云数据
points = np.loadtxt(file_path)
rr.log(f"point_clouds/{file_path.stem}", rr.Points3D(points))
elif file_path.suffix in [".png", ".jpg"]:
# 可视化图像数据
image = rr.load_image(file_path)
rr.log(f"images/{file_path.stem}", rr.Image(image))
elif file_path.suffix == ".txt":
# 可视化文本日志
with open(file_path, "r") as f:
text = f.read()
rr.log(f"logs/{file_path.stem}", rr.TextLog(text))
if __name__ == "__main__":
auto_visualize("path/to/your/data")
这段代码实现了以下核心功能:
- 自动识别文件类型并应用对应可视化方法
- 使用文件系统路径作为Rerun实体路径,自动组织可视化层级
- 无需手动调整参数即可生成标准化可视化结果
基础示例代码:examples/python/minimal/minimal.py
中级自动化:多线程并行处理
当处理大量数据时,单线程处理速度可能无法满足需求。Rerun支持Python的多线程机制,可以同时处理多个数据流:
import threading
import rerun as rr
from queue import Queue
def worker(queue):
rr.init("multithread_visualizer")
rr.connect_grpc() # 连接到主进程的Rerun查看器
while True:
data_path = queue.get()
if data_path is None: # 终止信号
break
# 处理数据并可视化
process_and_log(data_path)
queue.task_done()
def parallel_visualize(data_paths, num_workers=4):
rr.init("multithread_visualizer")
rr.spawn(connect=False) # 启动主查看器
# 创建任务队列
queue = Queue()
for path in data_paths:
queue.put(path)
# 启动工作线程
threads = []
for _ in range(num_workers):
t = threading.Thread(target=worker, args=(queue,))
t.start()
threads.append(t)
# 等待所有任务完成
queue.join()
# 发送终止信号并等待线程结束
for _ in threads:
queue.put(None)
for t in threads:
t.join()
多线程示例:examples/python/multithreading/multithreading.py
多线程架构示意图:
高级自动化:分布式多进程处理
对于超大规模数据处理(如SLAM序列、机器人日志),我们需要用到多进程并行。Rerun的跨进程通信机制允许不同进程的数据无缝合并到同一可视化空间:
import multiprocessing
import rerun as rr
import os
@rr.shutdown_at_exit # 确保进程退出时数据被正确刷新
def process_worker(data_path, recording_id):
# 每个进程独立初始化,但使用相同的recording_id
rr.init("distributed_visualizer", recording_id=recording_id)
rr.connect_grpc() # 连接到主查看器
# 处理数据并记录
data = load_data(data_path)
rr.log(f"process_{os.getpid()}/{data_path.stem}", data)
def distributed_visualize(data_paths):
# 主进程初始化并启动查看器
rr.init("distributed_visualizer")
recording_id = rr.get_recording_id() # 获取当前会话ID
rr.spawn(connect=False)
# 创建进程池
with multiprocessing.Pool(processes=multiprocessing.cpu_count()) as pool:
# 为每个数据路径创建一个处理进程
pool.starmap(process_worker, [(path, recording_id) for path in data_paths])
多进程示例:examples/python/multiprocess_logging/multiprocess_logging.py
实战案例:自动驾驶数据批处理
让我们以自动驾驶传感器数据为例,展示完整的自动化可视化流程。以下脚本可以处理一个包含摄像头图像、激光雷达点云和IMU数据的数据集:
import rerun as rr
import glob
import numpy as np
from pathlib import Path
def process_camera(path):
image = np.load(path)
rr.log(f"sensors/camera/{path.parent.name}", rr.Image(image))
def process_lidar(path):
points = np.fromfile(path, dtype=np.float32).reshape(-1, 4)
rr.log(f"sensors/lidar/{path.parent.name}", rr.Points3D(points[:, :3], colors=rr.ColorMode.INDEX))
def process_imu(path):
imu_data = np.loadtxt(path, delimiter=',')
rr.log(f"sensors/imu", rr.TimeSeriesScalar(imu_data[:, 1], label="accelerometer_x"))
def auto_process_dataset(root_dir):
rr.init("autonomous_driving_visualizer")
rr.spawn()
# 定义数据类型与处理函数的映射
processors = {
"camera": (".npy", process_camera),
"lidar": (".bin", process_lidar),
"imu": (".csv", process_imu)
}
# 遍历所有数据目录
for sensor_type, (ext, processor) in processors.items():
for path in Path(root_dir).rglob(f"*{ext}"):
processor(path)
# 保存可视化结果供后续分析
rr.save("autonomous_driving_visualization.rrd")
if __name__ == "__main__":
auto_process_dataset("path/to/autonomous_driving_dataset")
生成的Rerun数据文件:examples/assets/example.rrd
自动化最佳实践与工具链
数据文件组织规范
为确保自动化脚本能够正确识别和处理数据,建议采用以下目录结构:
dataset_root/
├── camera/
│ ├── 0001.png
│ ├── 0002.png
│ └── ...
├── lidar/
│ ├── 0001.ply
│ ├── 0002.ply
│ └── ...
└── imu/
├── 0001.csv
├── 0002.csv
└── ...
错误处理与日志
在自动化脚本中加入完善的错误处理机制:
def safe_process(func):
def wrapper(path):
try:
func(path)
rr.log("system/logs", rr.TextLog(f"Processed {path} successfully"))
except Exception as e:
rr.log("system/errors", rr.TextLog(f"Failed to process {path}: {str(e)}", level=rr.LogLevel.ERROR))
print(f"Error processing {path}: {e}")
return wrapper
结果验证与质量控制
自动化流程中加入结果验证步骤:
def validate_visualization():
# 检查是否有数据被记录
stats = rr.get_recording_stats()
if stats.num_entities == 0:
raise RuntimeError("No data was recorded!")
# 保存统计信息
with open("visualization_stats.txt", "w") as f:
f.write(f"Entities: {stats.num_entities}\n")
f.write(f"Components: {stats.num_components}\n")
f.write(f"Time range: {stats.time_range}\n")
自动化工作流集成
与数据采集管道集成
可以将Rerun自动化脚本集成到数据采集 pipeline 中,实时可视化数据流:
def data_acquisition_pipeline():
sensor = connect_to_sensors()
# 初始化Rerun
rr.init("realtime_sensor_visualizer")
rr.spawn()
# 创建后台保存进程
save_queue = multiprocessing.Queue()
save_process = multiprocessing.Process(target=save_worker, args=(save_queue,))
save_process.start()
try:
while True:
# 获取传感器数据
data = sensor.get_data()
# 实时可视化
visualize_sensor_data(data)
# 将数据发送到保存队列
save_queue.put(data)
if user_stop_requested():
break
finally:
save_queue.put(None) # 发送终止信号
save_process.join()
与CI/CD系统集成
通过将Rerun自动化脚本集成到持续集成流程,可以在每次代码提交时自动生成可视化结果,帮助团队快速发现数据处理逻辑中的问题:
# .github/workflows/visualization.yml
name: Generate Visualization
on: [push]
jobs:
visualize:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: '3.10'
- name: Install dependencies
run: pip install rerun-sdk numpy
- name: Generate visualization
run: python scripts/auto_visualize.py test_data/
- name: Upload Rerun file
uses: actions/upload-artifact@v3
with:
name: visualization-results
path: *.rrd
总结与进阶方向
通过本文介绍的自动化技术,你已经掌握了Rerun可视化的批量处理方法:从单脚本处理到多线程/多进程并行计算,再到完整的工作流集成。这些技术可以帮助你将数据可视化时间从数小时缩短到几分钟,让更多精力专注于数据分析本身。
进阶学习路径:
- 自定义可视化组件:examples/rust/custom_view/
- 分布式数据加载:examples/python/external_data_loader/
- 可视化结果比较:scripts/compare.py
现在,你已经具备构建企业级多模态数据可视化自动化系统的核心能力。立即克隆项目仓库开始实践:
git clone https://gitcode.com/GitHub_Trending/re/rerun
cd rerun
pip install rerun-sdk
项目开发文档:BUILD.md 贡献指南:CONTRIBUTING.md
祝你的数据可视化之旅自动化、高效化!如有任何问题,欢迎通过项目issue系统提交反馈。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



