You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将Waymo数据集中的TFRecord文件提取为可正常读取的JPEG图片

问题根因

你当前的代码直接将TFRecord中序列化的全量Frame数据写入文件,未解析出其中独立的JPEG图像字段,导出的文件并非合法JPEG格式,自然无法正常打开。

修正方案

依赖准备

先安装与你的TensorFlow版本匹配的Waymo数据集解析包,比如对应TF2.15版本可执行pip install waymo-open-dataset-tf-2-15-0,版本号后缀可根据你的实际TF版本调整。

修正后代码

import tensorflow as tf
from waymo_open_dataset import dataset_pb2 as open_dataset

FILENAME = 'D:\\waymo3\\waymo_open_dataset_v_1_2_0_individual_files\\training\\segment-15832924468527961_1564_160_1584_160_with_camera_labels.tfrecord'
SAVE_DIR = 'C:\\Users\\my_user\\Desktop\\extracted_pic\\'

dataset = tf.data.TFRecordDataset(FILENAME, compression_type='')
frame_idx = 0
# 相机名映射,方便命名文件
camera_name_map = {
    0: 'unknown',
    1: 'front',
    2: 'front_left',
    3: 'front_right',
    4: 'side_left',
    5: 'side_right'
}

for serialized_data in dataset:
    # 反序列化为Frame对象
    frame = open_dataset.Frame()
    frame.ParseFromString(bytearray(serialized_data.numpy()))
    
    # 遍历该帧下所有相机的图像
    for camera_image in frame.images:
        camera_name = camera_name_map[camera_image.name]
        save_path = f"{SAVE_DIR}{frame_idx}_{camera_name}.jpeg"
        # 直接写入JPEG二进制数据
        with open(save_path, 'wb') as f:
            f.write(camera_image.image)
    
    frame_idx += 1
    # 可选:添加进度打印
    if frame_idx % 10 == 0:
        print(f"已处理{frame_idx}帧")
补充说明
  • Waymo的每帧TFRecord数据包含5个不同方位相机的图像,上述代码会分别导出同一帧下的所有相机图片,命名规则为帧序号_相机方位.jpeg
  • 如果不想安装完整的Waymo解析包,也可以自行构造tf.train.Example的特征解析字典,直接定位到JPEG数据的字节字段,不过使用官方提供的Proto解析类稳定性更高,也能同时获取其他标注字段。
  • Windows环境下路径不需要额外调整,确保保存目录已提前创建即可,代码不会自动创建不存在的目录。

内容的提问来源于stack exchange,提问作者material bug

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 12:06:03