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

如何用Python脚本自动在Raspberry Pi与Jetson TX2间传图?含替代方案

Raspberry Pi与Jetson TX2图片自动传输方案

Python脚本实现方法

1. SSH/SCP传输(基于paramiko库)

通过SSH协议直接将树莓派本地图片上传到Jetson,适合简单直接的场景。

步骤:

  • 树莓派安装依赖库:pip install paramiko
  • 确保Jetson开启SSH服务:执行sudo systemctl enable ssh和sudo systemctl start ssh

树莓派端传输脚本:

import paramiko
import os

# 配置参数(替换为你的实际信息)
JETSON_IP = "192.168.x.x"
JETSON_USER = "jetson"
JETSON_PASSWORD = "your_password"
LOCAL_IMAGE_PATH = "/home/pi/Desktop/captured_image.jpg"
REMOTE_IMAGE_PATH = "/home/jetson/Desktop/received_image.jpg"

# 建立连接并上传
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
try:
    ssh.connect(JETSON_IP, username=JETSON_USER, password=JETSON_PASSWORD)
    sftp = ssh.open_sftp()
    sftp.put(LOCAL_IMAGE_PATH, REMOTE_IMAGE_PATH)
    sftp.close()
    print("图片传输完成")
except Exception as e:
    print(f"传输失败: {str(e)}")
finally:
    ssh.close()

2. HTTP上传(Flask服务端)

在Jetson上搭建一个简易HTTP服务,树莓派通过POST请求上传图片,适合跨网络或需要与其他服务集成的场景。

步骤:

  • Jetson安装Flask:pip install flask
  • 开放Jetson的5000端口:sudo ufw allow 5000

Jetson端服务脚本(server.py):

from flask import Flask, request
import os

app = Flask(__name__)
UPLOAD_DIR = "/home/jetson/Desktop/uploaded_images"
os.makedirs(UPLOAD_DIR, exist_ok=True)

@app.route('/upload', methods=['POST'])
def upload():
    if 'image' not in request.files:
        return "未检测到文件", 400
    file = request.files['image']
    if file.filename == '':
        return "未选择文件", 400
    file.save(os.path.join(UPLOAD_DIR, file.filename))
    return "上传成功", 200

if __name__ == '__main__':
    app.run(host='0.0.0.0', port=5000)

树莓派端上传脚本(client.py):

import requests

LOCAL_IMAGE_PATH = "/home/pi/Desktop/captured_image.jpg"
JETSON_SERVER = "http://192.168.x.x:5000/upload"

try:
    with open(LOCAL_IMAGE_PATH, 'rb') as f:
        response = requests.post(JETSON_SERVER, files={'image': f})
    if response.status_code == 200:
        print("图片上传成功")
    else:
        print(f"上传失败,状态码: {response.status_code}")
except Exception as e:
    print(f"上传出错: {str(e)}")

3. MQTT异步传输(基于paho-mqtt库)

适合需要异步、批量传输或物联网场景,通过消息队列传递图片数据。

步骤:

  • 两台设备都安装依赖:pip install paho-mqtt
  • 若用Jetson作为MQTT Broker,需安装mosquitto:sudo apt install mosquitto mosquitto-clients,并启动服务:sudo systemctl start mosquitto

树莓派端发布脚本:

import paho.mqtt.client as mqtt
import base64

LOCAL_IMAGE_PATH = "/home/pi/Desktop/captured_image.jpg"
MQTT_BROKER = "192.168.x.x"  # Jetson的IP地址
MQTT_TOPIC = "pi/image"

# 读取图片并编码为base64
with open(LOCAL_IMAGE_PATH, 'rb') as f:
    img_data = base64.b64encode(f.read()).decode('utf-8')

# 发布消息
client = mqtt.Client()
client.connect(MQTT_BROKER, 1883, 60)
client.publish(MQTT_TOPIC, img_data)
client.disconnect()
print("图片已发送至MQTT主题")

Jetson端订阅脚本:

import paho.mqtt.client as mqtt
import base64
import os

MQTT_BROKER = "192.168.x.x"
MQTT_TOPIC = "pi/image"
SAVE_PATH = "/home/jetson/Desktop/received_image.jpg"

def on_message(client, userdata, msg):
    # 解码并保存图片
    img_data = base64.b64decode(msg.payload)
    with open(SAVE_PATH, 'wb') as f:
        f.write(img_data)
    print("图片接收并保存完成")

client = mqtt.Client()
client.on_message = on_message
client.connect(MQTT_BROKER, 1883, 60)
client.subscribe(MQTT_TOPIC)
client.loop_forever()

替代应用方案

  • Rsync命令行工具:支持增量同步,适合定时批量传输。树莓派可编写shell脚本,配合crontab定时执行:

    # 示例脚本sync_image.sh
    #!/bin/bash
    rsync -avz /home/pi/Desktop/captured_image.jpg jetson@192.168.x.x:/home/jetson/Desktop/
    

    添加定时任务:执行crontab -e,添加一行* * * * * /home/pi/sync_image.sh(每分钟同步一次)。

  • Syncthing:跨平台文件同步工具,图形界面操作简单。两台设备安装后,创建共享文件夹,新图片会自动同步,无需编写代码。

  • FTP服务器:Jetson端搭建vsftpd服务器,树莓派可通过Python的ftplib库或命令行工具上传图片。Jetson安装命令:sudo apt install vsftpd,配置后即可使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 08:08:31