mercoledì 11 aprile 2018

Tango Tablet vs Kinect

Ho provato a mettere alla prova il Tablet di Project Tango con il Kinect sulle Mura Etrusche a Fiesole gia' utilizzate come bersaglio in questo post


Pur ammettendo una giornata piovosa la prova con il tablet Tango e' stata disastrosa. Il sensore di profondita' e' riuscito ad acquisire al massimo 1100 punti da una distanza compresa tra 1.0 e 1.5 m; allontanandosi non veniva effettuata nessuna acquisizione mediante il software ParaView.

L'idea che mi sono fatto e' che il sensore di profondita' del tablet Tango non risulta avere una potenza di emissione cosi' elevata da avere riflessioni significative su superfici non omogenee e poco riflettenti.

In buona sostanza non e' possibile farne un utilizzo "in campagna" per scopi geologici. Il suo mondo e' il rilevamento di interni

martedì 10 aprile 2018

Esperimenti Tango : ParaView

Continuano gli esperimenti con Tango Tablet. La applicazione RTAB-MAP e' decisamente completa ma a me serviva una soluzione semplice per esportare la nuvola dei punti di una singola acquisizione ed ho trovato ParaView in versione Android per l'acquisizione e Desktop per la successiva visualizzazione

IMPORTANTE : non si devono aggiornare le applicazioni originali del tablet. Sia Tango Core che le GApps danno continuamente errore se aggiornate




I fotogrammi vengono acquisiti circa ogni 200 millisecondi.
Il massimo di numero di punti acquisiti e' intorno a 11.000-12.000.
Ad una distanza di 2 m da un muro la visione laterale e' +/- 1.0 m circa sull'asse X (orizzontale) e circa +/- 0.6 m sull'asse verticale. La FOV stimata e' di circa 53°x33°


