Ця сторінка ще не перекладена українською. Показано англійську версію. Переглянути англійською

Конвеєр фотограмметрії

Створення 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

Пов’язане