Interagisci con lo schermo o usa i controlli nel pannello a destra per testare la build.
Onboarding & Autodiagnosi hardware
Al primo avvio, l'applicazione MOSTRAmi esegue un'autodiagnosi hardware edge-side per determinare se il dispositivo soddisfa i requisiti minimi per eseguire l'AI locale on-device (Gemma 4 LiteRT) ed utilizzare la fotocamera AR Core. Se le risorse sono limitate, l'app degrada elegantemente a servizi cloud e simulatori.
val totalRamGB = getAvailableRAM(context)
val canRunE4B = totalRamGB >= 3.8 // Gemma 4 require 4GB RAM
return DeviceCheckResult(
hasCamera = checkCameraPermission(context),
hasARCore = isARCoreInstalled(context),
canRunE4B = canRunE4B
)
}
Simulator Controls
Simula il test hardware iniziale dell'app. Clicca per eseguire i controlli.
Ancoraggio Semantico & OCR Pipeline
L'innovazione di MOSTRAmi risiede nella pipeline a due fasi: l'utente scansiona prima la didascalia (placca informativa) dell'opera. L'OCR on-device estrae istantaneamente autore, titolo e anno. Questa informazione viene iniettata nel prompt dell'AI come **"Ancoraggio Semantico"**, riducendo le identificazioni non supportate tipiche dei modelli VLM generici.
_scanState.value = ScanState.OCRComplete(ocrResult)
// Ancoraggio Semantico iniettato nel VLM:
router.setSemanticAnchor(ocrResult.artist, ocrResult.title)
}
Simulator Controls
Inquadra la placca sul telefono a sinistra e premi il tasto di scatto per simulare l'OCR.
Profile Steering & Persona AI
MOSTRAmi calibra dinamicamente lo stile della narrazione e dell'esperienza in base al profilo visitatore. Il **"Visitor Profile Wizard"** modifica la complessità dei prompt VLM, la dimensione del testo visualizzato (High-Contrast ed EAA compliance) e la velocità di lettura TTS per adattarsi perfettamente a diverse esigenze.
Simulator Controls
Clio Live Globale, TTS Locale & Whisper Mode
L'audio-guida reinventata: MOSTRAmi implementa Clio Live cloud audio nativo con ascolto continuo, risposte vocali e barge-in, ora disponibile come assistente flottante sulle superfici principali dell'app. Le opzioni voce locali compaiono solo nel contesto locale o esperto, mentre Live e TTS sono mutuamente esclusivi per evitare doppio audio. Il fallback locale usa **Piper Neural TTS** via `sherpa-onnx`; il **"Whisper Mode"** rileva la vicinanza dell'orecchio e passa la narrazione alla capsula auricolare.
val distance = event.values[0]
val isNear = distance < proximitySensor.maximumRange
if (isNear) {
switchToEarpieceAndLowerVolume() // Whisper Mode!
_state.value = TTSState.Speaking(whisperActive = true)
}
}
Simulator Controls
Musei, Percorsi Guidati & Distanze
La sezione Musei non è più una lista di PDF: ora propone pacchetti caricabili con pubblico, durata, opere da trovare e step di percorso. La posizione GPS resta facoltativa e serve a ordinare i musei, mostrare distanza e aprire le indicazioni, ma la visita può partire anche da un pacchetto già scelto dal museo.
exhibitionViewModel.startVisit(pack.title, pack.artworks)
navController.navigate(Screen.Camera.route)
// GPS remains optional for distance and directions
Simulator Controls
Localizzazione Indoor BLE & Kalman Filter
All'interno del museo, la localizzazione GPS decade. MOSTRAmi scansiona i segnali **Bluetooth Low Energy (iBeacon)** installati nelle sale. Utilizzando un **Filtro di Kalman** accoppiato ad algoritmi di multilaterazione, riduce il rumore dell'RSSI calcolando la posizione esatta del visitatore all'interno della stanza. Questo consente all'app di attivare descrizioni dedicate dell'opera più vicina senza input manuali.
val filteredDistance = kalmanFilter.update(distance)
if (filteredDistance < 2.0) {
triggerProximityEvent(metadata.artworkId) // Opera vicina!
}
Simulator Controls
Taccuino d'Arte, Timeline Scrapbook & Annotazioni
Il **Post-Visit Explorer & Scrapbook** consente all'utente di conservare le opere scansionate in un vero e proprio Diario di Vita storiografico. Ordina le scansioni in una timeline scrapbook verticale, registra note vocali personali (.aac), scatta foto ricordo davanti all'opera, calcola statistiche di viaggio (tempo, XP e sticker) ed esporta polaroid d'arte condivisibili o PDF di riassunto. Lo stesso pattern di esplorazione dettagli ora arriva nella chat: pinch, tap sui punti di interesse o selezione circolare di un crop per continuare il dialogo su quell'area precisa.
val id: Long = 0,
val scanId: Long,
val xCoord: Float, // coordinate 0f..1f relative
val yCoord: Float,
val noteText: String
)
Simulator Controls
*Nota: Clicca sull'immagine nel simulatore a sinistra per cambiare le coordinate di posizionamento del pin.*