EMULATORE FEATURE LIVE & GUIDA | v0.8.0 CLIO LIVE + MARKETPLACE EN
13:42
📶 📡 🔋 98%

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.

Kotlin (DeviceCheckScreen.kt) fun checkDevice(context: Context): DeviceCheckResult {
  val totalRamGB = getAvailableRAM(context)
  val canRunE4B = totalRamGB >= 3.8 // Gemma 4 require 4GB RAM
  return DeviceCheckResult(
    hasCamera = checkCameraPermission(context),
    hasARCore = isARCoreInstalled(context),
    canRunE4B = canRunE4B
  )
}
Ottimizzazione Memoria RAM Verifica RAM per allocare il modello E4B (4.2GB) o E2B (2.1GB) on-device.
Diagnostica ARCore Controlla la compatibilità del framework Augmented Reality prima di avviare il renderer.

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.

Kotlin (CameraViewModel.kt) ocrProcessor.analyzeImage(bitmap) { ocrResult ->
  _scanState.value = ScanState.OCRComplete(ocrResult)
  // Ancoraggio Semantico iniettato nel VLM:
  router.setSemanticAnchor(ocrResult.artist, ocrResult.title)
}
ML Kit OCR On-Device Riconoscimento caratteri ad alta velocità localmente sul telefono (supporta caratteri CJK).
Pre-validazione DB Confronta le stringhe OCR con il database locale per correggere refusi ed evitare errori di interpretazione.

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.

🧑
Adulto (Critico) Focus su simbolismo neoplatonico, vicende storiche, composizione cromatica e restauro.
👴
Senior (Accessibile) Font scalati a 1.3x, contrasti elevati (WCAG 2.1 AA), narrazione descrittiva e velocità TTS ridotta.
🧒
Bambini (Magico) Racconti interattivi basati sulla meraviglia, metafore fiabesche, e caccia al tesoro dei dettagli.

Simulator Controls

Seleziona Profilo Visitatore:

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.

Kotlin (TTSManager.kt) override fun onSensorChanged(event: SensorEvent) {
  val distance = event.values[0]
  val isNear = distance < proximitySensor.maximumRange
  if (isNear) {
    switchToEarpieceAndLowerVolume() // Whisper Mode!
    _state.value = TTSState.Speaking(whisperActive = true)
  }
}
Voci Naturali M/F 10 voice profiles neurali reali in 5 lingue (es: Riccardo e Paola in IT, Ryan e Amy in EN).
Sottotitoli Live Visualizzazione in tempo reale del testo letto per utenti con disabilità uditive (EAA/WCAG).

Simulator Controls

Simula Sensore Prossimità (Whisper Mode):

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.

Kotlin (MapScreen.kt) val pack = museumExperiencePackages(museum, appLanguage).first()
exhibitionViewModel.startVisit(pack.title, pack.artworks)
navController.navigate(Screen.Camera.route)
// GPS remains optional for distance and directions

Simulator Controls

Simula Distanza da Firenze (Uffizi): 250 km

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.

Kotlin (IndoorLocationManager.kt) val distance = calculateDistanceFromRssi(result.rssi, metadata.txPower)
val filteredDistance = kalmanFilter.update(distance)
if (filteredDistance < 2.0) {
  triggerProximityEvent(metadata.artworkId) // Opera vicina!
}
Multilaterazione Kalman Elimina le fluttuazioni del segnale dovute al corpo umano o alle pareti, stabilizzando la mappa.
Checklist di Stanza Visualizza automaticamente le opere da vedere nella stanza in cui ti trovi, tracciando i progressi.
Clio TourSync™ & Telemetria Gruppo Calcola in tempo reale la distanza di ciascun partecipante rispetto alla guida turistica ed emette allarmi di allontanamento (>15m) visivi sul radar.

Simulator Controls

Sposta utente nella stanza:

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.

Kotlin (ScholarAnnotation.kt) data class ScholarAnnotation(
  val id: Long = 0,
  val scanId: Long,
  val xCoord: Float, // coordinate 0f..1f relative
  val yCoord: Float,
  val noteText: String
)

Simulator Controls

Aggiungi Nota nel simulatore:

*Nota: Clicca sull'immagine nel simulatore a sinistra per cambiare le coordinate di posizionamento del pin.*