mercoledì 11 marzo 2026

Campionamento rifiuti in spiaggia

Un tentativo di quantificare rifiuti su una spiaggia toscana 

L'idea e'

1) fotografare

2) incollare le immagini (possibilmente georiferite)

3) tagliare in quadrati di 1mx1m

4) istruire una rete neurale con Yolo 8 su un sottoinsieme dei quadrati al punto 3 

 

Le immagini di partenza sono di questo tipo (si avrei dovuto portarmi uno stick per non fotografarmi di continuo i piedi), in sequenza scattate in automatico ogni secondo 


 

Il primo dataset sono immagini da drone 

Le immagini sono state incollate (stitching) con WebOdm 

Come si legge il GCD e' di 0.92..io voglio tagliare il geotiff in quadrati di 1x1 tramite GDAL...per ottenere il valore del parametro ps calcolo 100 cm /0.92 cm (GCD) ed ottendo 109 (non vengono accettati valori float)

gdal_retile.py -ps 109 109 -targetDir ./ritagli_drone/ ortophoto_drone.tif  

Usando invece foto fatte a mano dal cellulare (quindi altezza indicativa di 140 cm) si ha un GCD di  0.12

 


gdal_retile.py -ps 833 833 -targetDir ./ritagli_samsung/ ortophoto_samsung.tif

una volta effettuato il taglio si hanno immagini di questo tipo (la distorsione e' derivante dall'algoritmo di ODM)

 

che devono essere classificate per istruire la rete neurale
 

Di solito uso labelImg ma ho visto che nella versione nuova di Debian crasha a causa delle Qt6...intanto trasformiamo i tiff in jpg perche' labelimg non supporta tiff

 

 mogrify -format jpg -quality 90 -colorspace sRGB -flatten *.tif

 e poi lanciamo questo docker container per non impazzire con l'installazione

docker run -ti --rm -e DISPLAY=$DISPLAY --device=/dev/video0:/dev/video0  -v /tmp/.X11-unix:/tmp/.X11-unix   -v /home/luca/:/home/luca -w /home/luca         ludwigprager/labelimg:1
 

dopo aver definito le classi e gli oggetti all'interno delle immagini si passa ad addestrare il modello facendo un retrain di Yolo

i dati sono nel folder /home/luca/images/1, al di sotto ci sono i folders ./train/images,./train/labels,./val/images,./val/labels


 

il file data.yaml deve essere in /home/luca/images/1

-------------------- 

train: /ultralytics/my_data/train/images
val: /ultralytics/my_data/val/images

nc: 3
names: ['waste', 'alga', 'wood']

-------------------- 

 ancora la cosa piu' semplice e' un docker per addestrare la rete (size 833 e' la dimensione in pixels di ogni mattonella di 1 m) 

docker run -it --rm \
  --ipc=host \
  -v "/home/luca/images/1":/ultralytics/my_data \
  ultralytics/ultralytics:latest-cpu \
  yolo train \
  model=yolov8n.pt \
  data=/ultralytics/my_data/data.yaml \
  epochs=50 \
  imgsz=833 \
  device=cpu \
  project=/ultralytics/my_data/runs

 

i risultati sono pessimi principalmente a causa del dataset ristretto ma dal punto di vista software tutto ha funzionato




 


 






 se, dopo aver fatto il modello, si vuole fare inferenza questo e' il comando

docker run -it --rm \
  -v "/home/luca/images/1":/ultralytics/my_data \
  ultralytics/ultralytics:latest-cpu \
  yolo predict \
  model=/ultralytics/my_data/runs/train/weights/best.pt \
  source=/ultralytics/my_data/train/images/ortophoto_samsung_04_03.jpg \
  project=/ultralytics/my_data/predictions \
  save=True

 

 


Nessun commento:

Posta un commento

Indici Ensomap

Un breve riassunto degli indici utilizzati in Ensomap all'interno del plugin Enmap toolbox di QGis   Carbonate 1) assorbimento dopo rim...