I dati dello snapshot della app Android vengono salvate in formato .vtk. Dalla versione desktop i dati  possono essere esportati in csv in formato testo da File/Save Data/*.csv

sabato 7 aprile 2018

Test di Project Tango Tablet per la geologia

Scansioni 3D effettuate con Tablet Project Tango ed RTAB-MAP con visualizzazione in MeshLab

L'aspetto interessante di utilizzare RTAB-MAP e' che non e' necessario utilizzare una ripresa statica da cavelletto ma si puo' muovere la camera perche' viene gestito il motion tracking. Questo permette di riprendere anche zone che possono risultare "in ombra" da una ripresa frontale

Prova 1 







Prova 2







giovedì 5 aprile 2018

Project Tango

Visto che il Progetto Tango di Google e' stato dismesso a Marzo 2018 i prezzi dei dispositivi Tango sono scesi ad un livello umano e mi sono preso un Project Tango Tablet Development Kit. In estrema sintesi si tratta di una tablet Android NVidia con processore Tegra K1 e 128 Giga di memoria dotato di sensori simili a quelli del Kinect per il calcolo della distanza degli oggetti inquadrati


Il nome in codice del tablet e' Yellowstone altrimenti conosciuto con la sigla NX-74751 (in Star Trek la nave USS Yellowstone ha il codice NX-74751) ed e' stato sviluppato internamente da Google presso Google's ATAP (Advanced Technology and Projects). Per sapere quale hardware c'e' dentro si rimanda a questo link

Attualmente la documentazione delle API di Tango sono sparite dal sito sviluppatori di Google ma sono sempre recuperabili su Archive.org mentre il codice di esempio e' stato spostato qui. Al momento non sono riuscito a trovare una immagine del firmware da poter scaricare
Il sensore di profondita' e' un OV4682 con una matrice di 320x180 pixels (risoluzione molto lontana dal Kinect) ed ha funzione anche di camera RGB. Ci sono inoltre una camera standard da 4 Megapixels piu' una camera fisheye da 120° ed una da 180° (in totale di sono 4 camere)

OSAndroid™ 4.4 (KitKat®)
Screen7.02” 1920x1200 HD IPS display (323 ppi)
Scratch-resistant Corning® glass
Camera1 MP front facing, fixed focus
4 MP 2µm RGB-IR pixel sensor
Size119.77 x 196.33 x 15.36 mm
Weight0.82 lbs (370 g)
Battery4960 mAH cell (2 x 2480 cells)
ProcessorNVIDIA Tegra K1 with 192 CUDA cores
Network/Wireless4G LTE¹
Dual-band Wi-Fi (2.4GHz/5GHz) WiFi 802.11 a/b/g/n
Bluetooth 4.0
NFC (reader and peer to peer modes)
Memory128 GB internal storage (actual formatted capacity will be less)
4 GB RAM
ConnectivityMicro HDMI
USB 3.0 host via dock connector²
Micro SD card
Nano SIM slot
SensorsMotion tracking camera
3D depth sensing
Accelerometer
Ambient light
Barometer
Compass
aGPS
Gyroscope
Audio OutputDual stereo speakers
3.5 mm audio connector (OMTP)

Viene riportato che il sensore della bussola non sia funzionante

Il tablet viene fornito con un dock che funziona da ricarica ed ha una porta USB. La porta USB serve solo per connettere eventuali USB drive o simili, non funziona come canale Adb. Inoltre il tablet e' talmente assetato di risorse che se si connette il solo cavo USB (e non l'alimentazione del dock, 12V 2A con connettore positivo al centro del jack) il dispositivo si scarica invece di caricarsi)

Alcune applicazioni gia' pronte risultano essere
  • App Discovery Project Tango 
  • Room Scanner
  • RTAB-Map (permette esportazione in ply)
  • Tango Scan View (converte i file OBJ in PLY)
  • ADF Tools
  • Tango Explorer
  • Java Point Cloud Example (dagli esempi Java)
Scansione con RTAB-Map visualizzata con MeshLab

E' possibile ancora ricompilare gli esempi ma non sono riuscito a ricompilare questo progetto


Per ottenere i permessi di root si usa TangoRoot e ChainFireSU (io non sono riuscito ad eseguire il root perche' Android continua a dire che e' TangoRoot e' una applicazione pericolosa e non la mette in esecuzione)

I dati delle immagini di profondita' vengono immagazzinati di default in formato super compresso binario proprietario ADF che risulta poco documentato. In ogni caso ci sono applicazione di terze parti che esportano in formati piu' comuni come PLY. La directory di salvataggio dei file ADF e' mutata nel tempo ma in ogni caso sembra richiedere i permessi di root


venerdì 30 marzo 2018

Modello digitale del terreno con Google DayDream ed Unity

In questo post il metodo che ho usato per mostrare dati di modelli digitali del terreno con Unity ed il visore DayDream di Google

Il progetto che ho creato e'  di tipo Android. Nel Player Settings del progetto sotto XR Settings deve essere spuntato il supporto alla realta' virtuale e si aggiunge DayDream tra gli SDK. Sempre nel Player Settings si deve impostare in Other Settings un Minimum Level API a livello 24

Sicilia con Etna

Per prima cosa si crea il modello digitale.
L'immagine deve essere a scala di grigi, in cui il livello di grigio indica la quota sul livello del mare (nero equivale a livello piu' basso, spesso il livello del mare, il bianco e' la quota piu' alta)

Si crea un oggetto Terrain da GameObject/3D/Terrain con dimensioni pari a quelle del modello DEM
Si trascina l'immagine negli assets del progetto e si prende il file HeightmapfromTexture. Dalle proprieta' dell'immagine (a destra Advanced si deve spuntare Read/Write and Apply)
L'editor delle versioni moderne di Unity (Unity 3d 2017.2) non permettono di editare direttamente file JavaScript. Si copia quindi lo script in un editor e si aggiungono le seguenti linee (dove si dichiarano le variabili x ed y)

    var mapColors = heightmap.GetPixels();
    var map = new Color[w2 * w2];
    var y = 0.0;
    var x = 0.0;



 si salva il file e lo si trascina negli assets del progetto.

Si selezione negli assets l'immagine DEM importata e si clicca sul menu' in alto Terrain/HeightMapFromTexture

Per settare il livello di amplificazione delle quote si cambia il valore di Terrain Height nell'inspector

Il modello usato e' poco dettagliato 2048x2048 pixels


Una volta importato e settato il modello digitale si deve aggiungere il supporto DayDream a Unity.
Una volta scaricato il package Daydream per Unity e lo aggiunge al progetto con il menu Assets/Import Package/Custom/GoogleVRforUnity.unitypackage.


  • Si aggiunge quindi alla Hierarchy il modulo GvrEditorEmulator
  • Si crea quindi un GameObject (dal menu' in alto), Gameobject/Create Empty e si rinomina come Player
  • Si trascina la camera e si inserisce nell'albero sotto l'oggetto Player
  • Si aggiungono GvrControllerMain e GvrEventSystem
  • Se il progetto include una canvas deve essere aggiunto GvrPointerGraphicsRaycaster da Add Component
  • Si aggiunge GvrPointerPhysicsRaycaster alla Camera da Add component
  • Si aggiunge GvrControllerPointer agganciandolo al Player

giovedì 29 marzo 2018

Riconoscimento automatico targhe automobilistiche

Ho letto sul giornale che i Vigili Urbani di Firenze hanno a disposizione un sistema automatico di lettura delle targhe automobilistiche in modo da interrogare poi un database della motorizzazione per elevare multe...mi sono chiesto...quanto e' complicato questo metodo??

Avevo letto che la libreria OpenCV permetteva di fare il riconoscimento automatico ma frugando ho trovato un prodotto gia' fatto ovvero OpenALPR,,vale la pena provarlo facendo una prova veloce

(ps. per motivi di privacy le targhe sono oscurate, fidatevi che i risultati sono corrispondenti alla realta')

Fornendo all'algoritmo questa foto



Si ha come risultato questa lista. Il primo candidato, quello con il punteggio piu' alto, corrisponde al vero numero di targa.


Non tutte le immagini forniscono dati corretti e per assurdo se si fotografa una targa in primissimo piano l'algoritmo fallisce miseramente

Ollama e Jetson Nano 4G

Ancora nel tentativo di utilizzare in modo serio la Jetson Nano ho provato ad usarla per Ollama seguendo le istruzioni da https://dev.to/aje...