martedì 21 dicembre 2021

Mappa di profondita' da immagini monoculari

Fino a poco tempo fa per estrarre dati tridimensionali da una immagine fotografica era possibile utilizzare solo immagine stereoscopiche..successivamente e' stato possibile ottenere mappe di profondita' con i laser a luce strutturata ... in ogni caso era necessario utilizzare attrezzatura specifica

Leggendo gli esempi di Keras  ho trovato questo esempio Monocular Depth Estimation che permette da una normale immagine di stimare la profondita' degli oggetti ripresi utilizzando una rete neurale CNN

Immagine originale


Mappa di profondita' generata da Midas (midas_v21)


Mappa di profondita' generata da Midas (complete)


Nonostante diverse prove su Colab il notebook entrava in errore (ho avuto solo un successo) con valori di Nan in loss e val_loss e pensavo di abbandonare quando ho trovato MiDaS

Per prima cosa si deve impostare un Conda Env  (conda activate env_pytorch) con 

conda install pytorch torchvision opencv 
pip install timm

In seguito si copiano di file dei modelli Large e Hybrid nella directory weights (i modelli midas_v21 e midas_v21_small vengnono scaricati in modo automatico)

Si inseriscono poi nella dir input le immagini da processare ed i risultati si troveranno nella dir outpu

Su Apple M1 tutto ha funzionato. Su Ubuntu LTS 18.04 hanno funzionato solo i modello midas_v21

Ho provato ad usare anche il docker senza fortuna

La cosa interessante non e' il PNG che viene generato ma il file .PFM all'interno del quale si trovano in formato binario i valori di distanza in formato float32 (nel PNG ci sono solo 255 classi). Avendo un punto di verita'nell'immagine tali valori possono essere riscalati per ottenere delle distanze metriche

Per leggere il file PFM si puo' utilizzare la funzione read_pfm contenuta nel file utils.py 

======================================================

import utils
(data,scale) = utils.read_pfm('luca.pfm')
print(data)
print(scale)

Sono presenti anche le dir per mobile Android/IOS e Tensorflow ma al momento non sono riuscito a compilarle

Per alcuni test rapidi si puo' utilizzare il notebook python

Nessun commento:

Posta un commento

Dockerizza Flask

Un esempio semplice per inserire in un container Docker una applicazione Flask Partiamo da una semplice applicazione che ha un file app.py ...