Visualizzazione post con etichetta ODM. Mostra tutti i post
Visualizzazione post con etichetta ODM. Mostra tutti i post

venerdì 26 luglio 2024

ODMNode

 Un metodo per automatizzare ODM e' quello di utilizzare NodeODM

 


 In estrema sintesi si mette in esecuzione su un server il docker con la seguente sintassi

 

 docker run -p 3000:3000 opendronemap/nodeodm

 In seguito da un client si puo' usare il seguente script Python per effettuare l'upload automatico di tutte le immagini in un folder e per impostare i parametri di lavoro. Al termine del task sul server i dati saranno reinviati in automatico al client

 

import os
import sys
sys.path.append('..')
from pprint import pprint

from pyodm import Node, exceptions

node = Node("192.168.1.125", 3000)

files = []
for dirname, dirnames, filenames in os.walk('./images/'):
for subdirname in dirnames:
files.append(os.path.join(dirname, subdirname))
for filename in filenames:
files.append(os.path.join(dirname, filename))

pprint(files)
try:
# Start a task
print("Uploading images...")
task = node.create_task(files,{'dsm': True, 'orthophoto-resolution': 4})
print(task.info())


try:
# This will block until the task is finished
# or will raise an exception
task.wait_for_completion()

print("Task completed, downloading results...")

# Retrieve results
task.download_assets("./results")

print("Assets saved in ./results (%s)" % os.listdir("./results"))

# Restart task and this time compute dtm
task.restart({'dtm': True})
task.wait_for_completion()

print("Task completed, downloading results...")

task.download_assets("./results_with_dtm")

print("Assets saved in ./results_with_dtm (%s)" % os.listdir("./results_with_dtm"))
except exceptions.TaskFailedError as e:
print("\n".join(task.output()))

except exceptions.NodeConnectionError as e:
print("Cannot connect: %s" % e)
except exceptions.NodeResponseError as e:
print("Error: %s" % e)


 

domenica 10 marzo 2024

ODM ed FFMPEG

E' possibile utilizzare ffmpeg per estrarre fotogrammi (a cadenza a scelta dell'utente) da un filmato MP4 per fornirli in pasto ad ODM. Dalle prove che ho fatto e' un sostituto idoneo a scattare una serie di foto 



il seguente comando estrae un fotogramma al secondo (parametro dopo t-prev_selected_t) e li salva nel folder /frames

ffmpeg -i 20240229_094358.mp4 -vf "select=bitor(gte(t-prev_selected_t\,1)\,isnan(prev_selected_t))" -vsync 0 ./frames/f%09d.jpg

sabato 24 febbraio 2024

ODM

 Ho provato a vedere se ODM poteva essere idoneo per misurare l'altezza di un cumulo (o di una collinetta) usando fotogrammetria da terra con la camera del telefono cellulare

In un sito di prova e' stato verificato un errore inferiore a 30 cm su 5 m di altezza







Metashape vs ODM

Aggiornamento

Modificando il parametro da Volume Analysis a Model 3D, ODM ha un risultato comparabile con Metashape





Sto provando a fare fotogrammetria da terra tramite ODM e WEBODM  confrontando con Metashaoe

Per riferimento ho preso una piccola collina ad anfiteatro con 208 immagini riprese muovendosi attorno alla collina. ODM non riesce a capire che si tratta dello stesso oggetto e crea dei piani ognuno relativo al lato del perimetro su cui sono state fatte le foto, Metashape invece riesce a collegare i transetti ortogonali del lati dell'area e ricrea un unico oggetto geometricamente corretto

Un altro aspetto non trascurabile e' il tempo di calcolo: con parametri di default e con lo stesso numero di immagini Metashape su M1 ha impiegato meno di 15 minuti per terminare il calcolo, ODM su docker x86 ha impiegato oltre un'ora

Oggetto di riferimento

Se invece si fa un solo transetto come qui ODM risulta corretto anche dal punto di vista delle dimensioni stimate

Mesh creata con Metashape


Mesh creata con ODM


PointCloud da Metashape


PointCloud da ODM




Debugger integrato ESP32S3

Aggiornamento In realta' il Jtag USB funziona anche sui moduli cinesi Il problema risiede  nell'ID USB della porta Jtag. Nel modulo...