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

搭建自动驾驶RC车:如何将Pi Camera拍摄的图片转为data_test.npz用于神经网络训练?

把自动驾驶RC车的图片转换成data_test.npz的方法

嗨,我来帮你搞定这个问题!不管是处理已经拍好的数百张图片,还是优化现有脚本直接生成训练用的npz文件,我都给你整理好步骤啦。

一、处理已有的direction.jpg图片生成npz文件

如果已经有一堆命名为direction.jpg(比如forward.jpg、left.jpg这类)的图片,咱们可以写个脚本批量读取并转换成numpy数组,再保存成npz格式:

步骤1:导入所需库

首先确保你已经安装了numpy和Pillow(或者用OpenCV也行,这里用Pillow更简单):

pip install numpy pillow

步骤2:批量转换脚本

import numpy as np
from PIL import Image
import os

def images_to_npz(image_dir, output_file="data_test.npz"):
    # 存储图片数据和对应的标签
    images = []
    labels = []
    
    # 遍历图片目录里的所有文件
    for filename in os.listdir(image_dir):
        # 只处理jpg文件
        if filename.endswith(".jpg"):
            # 从文件名提取方向标签(比如"forward.jpg"提取"forward")
            label = filename.split(".")[0]
            # 读取图片并转换成numpy数组
            img_path = os.path.join(image_dir, filename)
            img = Image.open(img_path).convert("RGB")  # 确保是RGB格式
            img_array = np.array(img)
            # 添加到列表
            images.append(img_array)
            labels.append(label)
    
    # 转换成numpy数组
    images_np = np.array(images)
    labels_np = np.array(labels)
    
    # 保存成npz文件
    np.savez(output_file, images=images_np, labels=labels_np)
    print(f"成功生成{output_file},包含{len(images_np)}张图片和对应标签")

# 使用示例:替换成你的图片所在目录
images_to_npz("./rc_car_images")

这个脚本会把所有图片转换成numpy数组,同时提取文件名里的方向作为标签,最后打包成data_test.npz——你可以用np.load("data_test.npz")来加载,里面的images是图片数组,labels是对应的方向标签。

二、优化现有拍照脚本,直接生成npz(更高效)

如果你还在收集数据,其实可以不用先存成大量jpg文件,直接在拍照时把图片数据和标签存在内存里,最后一次性保存成npz,这样能节省磁盘空间和后续转换的时间:

修改你的现有脚本,添加数据收集的逻辑:

#!/usr/bin/env python 
import pygame
import picamera
import io
import numpy as np
from PIL import Image
import configuration  # 你的配置文件

def interactive_control(): 
    """Runs the interactive control""" 
    setup_interactive_control() 
    clock = pygame.time.Clock() 
    # 初始化数据收集列表
    collected_images = []
    collected_labels = []

    with picamera.PiCamera() as camera: 
        # 可以添加相机配置,比如分辨率
        camera.resolution = (640, 480)
        camera.start_preview()
        command = 'idle' 
        duty_cycle = configuration.INITIAL_PWM_DUTY_CYCLE 
        while True: 
            up_key, down, left, right, change, accelerate, decelerate, stop = get_keys() 
            print(command) 
            stream = io.BytesIO() 
            camera.capture(stream, format='jpeg', use_video_port=True) 
            # 这里不再存成jpg,而是直接转换成numpy数组
            stream.seek(0)
            img = Image.open(stream).convert("RGB")
            img_array = np.array(img)
            collected_images.append(img_array)
            collected_labels.append(command)

            # 可以添加一个退出条件,比如按下某个键就保存并退出
            if stop:  # 假设stop键是退出控制
                break

            stream.flush() 
            clock.tick(1)  # 每秒拍一张,和你原来的逻辑一致

    # 退出后保存成npz文件
    images_np = np.array(collected_images)
    labels_np = np.array(collected_labels)
    np.savez("data_test.npz", images=images_np, labels=labels_np)
    print(f"数据已保存到data_test.npz,共{len(images_np)}条数据")
    pygame.quit() 

def setup_interactive_control(): 
    """Setup the Pygame Interactive Control Screen"""
    # 这里补充你原有的初始化代码,比如pygame初始化
    pygame.init()
    # 其他设置...

def get_keys():
    """读取按键输入,返回各按键状态"""
    # 这里补充你原有的按键读取逻辑
    keys = pygame.key.get_pressed()
    up_key = keys[pygame.K_UP]
    down = keys[pygame.K_DOWN]
    left = keys[pygame.K_LEFT]
    right = keys[pygame.K_RIGHT]
    change = keys[pygame.K_c]
    accelerate = keys[pygame.K_a]
    decelerate = keys[pygame.K_d]
    stop = keys[pygame.K_ESCAPE]  # 比如用ESC键停止并保存
    return up_key, down, left, right, change, accelerate, decelerate, stop

def main(): 
    """Main function"""
    interactive_control()

if __name__ == '__main__': 
    main() 

这样修改后,你运行脚本控制车辆时,会实时把图片和方向标签存在内存里,按下停止键(比如ESC)后就会自动生成data_test.npz,不用再单独转换啦。

小提示

  • 如果图片分辨率太高,训练时会很慢,你可以在读取或拍照时把图片resize到合适的大小,比如img = img.resize((128, 96)),这样能减少数据量。
  • 标签如果需要转换成数字(比如神经网络常用的one-hot编码),可以在保存前处理:比如用字典把forward映射成0,left映射成1,以此类推。

内容的提问来源于stack exchange,提问作者Harsh R

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 09:04:15