Site Capture Workflow
Process drone photos and site photography into 3D environments.
Workflow Overview
Site Capture
Drone Photos
Ground Photos
360 Photos
RAPS Upload
Create Photoscene
Upload Images
RC Processing
Aerial Mode
Point Cloud Generation
Mesh Reconstruction
Outputs
Orthophoto
3D Mesh
Point Cloud
DSM/DTM
CLI Approach
Step 1: Create Aerial Photoscene
# Create site capture photoscene
SCENE=$(raps rc photoscene create \
--name "Site Survey $(date +%Y-%m-%d)" \
--type "aerial" \
--output json)
SCENE_ID=$(echo "$SCENE" | jq -r '.id')
echo "Created photoscene: $SCENE_ID"
Step 2: Upload Drone Photos
# Batch upload drone photos
find ./drone-photos -name "*.jpg" | while read photo; do
raps rc photoscene upload "$SCENE_ID" "$photo"
echo "Uploaded: $(basename "$photo")"
done
# Or with parallel upload
find ./drone-photos -name "*.jpg" -print0 | \
xargs -0 -P 4 -I {} raps rc photoscene upload "$SCENE_ID" {}
Step 3: Process with Aerial Settings
# Start processing with high quality
raps rc photoscene process "$SCENE_ID" --quality high
# For large sites, use draft first
# raps rc photoscene process "$SCENE_ID" --quality draft
Step 4: Monitor Progress
while true; do
RESPONSE=$(raps rc photoscene status "$SCENE_ID" --output json)
STATUS=$(echo "$RESPONSE" | jq -r '.status')
PROGRESS=$(echo "$RESPONSE" | jq -r '.progress // 0')
echo "Status: $STATUS - Progress: $PROGRESS%"
[ "$STATUS" = "done" ] && break
[ "$STATUS" = "failed" ] && { echo "Processing failed"; exit 1; }
sleep 60
done
Step 5: Download All Outputs
mkdir -p ./site-output
# Download orthophoto
raps rc photoscene download "$SCENE_ID" --format ortho --output ./site-output/
# Download 3D mesh
raps rc photoscene download "$SCENE_ID" --format obj --output ./site-output/
# Download point cloud
raps rc photoscene download "$SCENE_ID" --format rcm --output ./site-output/
# List all available formats
raps rc photoscene download "$SCENE_ID" --list
CI/CD Pipeline
# .github/workflows/site-capture.yml
name: Site Capture Processing
on:
workflow_dispatch:
inputs:
site_name:
description: 'Site name for the survey'
required: true
photos_path:
description: 'Path to drone photos'
required: true
quality:
description: 'Processing quality'
default: 'high'
type: choice
options:
- draft
- medium
- high
jobs:
process-site:
runs-on: ubuntu-latest
timeout-minutes: 180
steps:
- uses: actions/checkout@v4
- name: Install RAPS
run: cargo install raps
- name: Create photoscene
env:
APS_CLIENT_ID: ${{ secrets.APS_CLIENT_ID }}
APS_CLIENT_SECRET: ${{ secrets.APS_CLIENT_SECRET }}
run: |
SCENE=$(raps rc photoscene create \
--name "${{ inputs.site_name }}" \
--type "aerial" \
--output json)
SCENE_ID=$(echo "$SCENE" | jq -r '.id')
echo "SCENE_ID=$SCENE_ID" >> $GITHUB_ENV
- name: Upload photos
env:
APS_CLIENT_ID: ${{ secrets.APS_CLIENT_ID }}
APS_CLIENT_SECRET: ${{ secrets.APS_CLIENT_SECRET }}
run: |
COUNT=0
for photo in ${{ inputs.photos_path }}/*.{jpg,jpeg,JPG,JPEG}; do
[ -f "$photo" ] || continue
raps rc photoscene upload "$SCENE_ID" "$photo"
COUNT=$((COUNT + 1))
echo "Uploaded: $COUNT"
done
echo "Total photos: $COUNT"
- name: Process photoscene
env:
APS_CLIENT_ID: ${{ secrets.APS_CLIENT_ID }}
APS_CLIENT_SECRET: ${{ secrets.APS_CLIENT_SECRET }}
run: |
raps rc photoscene process "$SCENE_ID" --quality ${{ inputs.quality }}
- name: Wait for completion
env:
APS_CLIENT_ID: ${{ secrets.APS_CLIENT_ID }}
APS_CLIENT_SECRET: ${{ secrets.APS_CLIENT_SECRET }}
run: |
MAX_WAIT=10800 # 3 hours
ELAPSED=0
while [ $ELAPSED -lt $MAX_WAIT ]; do
STATUS=$(raps rc photoscene status "$SCENE_ID" --output json | jq -r '.status')
PROGRESS=$(raps rc photoscene status "$SCENE_ID" --output json | jq -r '.progress // 0')
echo "Status: $STATUS ($PROGRESS%)"
[ "$STATUS" = "done" ] && break
[ "$STATUS" = "failed" ] && exit 1
sleep 120
ELAPSED=$((ELAPSED + 120))
done
- name: Download results
env:
APS_CLIENT_ID: ${{ secrets.APS_CLIENT_ID }}
APS_CLIENT_SECRET: ${{ secrets.APS_CLIENT_SECRET }}
run: |
mkdir -p ./site-capture-output
# Download all formats
raps rc photoscene download "$SCENE_ID" --format ortho --output ./site-capture-output/
raps rc photoscene download "$SCENE_ID" --format obj --output ./site-capture-output/
raps rc photoscene download "$SCENE_ID" --format rcm --output ./site-capture-output/
- name: Upload results
uses: actions/upload-artifact@v4
with:
name: site-capture-${{ inputs.site_name }}
path: ./site-capture-output/
Pipeline Flow
Manual Trigger
site_name + photos_path
→
Setup
Create Aerial Photoscene
→
Upload
Upload Drone Photos
→
Processing
Start RC Processing
Wait for Completion
→
Download
Orthophoto
3D Mesh
Point Cloud
MCP Integration
Process Site Survey
User: "Process the drone photos from today's site survey"
User
AI Assistant
RAPS MCP
Reality Capture
User→AIProcess drone photos
AI→MCPaps_rc_photoscene_create(name, type=“aerial”)
MCP→RCCreate photoscene
RC←MCPScene ID
AI→AIFind drone photos
loopAI→MCPaps_rc_photoscene_upload(scene_id, photo)
loopMCP→RCUpload
AI→User245 photos uploaded
AI→MCPaps_rc_photoscene_process(scene_id, quality=“high”)
MCP→RCStart processing
AI→UserProcessing started (est. 45 min)
AI Response:
Processing site survey from drone photos:
Photoscene: Site Survey 2024-02-15 Photos: 245 uploaded Coverage area: ~2.5 acres Quality: High
Status: Processing Progress: 23% Estimated time: 35 minutes remaining
I’ll notify you when it’s complete.
Check Results
User: "Is the site capture done? What outputs do we have?"
AI Response:
Site Survey 2024-02-15 processing complete!
Generated Outputs:
Output Format Size Resolution Orthophoto GeoTIFF 156 MB 2.5 cm/px 3D Mesh OBJ 89 MB 1.2M polygons Point Cloud RCM 234 MB 4.5M points Quality Metrics:
- Photo alignment: 243/245 (99%)
- Coverage: 100%
- Reconstruction quality: Excellent
Ready to download. Where would you like to save the files?
Best Practices
Drone Flight Planning
For best results:
- 70-80% front overlap
- 60-70% side overlap
- Consistent altitude (100-400 ft typical)
- Include oblique shots around edges
- Fly on overcast days (consistent lighting)
Photo Requirements
# Minimum recommended:
# - 50+ photos for small sites
# - 100-300 for medium sites
# - 300+ for large sites
# Check photo count before processing
PHOTO_COUNT=$(find ./drone-photos -name "*.jpg" | wc -l)
echo "Photo count: $PHOTO_COUNT"
if [ "$PHOTO_COUNT" -lt 50 ]; then
echo "Warning: Low photo count may affect quality"
fi
Quality vs Speed Trade-off
# Draft: Quick preview (10-15 min)
raps rc photoscene process "$SCENE_ID" --quality draft
# Medium: Balanced (30-45 min)
raps rc photoscene process "$SCENE_ID" --quality medium
# High: Best quality (60+ min)
raps rc photoscene process "$SCENE_ID" --quality high