il formato di output e' stato modificato in Geotiff perche' JP2 non permette di salvare in float32
sabato 12 novembre 2022
NDVI Sentinel 2 con RasterIO
Truecolor Sentinel2 con RasterIO
Truecolor da dati Sentinel 2 usando RasterIO
L'immagine e' stata corretta nel contrasto per renderla piu' leggibile
venerdì 11 novembre 2022
Sentinel 2 da SciHub
risoluzione 10 m
AOT : Aerosol Optical Thickness
WVP : Water vapor
AOT : Aerosol Optical Thickness
WVP : Water vapor
AOT : Aerosol Optical Thickness
WVP : Water vapor
giovedì 10 novembre 2022
Sentinel 2 in Google Cloud
Le immagini Sentinel2 sono rilasciate in modo gratuito ma i repository delle immagini le forniscono con una interfaccia utente interattiva mentre e' a pagamento l'accesso automatico via API
In modo abbastanza casuale mi sono imbattuto in questo bucket su Google Cloud
che puo' essere utilizzato mediante questa libreria Python (per la selezione e download)
https://github.com/
per l'installazione si usa
pip3 install
git+https://github.com/QuantuMobileSoftware/sentinel2tools.git@ca232cb66106db6cac729defdab91aad9aecb15b.Lo scripthe puo' essere utilizzato mediante questa libreria Python (per la selezione e download)
Visto che i dati sono in un bucket di Gooogle Cloud e' richiesta anche 'autenticazione a GCloud.
Per avere il file json di autenticazione si deve aprire la consolle di GCloud, creare un progetto e seguire le istruzioni al link seguente
https://cloud.google.com/api-k
Le immagini vengono scaricate in formato JP2, una per banda, a 16 bit e georiferite in UTM (attenzione a questo dato). Oltre alle 12 bande sono presenti un truecolor (TCI)
Viene scaricata tutta l'immagine che comprende la selezione geografica. Per effettuare il taglio si possono usare le GDAL. Le coordinate devono essere UTM
Estrazione di piani da pointcloud
Avevo gia' provato a fare una estrazione dei piani su un affioramento roccioso con PCL qualche tempo fa
Questa volta ho provato ad utilizzare la libreria Open3D con l'algoritmo Ransac per l'estrazione di piani multipli da una scansione fatta con il tablet Tango
Per l'algoritmo e' sufficiente definire il numero massimo di piani attesi, la distanza di soglia ed il numero di iterazioni
I vari piani oltre ad essere visualizzati vengono anche estratti come ply
import numpy as np
import open3d as o3d
import matplotlib.pyplot as plt
input_path="./"
dataname="maiano.ply"
pcd = o3d.io.read_point_cloud(input_path+dataname)
o3d.visualization.draw_geometries([pcd])
#ransac piani multipli
segment_models={}
segments={}
max_plane_idx=3
rest=pcd
for i in range(max_plane_idx):
colors = plt.get_cmap("tab20")(i)
segment_models[i], inliers = rest.segment_plane(distance_threshold=0.1,ransac_n=3,num_iterations=5000)
segments[i]=rest.select_by_index(inliers)
segments[i].paint_uniform_color(list(colors[:3]))
rest = rest.select_by_index(inliers, invert=True)
print("pass",i,"/",max_plane_idx,"done.")
o3d.io.write_point_cloud("0.ply", segments[0])
o3d.visualization.draw_geometries([segments[0]] + [rest])
o3d.io.write_point_cloud("1.ply", segments[1])
o3d.visualization.draw_geometries([segments[1]] + [rest])
o3d.io.write_point_cloud("2.ply", segments[2])
o3d.visualization.draw_geometries([segments[2]] + [rest])
martedì 1 novembre 2022
Influenza dell'angolo di ripresa su Aruco Tags
Usando gli Aruco Tags mi sono accorto che se vario la posizione di ripresa mantenendo i tag stabili gli angoli e le distanze fornite da RVec e TVec cambiano sensibilmente
Su github ho trovato questa libreria https://github.com/tentone/aruco in cui e' contenuta una tabella riassuntiva in cui si vede chiaramente l'effetto dell'angolo di ripresa sulla stima della distanza con errori anche sensibili per modeste (inferiori ai 10 gradi) variazioni dell'angolo di ripresa
in questo video si osserva che la distanza relativa tra i tag varia da un minimo di 31 ad un massimo di 40 cm con angoli tra 70 ed 80 al variare del punto di ripresa
sabato 29 ottobre 2022
StreamDesk DIY ESP32
Tempo fa avevo gia' fatto un sistema a pulsanti per comandare Youtube...questa volta e' la versione definitiva. Pulsantiera collegata ad un ESP32 alimentato da 4 batterie AAA che emula la tastiera
Per l'alimentazione il pacco batterie e' collegata al VIN che e' un ingresso per tensione non regolata. Attenzione, non tutte le schede ESP32 hanno VIN ed al suo posto si trova un VOut a 5 V collegato direttamente alla USB
Per rendere i collegamenti semplici i pulsanti sono collegati direttamente all'ingresso digitale dell'ESP32 utilizzando l'impostazione PULLUP nel codice
BleKeyboard bleKeyboard;
#define BUTTON4 4
#define BUTTON5 5
#define BUTTON21 21
#define BUTTON23 23
int lState4 = HIGH;
int cState4;
int lState5 = HIGH;
int cState5;
int lState21 = HIGH;
int cState21;
int lState23 = HIGH;
int cState23;
void setup() {
Serial.begin(9600);
pinMode(BUTTON4, INPUT_PULLUP);
pinMode(BUTTON5, INPUT_PULLUP);
pinMode(BUTTON21, INPUT_PULLUP);
pinMode(BUTTON23, INPUT_PULLUP);
bleKeyboard.begin();
}
void loop() {
if (bleKeyboard.isConnected()) {
// read the state of the switch/button:
cState4 = digitalRead(BUTTON4);
cState5 = digitalRead(BUTTON5);
cState21 = digitalRead(BUTTON21);
cState23 = digitalRead(BUTTON23);
if(lState4 == LOW && cState4 == HIGH)
{
Serial.println("DS4");
bleKeyboard.print("K");
}
if(lState5 == LOW && cState5 == HIGH)
{
Serial.println("DS5");
bleKeyboard.print("J");
}
if(lState21 == LOW && cState21 == HIGH)
{
Serial.println("DS21");
bleKeyboard.print("F");
}
if(lState23 == LOW && cState23 == HIGH)
{
Serial.println("DS23");
bleKeyboard.write(KEY_LEFT_ARROW);
}
lState4 = cState4;
lState5 = cState5;
lState21 = cState21;
lState23 = cState23;
delay(10);
}
else
{
Serial.println("In attesa di connessione");
delay(5000);
}
}
Distanza ed angoli relativi tra due tag Aruco
La distanza reale centro centro tra i due tags e' di 35 cm
mercoledì 26 ottobre 2022
Calcolo di angolo tra vettori con NumPy
Calcolo di angolo tra due vettori con numpy secondo la formuale sottostante (prodotto scalare tra i due vettori diviso il prodotto delle norme dei vettori)
A = np.array([3,3])
B = np.array([2,1])
dot_product = np.dot(A,B)
normA = (np.linalg.norm(A))
normB = (np.linalg.norm(B))
cos_angolo = dot_product/(normA*normB)
angolo_rad = np.arccos(cos_angolo)
print(np.rad2deg(angolo_rad))
martedì 25 ottobre 2022
Eclisse solare 25 Ottobre
Ovviamente giornata nuvolosa che ha permesso pochi minuti di osservazione e mai in condizioni ottimali
venerdì 2 settembre 2022
Visualizzazione file GRIB meteo
Per il download automatico e la visualizzazione di dati di previsione meteo ho trovato disponibile anche su Linux il software XyGrib
Permette di scaricare modelli di previsioni da diverse fonti di dati selezionando i campi di interesse su una finestra geografica definita dall'utente ed anche di creare delle animazioni (tasto razzo)
Anche solo per la comodita' vale la pena provarlo
giovedì 1 settembre 2022
Apriltag
Dopo questa prova con Aruco Tags ho provato un progetto con AprilTag basato sulla libreria basato sulla libreria https://github.com/reinhartmeg/AprilTag-Distance-Calculator modificato per renderlo compatibile con OpenCV4
https://github.com/c1p81/distance_apriltag
mercoledì 24 agosto 2022
Coregistrazione immagini ottiche
Questo post illustra come e' stato risolto il problema della GIF sottostante
Le immagini ottiche sono riprese da una camera PTZ che nel corso del giorno si sposta su diverse inquadrature...cio' comporta che non ritorna mai nelle impostazione perfette del giorno precedente rendendo impossibile l'analisi al computer ma anche la semplice interpretazione umana di eventuali modifiche
Per risolvere il problema sono state applicate tecniche che riguardano sia la correzione geometrica che dello spazio colore
Per prima cosa i vari fotogrammi sono stati coregistrati in modo software con il seguente script Python
///////////////////////////////////////////////////////
///////////////////////////////////////////////////////
per la registrazione dell'istogramma dei colori e' stato usato
///////////////////////////////////////////////////////
///////////////////////////////////////////////////////
ed il risultato viene elaborato da uno script in Python per esaltare il contrasto della mappa di CD
martedì 23 agosto 2022
Copertura nevosa con Google Earth Engine ed ERA5
Questo dato e' stato ricercato perche' in un settore dell'Appennino ToscoEmiliano qualche anno fa si sono riattivate numerose frane. Il sospetto e' che fossero cadute nevicate tardive che si sono poi sciolte rapidamente con l'arrivo del caldo invernale innescando i movimenti di versante
Sull'area non sono presenti nivometri per cui non vi sono dati di verita' a terra. Le immagini Landsat ovviamente nel periodo invernale sono spesso nuvolose e di poco utilizzo
Un primo metodo e' quello di utilizzare i dati di ERA5Questa analisi si puo' fare interrogando direttamente le API di Copernicus senza passare da Google Earth Engine
===================================================
[[10.2014189280409, 44.47706314233407],
[10.389914585837579, 44.524348579528535],
[10.228782890268272, 44.53074818785566],
[10.075498095653819, 44.458900035551736],
[10.100715972012257, 44.51255997214677]]);
/***** End of imports. If edited, may not auto-convert in the playground. *****/
var point = ee.Geometry.Point([10.2014189280409, 44.47706314233407]);
var snow_depth = ee.ImageCollection('ECMWF/ERA5_LAND/MONTHLY')
.select('snow_depth')
.filterBounds(point)
.filter(ee.Filter.calendarRange(2000,2020,'year'))
.map(function(image){return image.clip(point)}) ;
// plot full time series
print(
ui.Chart.image.series({
imageCollection: snow_depth,
region: point,
scale: 1000
}).setOptions({title: 'Snow Monthly ERA5'})
);
===================================================
===================================================
LLama3 Anita
A seguito di questo post ho provato a vedere ho provato a vedere cosa accadeva ad utilizzare un modello specifico per la lingua italiana in...
-
Aggiornamento questo e' la risposta degli sviluppatori First of all, almost all operating systems on both mobile and laptop/desktop n...
-
La scheda ESP32-2432S028R monta un Esp Dev Module con uno schermo TFT a driver ILI9341 di 320x240 pixels 16 bit colore.Il sito di riferiment...
-
Questo post e' a seguito di quanto gia' visto nella precedente prova Lo scopo e' sempre il solito: creare un sistema che permet...













.png)