Jetson에서 영상 녹화 후, 메인 서버(WSL2)로 자동 전송하여 학습/저장에 활용
scp 업로드 자동화[Jetson (ARM)] ── Tailscale VPN ──> [WSL2 Ubuntu (x86_64)]
🎥 녹화 📥 SSH로 파일 수신
📤 scp 업로드
sudo apt update
sudo apt install python3-opencv openssh-client
curl -fsSL https://tailscale.com/install.sh | sh
sudo tailscaled
sudo tailscale up
sudo apt update
sudo apt install openssh-server
sudo service ssh start
curl -fsSL https://tailscale.com/install.sh | sh
sudo tailscaled
sudo tailscale up
🔸 Tailscale IP 확인:
tailscale ip -4
ssh-keygen -m PEM -t rsa -b 3072
/home/hi/.ssh/id_rsassh-copy-id hi@<WSL2_TAILSCALE_IP>
또는 수동:
cat ~/.ssh/id_rsa.pub
# 복사해서 WSL2의 ~/.ssh/authorized_keys 에 붙여넣기
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
upload_video.py#!/usr/bin/env python3
import cv2, time, subprocess
from datetime import datetime
from pathlib import Path
def record_video(duration_sec=10, width=640, height=480, fps=20, dev='/dev/video4'):
cap = cv2.VideoCapture(dev)
if not cap.isOpened():
raise RuntimeError(f"Camera {dev} not accessible")
cap.set(cv2.CAP_PROP_FRAME_WIDTH, width)
cap.set(cv2.CAP_PROP_FRAME_HEIGHT, height)
filename = datetime.now().strftime("vid_%Y%m%d_%H%M%S.mp4")
out = cv2.VideoWriter(filename, cv2.VideoWriter_fourcc(*'mp4v'), fps, (width, height))
start = time.time()
while time.time() - start < duration_sec:
ret, frame = cap.read()
if ret: out.write(frame)
cap.release(); out.release()
return Path(filename)
def upload_to_server(file_path, user="hi", server_ip="100.79.185.26", remote_dir="/home/hi/container_train_videos"):
try:
cmd = ["scp", "-i", "/home/hi/.ssh/id_rsa", str(file_path), f"{user}@{server_ip}:{remote_dir}"]
result = subprocess.run(cmd, check=True)
print(f"✅ SCP upload success: {file_path.name}")
except subprocess.CalledProcessError as e:
print(f"❌ SCP upload failed with return code {e.returncode}")
if __name__ == "__main__":
try:
video_path = record_video()
upload_to_server(video_path)
video_path.unlink(missing_ok=True) # 업로드 후 파일 삭제 (선택)
except Exception as e:
print(f"❌ Error: {e}")
🎥 녹화된 영상은
vid_2025XXXX_XXXXXX.mp4형식으로 저장 후 업로드됩니다.
Jetson에서 다음으로 실행:
python3 upload_video.py
✅ SCP upload success: vid_20250513_102233.mp4
WSL2 서버의 /home/hi/container_train_videos/ 디렉토리에 영상이 저장됨
systemd or cron을 이용한 정기 실행watchdog or ROS 노드로 통합하여 센서/이벤트 기반 자동 녹화| 항목 | 내용 |
|---|---|
| 통신 방식 | SSH over Tailscale |
| 인증 방식 | RSA 키 기반 (PEM 형식) |
| Python 라이브러리 | cv2, subprocess, datetime, pathlib |