Overzicht
simplephotogrammetrygui is een tool die een grafische interface biedt voor een fotogrammetrie-pipeline, waarmee gebruikers afbeeldingen kunnen omzetten in een getextureerd 3D-model (textured.obj).
Gebruik
Het proces is eenvoudig: de gebruiker selecteert een map met afbeeldingen, kiest een outputmap en start het proces. Windows-gebruikers moeten bij de eerste start kiezen tussen een installatie met of zonder CUDA (afhankelijk van de aanwezigheid van een Nvidia GPU).
Installatie en Bouwen
Het project biedt verschillende methoden om de software te bouwen:
- Windows: Gebaseerd op Flutter, waarbij daarnaast gecompileerde zip-bestanden van OpenMVS en diverse Python-scripts (
decimateMesh, resizeImages) en texrecon.exe handmatig toegevoegd moeten worden.
- Linux: Beschikbaar als
.AppImage (via een experimentele Docker-build op Ubuntu 22.04) of via Nix.
- Nix: Biedt specifieke varianten voor CUDA (Nvidia-drivers vereist) en CPU-only gebruik, inclusief ondersteuning voor een development shell via
direnv.
Technologische basis
De applicatie is gebouwd op bestaande tools zoals OpenMVS, Colmap, mvs-texturing, PoissonRecon en Brush.
simplephotogrammetrygui
Gebruik
Linux-gebruikers: Alle afhankelijkheden zijn verpakt in de .AppImage, dus deze stap is niet van toepassing.
Stappenplan:
- Klik op "Select Image Folder" om de map te selecteren die de afbeeldingen bevat.
- Klik vervolgens op "Select Output Folder" om de map te selecteren waar het resultaat moet worden opgeslagen (zorg voor voldoende schijfruimte op de locatie van de outputmap).
- Klik tot slot op "start".
Het uiteindelijke resultaat zal in de outputmap staan met de naam: textured.obj.
Bouwen
Windows
Voer de volgende commando's uit:
git clone https://github.com/edin45/simple_photogrammetry_gui.git
cd simple_photogrammetry_gui
flutter clean
flutter pub get
flutter build windows --release
Plaats vervolgens, naast het bestand simplephotogrammetrygui.exe (in de map build/windows/runner/Release), je gewenste (gecompileerde!) versie van OpenMVS als een zip-bestand genaamd openmvs.zip. Let op: zip de inhoud van de map, niet de map zelf, anders zal het niet werken.
Voeg daarnaast zip-bestanden toe van:
decimateMesh.exe (gecompileerd uit python/decimateMesh.py met het commando: pyinstaller --onefile decimateMesh.py --collect-all pymeshlab)
resizeImages.exe (gecompileerd uit python/resizeImages.py met het commando: pyinstaller --onefile resizeImages.py)
texrecon.exe (te vinden in de map mvs-texturing)
Linux (Ubuntu 22.04 Docker)
Let op: Dit is experimenteel en kan problemen bevatten.
Indien het werkt, zouden alle afhankelijkheden gecompileerd, verzameld en geconfigureerd moeten worden, om alles vervolgens te verpakken in een .AppImage. Dit zou op vrijwel alle Linux-distributies moeten werken, aangezien er een Ubuntu 22.04 Docker-container wordt aangemaakt waarin de compilatie plaatsvindt.
git clone https://github.com/edin45/simple_photogrammetry_gui.git
cd simple_photogrammetry_gui/linux_compilation_scripts_wip
docker build -t simple_photogrammetry_gui_box .
docker run -it -v $(pwd)/..:/workspace/simple_photogrammetry_gui simple_photogrammetry_gui_box /bin/bash
cd /workspace
cp simple_photogrammetry_gui/linux_compilation_scripts_wip/compile_dependecies.sh .
cp simple_photogrammetry_gui/linux_compilation_scripts_wip/build_appimage.sh .
./compile_dependecies.sh
./build_appimage.sh
cp *.AppImage simple_photogrammetry_gui/
Nix
De Nix-build ondersteunt x86-64 Linux en biedt twee varianten. Beide bevatten de command-line programma's die worden gebruikt door de reconstructie-pipeline.
| Variant | Uitvoeren in één commando | Native afhankelijkheden | Systeemvereiste |
| CUDA | nix run .#cuda | CUDA-ondersteunde COLMAP en OpenMVS | Een NVIDIA-driver compatibel met CUDA 12.9 |
| CPU | nix run .#cpu | CPU-only COLMAP en OpenMVS | Geen NVIDIA-driver |
Installeer een actuele versie van Nix en run de variant die past bij de computer. De keuze voor CPU heeft betrekking op de fotogrammetrie-pipeline. Gaussian splatting maakt gebruik van Brush en heeft eigen hardwarevereisten voor de grafische kaart.
Om een resultaatlink te behouden in plaats van de applicatie direct te starten, bouw je een variant en start je de launcher:
nix build .#cuda
./result/bin/simple_photogrammetry_gui
Vervang cuda door cpu voor het CPU-pakket. De standaard nix run en nix build commando's selecteren momenteel standaard CUDA.
Om aan de Flutter-broncode te werken, open je een tijdelijke shell die Flutter en de CUDA-buildbibliotheken bevat. Stel dezelfde applicatiemodus in als die wordt gebruikt door het CUDA-pakket bij het starten van de unwrapped applicatie:
nix develop
SIMPLE_PHOTOGRAMMETRY_GPU_TYPE=cuda flutter run -d linux
Om de development shell automatisch te laden, installeer je direnv, voeg je de hook toe aan je shell, bekijk je .envrc en keur je deze eenmalig goed:
direnv allow
.envrc bevat alleen use flake, waardoor dezelfde vastgepinde tools worden geladen als bij nix develop. Direnv vereist goedkeuring omdat .envrc shell-code is uit de checkout.
Voor uitleg over de Nix-bestanden, dependency pinning, CI-checks en lokale validatie, zie Maintaining the Nix build.
Gebaseerd op
- OpenMVS: https://github.com/cdcseacave/openMVS
- Colmap: https://colmap.github.io/
- mvs-texturing: https://github.com/nmoehrle/mvs-texturing
- PoissonRecon: https://github.com/mkazhdan/PoissonRecon
- Brush: https://github.com/ArthurBrussee/brush
simplephotogrammetrygui
Gebruik
Linux-gebruikers: Alle afhankelijkheden zijn verpakt in de .AppImage, dus deze stap is niet van toepassing.
Stappenplan:
- Klik op "Select Image Folder" om de map te selecteren die de afbeeldingen bevat.
- Klik vervolgens op "Select Output Folder" om de map te selecteren waar het resultaat moet worden opgeslagen (zorg voor voldoende schijfruimte op de locatie van de outputmap).
- Klik tot slot op "start".
Het uiteindelijke resultaat zal in de outputmap staan met de naam: textured.obj.
Bouwen
Windows
Voer de volgende commando's uit:
git clone https://github.com/edin45/simple_photogrammetry_gui.git
cd simple_photogrammetry_gui
flutter clean
flutter pub get
flutter build windows --release
Plaats vervolgens, naast het bestand simplephotogrammetrygui.exe (in de map build/windows/runner/Release), je gewenste (gecompileerde!) versie van OpenMVS als een zip-bestand genaamd openmvs.zip. Let op: zip de inhoud van de map, niet de map zelf, anders zal het niet werken.
Voeg daarnaast zip-bestanden toe van:
decimateMesh.exe (gecompileerd uit python/decimateMesh.py met het commando: pyinstaller --onefile decimateMesh.py --collect-all pymeshlab)
resizeImages.exe (gecompileerd uit python/resizeImages.py met het commando: pyinstaller --onefile resizeImages.py)
texrecon.exe (te vinden in de map mvs-texturing)
Linux (Ubuntu 22.04 Docker)
Let op: Dit is experimenteel en kan problemen bevatten.
Indien het werkt, zouden alle afhankelijkheden gecompileerd, verzameld en geconfigureerd moeten worden, om alles vervolgens te verpakken in een .AppImage. Dit zou op vrijwel alle Linux-distributies moeten werken, aangezien er een Ubuntu 22.04 Docker-container wordt aangemaakt waarin de compilatie plaatsvindt.
git clone https://github.com/edin45/simple_photogrammetry_gui.git
cd simple_photogrammetry_gui/linux_compilation_scripts_wip
docker build -t simple_photogrammetry_gui_box .
docker run -it -v $(pwd)/..:/workspace/simple_photogrammetry_gui simple_photogrammetry_gui_box /bin/bash
cd /workspace
cp simple_photogrammetry_gui/linux_compilation_scripts_wip/compile_dependecies.sh .
cp simple_photogrammetry_gui/linux_compilation_scripts_wip/build_appimage.sh .
./compile_dependecies.sh
./build_appimage.sh
cp *.AppImage simple_photogrammetry_gui/
Nix
De Nix-build ondersteunt x86-64 Linux en biedt twee varianten. Beide bevatten de command-line programma's die worden gebruikt door de reconstructie-pipeline.
| Variant | Uitvoeren in één commando | Native afhankelijkheden | Systeemvereiste |
| CUDA | nix run .#cuda | CUDA-ondersteunde COLMAP en OpenMVS | Een NVIDIA-driver compatibel met CUDA 12.9 |
| CPU | nix run .#cpu | CPU-only COLMAP en OpenMVS | Geen NVIDIA-driver |
Installeer een actuele versie van Nix en run de variant die past bij de computer. De keuze voor CPU heeft betrekking op de fotogrammetrie-pipeline. Gaussian splatting maakt gebruik van Brush en heeft eigen hardwarevereisten voor de grafische kaart.
Om een resultaatlink te behouden in plaats van de applicatie direct te starten, bouw je een variant en start je de launcher:
nix build .#cuda
./result/bin/simple_photogrammetry_gui
Vervang cuda door cpu voor het CPU-pakket. De standaard nix run en nix build commando's selecteren momenteel standaard CUDA.
Om aan de Flutter-broncode te werken, open je een tijdelijke shell die Flutter en de CUDA-buildbibliotheken bevat. Stel dezelfde applicatiemodus in als die wordt gebruikt door het CUDA-pakket bij het starten van de unwrapped applicatie:
nix develop
SIMPLE_PHOTOGRAMMETRY_GPU_TYPE=cuda flutter run -d linux
Om de development shell automatisch te laden, installeer je direnv, voeg je de hook toe aan je shell, bekijk je .envrc en keur je deze eenmalig goed:
direnv allow
.envrc bevat alleen use flake, waardoor dezelfde vastgepinde tools worden geladen als bij nix develop. Direnv vereist goedkeuring omdat .envrc shell-code is uit de checkout.
Voor uitleg over de Nix-bestanden, dependency pinning, CI-checks en lokale validatie, zie Maintaining the Nix build.
Gebaseerd op
- OpenMVS: https://github.com/cdcseacave/openMVS
- Colmap: https://colmap.github.io/
- mvs-texturing: https://github.com/nmoehrle/mvs-texturing
- PoissonRecon: https://github.com/mkazhdan/PoissonRecon
- Brush: https://github.com/ArthurBrussee/brush