Конвеєр фотограмметрії
Створення 3D-моделей з фотографій за допомогою Reality Capture API.
Огляд робочого процесу
Фотозйомка
Камера/Телефон
Дрон
Сканер
Набір фотографій
20-200+ зображень
Завантаження RAPS
Створення фотосцени
Завантаження фотографій
Обробка RC
Детекція ознак
Хмара точок
Генерація меша
Текстурне накладання
Результати
OBJ-меш
Хмара точок
Ортофото
Підхід CLI
Крок 1: Створення фотосцени
# Create a new photoscene for an object
SCENE=$(raps rc photoscene create --name "Product Scan" --type "object" --output json)
SCENE_ID=$(echo "$SCENE" | jq -r '.id')
echo "Created photoscene: $SCENE_ID"
Крок 2: Завантаження фотографій
# Upload all photos (minimum 20-30 recommended)
for photo in ./product-photos/*.jpg; do
raps rc photoscene upload "$SCENE_ID" "$photo"
echo "Uploaded: $photo"
done
# Or batch upload
raps rc photoscene upload "$SCENE_ID" ./product-photos/*.jpg --batch
Крок 3: Запуск обробки
# Start the reconstruction
raps rc photoscene process "$SCENE_ID"
Крок 4: Моніторинг прогресу
# Check status
raps rc photoscene status "$SCENE_ID"
# Wait for completion
raps rc photoscene status "$SCENE_ID" --wait
# Or poll manually
while true; 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: $PROGRESS%"
[ "$STATUS" = "done" ] && break
[ "$STATUS" = "failed" ] && { echo "Processing failed"; exit 1; }
sleep 30
done
Крок 5: Завантаження результатів
# Download OBJ mesh
raps rc photoscene download "$SCENE_ID" --format obj --output ./output/
# Download point cloud
raps rc photoscene download "$SCENE_ID" --format rcm --output ./output/
# List available outputs
raps rc photoscene download "$SCENE_ID" --list
Конвеєр CI/CD
# .github/workflows/photogrammetry.yml
name: Photogrammetry Processing
on:
workflow_dispatch:
inputs:
photos_path:
description: 'Path to photos folder'
required: true
scene_name:
description: 'Name for the photoscene'
required: true
scene_type:
description: 'Type (object or aerial)'
default: 'object'
jobs:
process-photogrammetry:
runs-on: ubuntu-latest
timeout-minutes: 120
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.scene_name }}" \
--type "${{ inputs.scene_type }}" \
--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: |
PHOTO_COUNT=0
for photo in ${{ inputs.photos_path }}/*.{jpg,jpeg,png}; do
[ -f "$photo" ] || continue
raps rc photoscene upload "$SCENE_ID" "$photo"
PHOTO_COUNT=$((PHOTO_COUNT + 1))
echo "Uploaded: $PHOTO_COUNT - $(basename "$photo")"
done
echo "Total photos: $PHOTO_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"
- name: Wait for completion
env:
APS_CLIENT_ID: ${{ secrets.APS_CLIENT_ID }}
APS_CLIENT_SECRET: ${{ secrets.APS_CLIENT_SECRET }}
run: |
MAX_WAIT=7200 # 2 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: $PROGRESS%"
[ "$STATUS" = "done" ] && break
[ "$STATUS" = "failed" ] && exit 1
sleep 60
ELAPSED=$((ELAPSED + 60))
done
- name: Download results
env:
APS_CLIENT_ID: ${{ secrets.APS_CLIENT_ID }}
APS_CLIENT_SECRET: ${{ secrets.APS_CLIENT_SECRET }}
run: |
mkdir -p ./photogrammetry-output
raps rc photoscene download "$SCENE_ID" --format obj --output ./photogrammetry-output/
raps rc photoscene download "$SCENE_ID" --format rcm --output ./photogrammetry-output/
- name: Upload results
uses: actions/upload-artifact@v4
with:
name: photogrammetry-${{ inputs.scene_name }}
path: ./photogrammetry-output/
Потік конвеєра
Ручний запуск
photos_path + name
→
Налаштування
Створення фотосцени
→
Завантаження
Завантаження фотографій
→
Обробка
Запуск обробки
Очікування завершення
→
Результат
Завантаження OBJ
Завантаження хмари точок
Інтеграція MCP
Створення сканування
User: "Create a 3D model from the photos in the product-shoot folder"
Користувач
AI-асистент
RAPS MCP
Reality Capture
Користувач→AIСтворити 3D-модель з фотографій
AI→MCPaps_rc_photoscene_create(name, type)
MCP→RCСтворення фотосцени
RC←MCPScene ID
AI→AIПошук фотографій у папці
loopAI→MCPaps_rc_photoscene_upload(scene_id, photo)
loopMCP→RCЗавантаження
AI→Користувач45 фотографій завантажено
AI→MCPaps_rc_photoscene_process(scene_id)
MCP→RCЗапуск обробки
loopAI→MCPaps_rc_photoscene_status(scene_id)
loopMCP→RCПеревірка статусу
AI→MCPaps_rc_photoscene_download(scene_id, format=“obj”)
MCP←AIOBJ-файл
AI→Користувач3D-модель готова
Відповідь AI:
Створено 3D-модель з фотографій продукту:
Фотосцена: Product Scan Оброблено фотографій: 45 Час обробки: 12 хвилин
Вихідні файли:
- product_scan.obj (12.4 MB)
- product_scan.mtl
- product_scan_texture.jpg (8.2 MB)
Метрики якості:
- Якість реконструкції: Висока
- Покриття: 98%
- Полігони: 245,000
Готово до завантаження: ./output/product_scan.obj
Перевірка статусу
User: "What's the status of my photogrammetry job?"
Відповідь AI:
Фотосцена: Site Survey 2024-02-15
- Статус: Обробка
- Прогрес: 67%
- Етап: Генерація меша
- Приблизний залишок часу: ~8 хвилин
Фотографії: 124 / 124 оброблено Хмара точок: 2.3 мільйони точок
Найкращі практики
Рекомендації щодо фотозйомки
For Objects:
- 30-100 photos from all angles
- 60-80% overlap between shots
- Consistent lighting
- Plain background
For Sites/Aerial:
- 100-500 photos
- 70%+ overlap
- Nadir (straight down) shots
- Include oblique angles
Налаштування якості
# High quality (slower, more detail)
raps rc photoscene process "$SCENE_ID" --quality high
# Standard quality (balanced)
raps rc photoscene process "$SCENE_ID" --quality medium
# Draft (quick preview)
raps rc photoscene process "$SCENE_ID" --quality draft
Обробка помилок
# Check for failed photos
raps rc photoscene status "$SCENE_ID" --output json | jq '.failedPhotos'
# Retry with adjusted settings
raps rc photoscene cancel "$SCENE_ID"
raps rc photoscene process "$SCENE_ID" --quality medium