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 timmIn 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