Skip to content

nexus-4/transitoPrototype

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

8 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Reconstrução 3D com COLMAP

Ferramenta simples em Streamlit para gerar reconstrução 3D esparsa (nuvem de pontos inicial) a partir de um conjunto de fotos usando COLMAP.

Atualmente o pipeline implementado gera apenas o modelo esparso (estrutura inicial). Você pode opcionalmente ativar a reconstrução densa, gerar um PLY mais completo e converter para Potree para visualização web, caso seu ambiente suporte (CUDA/NVIDIA recomendado para performance).


📂 Estrutura do Projeto

app.py                  # Interface Streamlit
processing/pipeline.py  # Pipeline COLMAP (reconstrução esparsa; blocos para densa comentados)
requirements.txt        # Dependências Python (apenas Streamlit)

✅ Funcionalidades Atuais

  • Upload de múltiplas imagens (JPG/PNG)
  • Execução do pipeline COLMAP (feature extraction, matching, mapper)
  • Conversão do modelo esparso para sparse_model.ply
  • Download do resultado diretamente pela interface

🧩 Dependências

Python

Instale via pip:

pip install -r requirements.txt

Somente streamlit é necessário no momento.

Externas (não via pip)

Ferramenta Uso Instalação (Exemplo)
COLMAP Reconstrução 3D macOS: brew install colmap / Ubuntu: sudo apt install colmap (ou build com CUDA)
CUDA (opcional) Aceleração em GPU Nvidia Instalar toolkit + driver (somente Linux/Windows)
PotreeConverter (opcional) Converter nuvem de pontos para visualização web Build a partir do repositório oficial

macOS (Apple Silicon) não suporta CUDA oficialmente; a execução será em CPU.


🚀 Execução

Após instalar o COLMAP e as dependências Python:

streamlit run app.py

Abra o link local exibido no terminal (geralmente http://localhost:8501).


🔧 Ativando Reconstrução Densa (Passo a Passo)

O arquivo processing/pipeline.py contém blocos comentados para a reconstrução densa. Para habilitar:

  1. Procure pelas linhas comentadas envolvendo dense_dir, image_undistorter e patch_match_stereo.
  2. Remova o bloco de string multi-linha que envolve essas chamadas. No código há um bloco iniciado próximo de:
    ''''
        print("4. Desentortando as imagens para a reconstrucao densa...")
        subprocess.run([
            "colmap", "image_undistorter",
            "--image_path", image_dir,
            "--input_path", os.path.join(sparse_dir, "0"),
            # "--output_path", dense_dir,
            "--output_type", "COLMAP",
        ], check=True)
    
        print("5. Reconstrucao densa (patch_match_stereo)...")
        subprocess.run([
            "colmap", "patch_match_stereo",
            # "--workspace_path", dense_dir,
        ], check=True)
    '''
  3. Substitua/edite para algo funcional como:
    dense_dir = os.path.join(workspace_dir, "dense")
    os.makedirs(dense_dir, exist_ok=True)
    
    print("4. Desentortando as imagens para a reconstrucao densa...")
    subprocess.run([
        "colmap", "image_undistorter",
        "--image_path", image_dir,
        "--input_path", os.path.join(sparse_dir, "0"),
        "--output_path", dense_dir,
        "--output_type", "COLMAP",
    ], check=True)
    
    print("5. Reconstrucao densa (patch_match_stereo)...")
    subprocess.run([
        "colmap", "patch_match_stereo",
        "--workspace_path", dense_dir,
    ], check=True)
    
    print("6. Fusionando profundidades em nuvem de pontos densa...")
    dense_ply = os.path.join(workspace_dir, "dense_fused.ply")
    subprocess.run([
        "colmap", "stereo_fusion",
        "--workspace_path", dense_dir,
        "--input_type", "geometric",
        "--output_path", dense_ply,
    ], check=True)
  4. Depois, você pode disponibilizar também dense_fused.ply para download da mesma forma que sparse_model.ply.

🌐 Conversão para Potree (Visualização Web)

Depois de gerar dense_fused.ply (ideal, mas pode ser usado o esparso):

  1. Instale/compile o PotreeConverter (ex.: https://github.com/potree/PotreeConverter).
  2. Execute:
    PotreeConverter /caminho/para/dense_fused.ply -o /caminho/para/potree_out --generate-page cena3d
  3. Abra o arquivo potree_out/cena3d.html no navegador.

Se quiser automatizar, adicione no final do pipeline (exemplo simplificado):

subprocess.run([
    "PotreeConverter", dense_ply,
    "-o", os.path.join(workspace_dir, "potree"),
    "--generate-page", "modelo_denso"
], check=True)

Certifique-se de que PotreeConverter esteja no PATH.


⚙️ CUDA (Opcional)

Para grande volume de imagens, CUDA acelera etapas de matching e reconstrução.

  • Verifique se sua build do COLMAP tem suporte:
    colmap -h | grep CUDA || echo "Provavelmente sem suporte CUDA"
  • Se não tiver, compile manualmente (Ubuntu exemplo):
    sudo apt-get install git cmake build-essential libboost-all-dev \ 
         libglew-dev qtbase5-dev libeigen3-dev freeglut3-dev libsuitesparse-dev \ 
         libcgal-dev libceres-dev libfreeimage-dev libgoogle-glog-dev libgflags-dev \ 
         libsqlite3-dev libmetis-dev
    git clone https://github.com/colmap/colmap.git
    cd colmap
    mkdir build && cd build
    cmake .. -D CUDA_ENABLED=ON
    make -j$(nproc)
    sudo make install

Em macOS com Apple Silicon: execução será CPU-only; considere reduzir número de imagens.


🧪 Dicas de Qualidade das Imagens

  • Use fotos com sobreposição de 60–80%
  • Varie ângulos e alturas
  • Evite borrões e compressão excessiva
  • Luz uniforme ajuda o detector de features

🛠 Possíveis Próximos Passos

  • Visualização 3D direta no Streamlit (e.g. pydeck ou trimesh + st.components)
  • Cache de resultados para não reprocessar o mesmo conjunto
  • Suporte a vídeos (extraindo frames)
  • Relatório automático com métricas (número de imagens, pontos, etc.)

❗ Troubleshooting

Problema Causa comum Solução
colmap: command not found COLMAP não instalado / PATH Reinstale ou adicione ao PATH
Reconstrução vazia Pouca sobreposição / imagens ruins Recoletar melhor dataset
Processo muito lento CPU-only + muitas imagens Ativar CUDA ou reduzir imagens
patch_match_stereo falha Diretórios incorretos Confirmar --workspace_path e saída do undistorter

📝 Licença

Defina aqui a licença (por exemplo MIT). (Adapte conforme necessário.)


🤝 Contribuições

Pull requests e sugestões são bem-vindos.

About

Reconstruction 3D image with colmap

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages