如何用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
相关产品推荐
相关产品推荐

