AstraScanner2

**Программное обеспечение для 3D сканирования и реконструкции с открытым исходным кодом** [![Windows](https://img.shields.io/badge/OS-Windows-blue.svg)](https://www.microsoft.com/windows) [![Qt6](https://img.shields.io/badge/Framework-Qt6-orange.svg)](https://www.qt.io/) [![License](https://img.shields.io/badge/License-MIT-green.svg)](LICENSE.MD) [Обзор](#обзор) • [Функциональность](#функциональность) • [Сборка](#сборка) • [Использование](#использование) • [Документация](#документация)

Обзор

AstraScanner2 — это приложение с открытым исходным кодом для 3D сканирования и реконструкции с использованием RGB-D камер. Программное обеспечение захватывает облачные точки с камеры Astra Pro (или в режиме эмуляции) и предоставляет инструменты для обработки, фильтрации, реконструкции меша и регистрации множественных сканов.

Основные возможности


Функциональность

GPU-ускорение (CUDA, опционально)

При сборке с -DASTRA_ENABLE_CUDA=ON и наличии NVIDIA GPU (CC 5.0+):

При отсутствии GPU — автоматический fallback на CPU PCL.

📸 3D Сканирование

🔍 Отслеживание на основе маркеров

🧠 Отслеживание с нейронной сетью

🧹 Обработка облачных точек

Фильтр Описание
Воксельная сетка Уменьшение размера с настраиваемым размером ячейки
SOR (Статистический) Удаление статистических выбросов
ROR (Радиусный) Удаление выбросов на основе радиуса
Магическая палочка Комбинация SOR + Воксельная сетка
Удаление фона Сегментация плоскости для удаления поверхности стола
Рост региона Сегментация главного объекта путем кластеризации

🏗️ Реконструкция поверхности

🔗 Регистрация множественных сканов

🎨 Постобработка меша

📂 Управление проектами

📤 Экспорт

Формат Описание
PLY Stanford Polygon (облачные точки и меш-сетки)
PCD Данные облачных точек (формат OpenCV)
STL StereoLithography (3D печать)
OBJ Wavefront OBJ (меш с материалами)

Системные требования

Минимальное оборудование

Поддерживаемая камера


Сборка из исходного кода

Предварительные требования

  1. CMake 3.22 или выше
  2. Visual Studio 2019/2022 с поддержкой C++
  3. vcpkg менеджер пакетов
  4. Python 3.8+ (для генерации маркеров)

Зависимости (через vcpkg)

# Установка зависимостей
vcpkg install cctag pcl vtk opencv4 qtbase --triplet x64-windows

Шаги сборки

  1. Клонировать репозиторий
git clone https://gitverse.ru/klischa/AstraScanner2.git
cd AstraScanner2
  1. Настроить с помощью CMake
cmake -S . -B build `
  -DCMAKE_TOOLCHAIN_FILE=C:/dev/vcpkg/scripts/buildsystems/vcpkg.cmake
  1. Собрать проект
cmake --build build --config Release
  1. Запустить приложение
.\build\Release\AstraScanner.exe

Примечание: репозиторий называется AstraScanner2, а имя исполняемого файла в текущей конфигурации сборки — AstraScanner.exe.

Сборка с поддержкой OpenNI2

Для включения поддержки камеры Astra Pro:

cmake -S . -B build `
  -DCMAKE_TOOLCHAIN_FILE=C:/dev/vcpkg/scripts/buildsystems/vcpkg.cmake `
  -DOPENNI2_ROOT="C:/orbbec/OpenNI_2.3.0.86_202210111950_4c8f5aa4_beta6_windows/Win64-Release/sdk"

cmake --build build --config Release

Автоматические задачи после сборки

Система сборки автоматически копирует:


Руководство по использованию

Первый запуск

  1. Запустить приложение
.\build\Release\AstraScanner.exe
  1. Создать новый проект
    • Файл → Новый проект
    • Выбрать директорию проекта
    • Ввести название проекта
  2. Настроить сканер
    • Настройки → Параметры…
    • Установить диапазон глубины (например, 0.3-1.5 метра)
    • Настроить размер вокселя (0.005 = 5 мм)
    • Установить пропуск кадров для производительности

Рабочий процесс сканирования

Базовое сканирование

  1. Нажмите кнопку “Сканировать” для начала
  2. Двигайте объект или камеру
  3. Нажмите “Стоп” при завершении
  4. Предпросмотр результата в 3D просмотрере

Режим поворотного стола

Для сканирования 360° с вращающимся поворотным столом:

  1. Включите флажок “Поворотный стол”
  2. Установите количество сканов (например, 4 оборота)
  3. Установите интервал между сканами (например, 5 секунд)
  4. Нажмите “Сканировать” и дождитесь завершения

Отслеживание на основе маркеров

  1. Распечатайте маркеры CCTag (см. Руководство по маркерам)
  2. Закрепите маркеры на поворотном столе или объекте
  3. Перейдите в Настройки → Параметры
  4. Установите размер маркера и тип детектора
  5. Используйте режим отслеживания “На основе маркеров”

Рабочий процесс обработки

  1. Применить фильтры (Настройки → Параметры → Фильтры)
  2. Реконструировать меш (вкладка Обработка → Poisson)
  3. Объединить сканы, если существует несколько сканов
  4. Сгладить/упростить меш по мере необходимости
  5. Экспортировать в нужный формат

Рабочий процесс экспорта

  1. Выберите скан из списка проекта
  2. Нажмите кнопку “Экспорт”
  3. Выберите формат (PLY/STL/OBJ/PCD)
  4. Сохраните в нужное местоположение


Настройка камеры

Конфигурация Astra Pro

  1. Установить OpenNI2 SDK
    • Скачать с сайта Orbbec
    • Установить с поддержкой драйвера
  2. Настроить OpenNI2 в CMake
    -DOPENNI2_ROOT="C:/orbbec/OpenNI_2.3.0.86_202210111950_4c8f5aa4_beta6_windows/Win64-Release/sdk"
    
  3. Проверить камеру
    • Приложение должно обнаружить Astra Pro
    • Зеленый индикатор статуса = камера активна
    • Если активируется режим эмуляции, проверьте установку драйвера

Режим эмуляции

Если камера не подключена, приложение автоматически переходит в режим эмуляции и генерирует синтетические тестовые кадры.


Руководство по маркерам (CCTag)

Что такое маркеры CCTag?

Маркеры CCTag (Circular Code Tag) - это круговые сигнальные маркеры с уникальными ID. Они обеспечивают:

Генерация маркеров

Предварительные требования

pip install svgwrite

Генерация сетки маркеров (A4)

# Маркеры с 3 кольцами (ID 0-29, 2 на ID)
cd markers
python generate_markers_grid.py --rings 3 --addId --generatePdf --generatePng

# Маркеры с 4 кольцами (ID 0-29, 2 на ID)
python generate_markers_grid.py --rings 4 --addId --generatePdf --generatePng

Генерация индивидуальных маркеров

# 100 маркеров с 3 кольцами
python generate.py --rings 3 --num 100 --outdir markers3 --margin 100 --addId

# 100 маркеров с 4 кольцами
python generate.py --rings 4 --num 100 --outdir markers4 --margin 100 --addId

Характеристики маркеров

Параметр 3-Кольцевой 4-Кольцевой
Сектора 24 32
Максимальный ID 16,777,215 4,294,967,295
Рекомендуемый размер 60-100 мм 60-100 мм
Рекомендуемое расстояние 0.5-3 м 0.5-5 м

Рекомендации по печати

  1. Используйте матовую бумагу для снижения отражений
  2. Высокое разрешение (минимум 300 DPI)
  3. Проверьте размер перед резкой
  4. Закрепите на неразъемной поверхности

Использование маркеров в приложении

  1. Настроить параметры маркеров (Настройки → Параметры)
    • Размер маркера (например, диаметр 300 мм)
    • Тип детектора: CCTag
    • Количество колец: 3 или 4
    • Минимальная вероятность идентификации: 1e-6
  2. Разместите маркеры на объекте или поворотном столе
  3. Начните сканирование - маркеры будут автоматически обнаружены
  4. Используйте отслеживание на основе маркеров для стабильной оценки позы

Файлы конфигурации маркеров

Приложение читает именно файл из data/. Если вы меняете параметры диска или детекции, редактируйте этот файл.



Устранение неполадок

Приложение не запускается

Проблема: Отсутствуют DLL-файлы или папка platforms

Решение:

  1. Пересобрать проект
  2. Проверить, что build/Release/ содержит:
    • папку platforms/
    • файл onnxruntime.dll
    • все DLL-файлы vcpkg

Камера не обнаружена

Проблема: Активируется режим эмуляции вместо Astra Pro

Решения:

  1. Проверить установку OpenNI2 SDK
  2. Проверить путь OpenNI2 в конфигурации CMake
  3. Убедиться, что драйверы Orbbec установлены
  4. Проверить диспетчер устройств на наличие Astra Pro

Маркеры не обнаружены

Проблема: Детектор CCTag не находит маркеры

Решения:

  1. Увеличить размер маркера (минимум 30 пикселей радиус)
  2. Улучшить освещение
  3. Использовать 4-кольцевые маркеры для лучшей надежности
  4. Уменьшить расстояние до камеры
  5. Проверить качество печати маркеров

Плохое качество сканирования

Проблема: Зашумленное или редкое облачное облако

Решения:

  1. Уменьшить размер вокселя (например, 0.003 = 3 мм)
  2. Настроить диапазон глубины ближе к объекту
  3. Уменьшить пропуск кадров для большего количества кадров
  4. Применить фильтры SOR/ROR после захвата
  5. Убедиться в хорошем освещении объекта

Низкая производительность

Проблема: Низкий FPS или высокое использование CPU

Решения:

  1. Увеличить пропуск кадров (например, 5-10)
  2. Увеличить размер листа вокселя
  3. Отключить цветную камеру, если не требуется
  4. Использовать GPU для ONNX, если доступно
  5. Закрыть другие приложения


Документация

Дополнительные ресурсы

Структура проекта

Файлы вида *REPORT.md и исторические .yaml-артефакты являются служебными/историческими материалами и не считаются основным источником актуальной документации по сборке и использованию.

AstraScanner2/
├── CMakeLists.txt
├── README.md
├── README-DEV.md
├── TESTS.md
├── MARKERS.md
├── KNOWN_LIMITATIONS.md
├── data/
├── models/
├── src/
│   ├── main.cpp
│   ├── gui/
│   ├── controllers/
│   ├── capture/
│   ├── calibration/
│   ├── filters/
│   ├── services/
│   ├── marker_tracker/
│   ├── tracking/
│   ├── project/
│   ├── export/
│   ├── settings/
│   └── models/
├── tests/
├── aiservice/
├── deploy/
└── markers/

Начиная с текущей архитектуры проект разделён на три уровня:

Ключевые классы

Класс Назначение
MainWindow Тонкий UI-shell: связывает вкладки, контроллеры и состояние интерфейса
ProjectUiController Диалоги и пользовательские сценарии проекта/экспорта
CaptureSessionController Жизненный цикл захвата: thread, worker, сигналы, запуск/остановка
ProcessingController Асинхронный orchestration обработки, реконструкции и merge-операций
ViewerCoordinator Координация main/proc viewer и переключение cloud/mesh display
TurntableController Flow логики режима поворотного стола
AstraCamera Драйвер камеры (OpenNI2 + эмуляция)
CaptureWorker Фоновый pipeline захвата и трекинга
PointCloudFilters Совместимый facade над сервисами обработки
CloudFiltersService Очистка и постобработка облаков точек
RegistrationService ICP-регистрация и merge сканов
ReconstructionService Poisson-реконструкция поверхности
MeshProcessingService Сглаживание, упрощение и заполнение дыр в меше
ProjectManager Постоянство проекта и сериализация метаданных
ExportManager Экспорт облаков и мешей в файлы
MarkerTracker Управление детекторами маркеров
NeuralTracker Оценка позы ИИ через ONNX Runtime
SettingsManager Централизованное хранилище настроек приложения


Разработка

Запуск тестов

# Настройка тестов
cmake -S . -B build_test `
  -DCMAKE_TOOLCHAIN_FILE=C:/dev/vcpkg/scripts/buildsystems/vcpkg.cmake `
  -DAstraScanner_BUILD_TESTS=ON

# Сборка тестов
cmake --build build_test --config Release

# Запуск всех тестов
ctest -C Release -V

Добавление новых функций

  1. Создать ветку функции
  2. Реализовать в соответствующей поддиректории src/
  3. Добавить юнит-тесты в tests/
  4. Обновить документацию
  5. Отправить pull request

Стиль кода



Лицензия

MIT Лицензия - см. LICENSE.MD для подробной информации.



Благодарности

Зависимости

Авторы



Список изменений

v1.1.0 (Текущая версия)

v1.0.0


**Приятного сканирования! 🚀** [Репозиторий](https://gitverse.ru/klischa/AstraScanner2) • [Лицензия](/LICENSE.MD)