## Реализация алгоритма 3D-сканирования на встроенном графическом ускорителе системы на кристалле ## Цель работы Разработка алгоритма 3D-сканирования для одноплатного компьютера с ARM Mali GPU ## Задачи * Разработка программного конвейра * Разработка compute шейдера для нахождения контура на изобржение и преобразование его в множество точек * Разработка compute шейдера для поворота контура * Разработка compute шейдера для интерполяции 3D-модели * Бенчмаркинг и определение узких мест в новой версии * Сравнение производительности со старой имплементацией на OpenCV ## Описание алгоритма Алгоритм на вход получает множество изображений с камеры, сделанных под разным углом поворота платформы. Для каждого изображения находится контур, который преобразуется в множество точек. Полученное множество точек записывается в файл, который в конечном содержит облако точек. ![](https://i.imgur.com/2lX3W1n.png) ## Проблемы старой реализации ### Проблема * Низкий параллелизм имплементации. Задача нахожденения контора для каждого кадра независима, что позволяет начинать работу с ним до завершения обработки предыдущего кадра ### Возможное решение * Producer/consumer, где producer содержит очередь кадров. Возможно, что стоит обрабатывать за раз не одно изображение, а сразу тензор ### Проблема * Алгоритм нахождения контура использует OpenCV и не использует GPU. ### Возможное решение * Перенос алгоритма нахождения контура на GPU и доработка для повышения точности ### Проблема * Для маленького угла поворота 3D-модель содержит избыточное количество точек, из-за чего обьем занимаемого диского пространства файлом может достигать неадекватного значения. ### Возможное решение * Добавление этапа пост-обработки для повышения качества модели и уменьшения модели ### Проблема * Для большого угла поворота 3D-модель содержит мало точек, из-за чего модель больше похоже на очертание обьекта ### Возможное решение * Также добавление этапа с интерполяцией в конце ## Схема новой реализации ![](https://i.imgur.com/UYpqPq8.png) ## Mali GPU architecture ![](https://i.imgur.com/mWlydQ3.png) ## Текущие задачи * Разработка compute шейдера для нахождения контура * Разработка compute шейдера для поворота точек ## Будущие задачи * Разработка compute шейдера для интерполяции модели * Обьедение всех шейдеров в один конвейр с максимальной утилизацией * Бенчмаркинг и определение узких мест в новой версии * Дальнейшая оптимизация # Материалы * [Compute Shaders - Vulkan Guide](https://vkguide.dev/docs/gpudriven/compute_shaders/) * [ARM compute shaders](https://developer.arm.com/documentation/100587/0100/compute-shaders/about-compute-shaders) * [ARM Mali GPU Architecture paper](https://armkeil.blob.core.windows.net/developer/Files/pdf/graphics-and-multimedia/Mali_GPU_Architecture.pdf) * [Arm Mali GPUs Best Practices Developer Guide](https://armkeil.blob.core.windows.net/developer/Arm%20Developer%20Community/PDF/Arm%20Mali%20GPU%20Best%20Practices.pdf)