ML Kit: librerie e ML per Android e iOS

Autore: IT Sectr Pubblicato: 2026-07-18 Tempo di lettura: 10 min

ML Kit è un SDK mobile di Google per integrare modelli ML pronti in applicazioni Android e iOS. ML Kit fornisce API per riconoscimento testo, rilevamento volti, scansione codici a barre, riconoscimento oggetti, traduzione testo, rilevamento pose e segmentazione immagini — tutti i modelli funzionano sul dispositivo (on-device) senza connessione obbligatoria al server. Secondo Google ML Kit, 2025, la libreria è utilizzata in oltre 100.000 applicazioni, elaborando oltre 2 miliardi di richieste al giorno

Punti chiave

  • ML Kit — SDK Google per funzionalità ML in applicazioni mobili
  • On-device — tutti i modelli funzionano localmente, senza internet
  • API pronte — testo, volti, codici a barre, oggetti, traduzione, pose
  • Multipiattaforma — supporto Android e iOS tramite API unificata
  • Modelli personalizzati — caricamento dei propri modelli TFLite

Cos'è ML Kit: funzionalità e architettura

ML Kit è un SDK compatibile Firebase per piattaforme mobili che fornisce 14 API ML per Android e iOS. ML Kit ha sostituito Firebase ML (vecchio nome) nel 2020 ed è ora disponibile come SDK autonomo tramite Google Play Services (Android) o CocoaPods/SPM (iOS). Il vantaggio principale è che tutti i modelli funzionano sul dispositivo, garantendo privacy dei dati e funzionamento offline.

Architettura di ML Kit è costruita attorno a due modalità: bundled (modello incorporato in APK/IPA) e downloaded (modello scaricato tramite Google Play Services alla prima chiamata). La modalità bundled offre avvio istantaneo ma aumenta le dimensioni dell'app di 5–20 MB. La modalità downloaded risparmia spazio ma richiede internet al primo avvio. Google raccomanda downloaded per API non utilizzate su ogni schermata (Object Detection, Pose Detection).

Personalizzazione tramite TFLite — ML Kit consente di caricare il proprio modello TensorFlow Lite tramite Custom Model API. Ciò offre flessibilità — usa API pronte per attività standard e il proprio modello per attività specifiche. ML Kit fornisce un gestore Input/Output universale che funziona con ByteBuffer e FloatArray. Secondo Google (2025), il 40% dei progetti ML Kit combina API pronte e modelli personalizzati.

kotlin
// Configurazione ML Kit Text Recognition (Android)
val recognizer = TextRecognition.getClient(TextRecognizerOptions.DEFAULT_OPTIONS)

val image = InputImage.fromBitmap(bitmap)
recognizer.process(image)
    .addOnSuccessListener { result ->
        for (block in result.textBlocks) {
            Log.d("MLKit", block.text)
        }
    }
    .addOnFailureListener { error ->
        // Errore di elaborazione
    }

Firebase vs autonomo — ML Kit può essere utilizzato con Firebase (funzioni Cloud, Analytics, Crashlytics) o come SDK autonomo senza Firebase. La modalità autonoma si connette tramite Google Play Services (Android) senza configurare un account Firebase. Le API Cloud sono disponibili tramite Firebase (Cloud Vision, Natural Language) per attività che richiedono reti neurali sul server Google — ma queste funzioni sono a pagamento e non on-device.

ML Kit Text Recognition: riconoscimento testo

ML Kit Text Recognition — API per il riconoscimento ottico dei caratteri (OCR) sulle immagini. Supporta due modalità: Latin-based (latino, cirillico, cifre — 45 lingue) e Chinese/Japanese/Korean (CJK — lingue ideografiche). Il riconoscimento latino utilizza il modello V2 (più veloce) o V1 (alta precisione). V2 offre 10–30 ms per fotogramma, V1 — 50–100 ms.

Funzionalità di Text Recognition includono riconoscimento di testo stampato e scritto a mano, rilevamento dell'orientamento del testo, individuazione di righe, parole e caratteri, determinazione della lingua del testo. L'API restituisce una struttura: Text → TextBlock → Line → Element (Word/Symbol). Ogni elemento ha bounding box, confidenza e testo riconosciuto. Secondo Google (2025), la precisione di ML Kit Text Recognition V2 in scrittura latina è del 96%, in cirillico — 91%.

Text Recognition in tempo reale — utilizzo con CameraX o Camera2 per flusso video. Crea un ImageAnalysis.Analyzer e passa i fotogrammi a ML Kit. Per le prestazioni, riduci la risoluzione del fotogramma a 480p (640x480) — questo è l'equilibrio ottimale tra velocità e precisione. ML Kit gestisce automaticamente la rotazione dell'immagine, ma per la massima velocità passa l'immagine nell'orientamento corretto.

kotlin
// Riconoscimento testo con CameraX Analyzer
class TextAnalyzer : ImageAnalysis.Analyzer {
    private val recognizer = TextRecognition.getClient(
        TextRecognizerOptions.DEFAULT_OPTIONS
    )

    override fun analyze(image: ImageProxy) {
        val inputImage = InputImage.fromMediaImage(
            image.image, image.imageInfo.rotationDegrees
        )
        recognizer.process(inputImage)
            .addOnSuccessListener { /* text found */ }
            .addOnCompleteListener { image.close() }
    }
}

Ottimizzazione di Text Recognition: usa ImageDecoder per migliorare il riconoscimento di immagini sfocate o scure. Per testo stampato — TextRecognizerOptions.DEFAULT_OPTIONS (modello V2). Per testo scritto a mano — TextRecognizerOptions.SCRIPT_LATIN (più preciso ma più lento). Nei progetti IT Sectr usiamo V2 per il riconoscimento documenti e il modello Latin per assegni e ricevute.

ML Kit Face Detection: rilevamento volti e contorni

ML Kit Face Detection — API per rilevare volti in immagini e video. Rileva il bounding box del volto, coordinate di occhi, naso, bocca, orecchie (468 punti di contorno) ed espressioni di base: sorriso, bocca aperta, occhi chiusi. Face Detection è una delle API più veloci di ML Kit: 5–15 ms per fotogramma a seconda del numero di volti e punti di contorno.

Modalità di Face Detection: modalità contour (468 punti di contorno facciale per sovrapposizione precisa di maschere/filtri), modalità classification (rilevamento di sorriso, occhi aperti), modalità landmark (punti chiave senza contorno). Le modalità si combinano in FaceDetectorOptions. Attivare tutte le modalità rallenta il rilevamento di 2–3 volte — usa il set minimo richiesto per la tua attività.

Face Detection in applicazioni AR — basato sui punti di contorno, ML Kit costruisce una maschera facciale per filtri simili a Snapchat. ML Kit restituisce 468 punti con coordinate x, y, z (z = profondità). I punti si aggiornano 30–60 volte al secondo sui dispositivi moderni. Per sovrapposizioni AR usa FaceMeshDetector (versione specializzata) — restituisce anche triangoli della mesh per la texture.

kotlin
// Rilevamento volti con punti di contorno
val options = FaceDetectorOptions.Builder()
    .setPerformanceMode(FaceDetectorOptions.PerformanceMode.FAST)
    .setContourMode(FaceDetectorOptions.ContourMode.ALL)
    .setClassificationMode(FaceDetectorOptions.ClassificationMode.ALL)
    .build()
val detector = FaceDetection.getClient(options)

detector.process(inputImage)
    .addOnSuccessListener { faces ->
        faces.forEach { face ->
            val bounds = face.boundingBox
            val smileProb = face.smilingProbability
        }
    }

Limitazioni di Face Detection: l'API non riconosce a chi appartiene il volto (riconoscimento facciale) — rileva solo i volti. Per l'identificazione usa FaceNet o ArcFace su un modello TFLite personalizzato. ML Kit funziona correttamente con volti ad angoli fino a 45°, con occhiali e mascherina parziale. Per angoli di profilo (90°) la precisione scende al 40–60%.

ML Kit Barcode Scanning: lettura di tutti i formati di codice

ML Kit Barcode Scanning — API per leggere e decodificare codici a barre 1D (EAN, UPC, Code 128) e 2D (QR, Data Matrix, PDF417). Barcode Scanning rileva il codice nell'immagine — a differenza di ZXing che richiede che il codice occupi quasi l'intero fotogramma. ML Kit rileva codici di qualsiasi dimensione e orientamento, inclusi più codici in un singolo fotogramma (modalità multi-barcode).

Formati supportati: EAN-8, EAN-13, UPC-A, UPC-E, Code 39, Code 93, Code 128, ITF, Codabar, QR, Data Matrix, PDF417, Aztec. ML Kit determina automaticamente il formato — non è necessario specificare il tipo di codice. In produzione usa setBarcodeFormats() per limitare i formati supportati — questo accelera la scansione del 30–50% escludendo algoritmi di decodifica non necessari.

Barcode Scanning in tempo reale — simile a Text Recognition, integrazione con CameraX. ML Kit elabora fotogrammi fino a 60 FPS. Per la massima velocità attiva setPerformanceMode(PerformanceMode.FAST). ML Kit Barcode Scanning è 2–3 volte più veloce di ZXing e più preciso nel rilevare codici sfocati o parzialmente coperti. Secondo Google (2025), ML Kit Barcode Scanning ha una precisione del 98,5% in illuminazione standard.

kotlin
// Scansione codici a barre con filtro formato
val options = BarcodeScannerOptions.Builder()
    .setBarcodeFormats(Barcode.FORMAT_QR_CODE,
        Barcode.FORMAT_EAN_13)
    .build()
val scanner = BarcodeScanning.getClient(options)

scanner.process(inputImage)
    .addOnSuccessListener { barcodes ->
        barcodes.forEach { barcode ->
            val value = barcode.rawValue
            val type = barcode.format
        }
    }

Confronto con ZXing: ML Kit è più veloce, preciso e facile da integrare. ZXing è open-source, funziona completamente offline, non richiede Google Play Services. ML Kit richiede Google Play Services (Android) o CocoaPods (iOS). Per app su dispositivi senza Google (Huawei, Amazon Fire), usa ZXing come fallback. Per gli altri — ML Kit, poiché offre una migliore UX grazie al rilevamento multi-codice.

Object Detection e Pose Detection in ML Kit

ML Kit Object Detection — API per rilevare e tracciare oggetti nelle immagini. Rileva oggetti da oltre 1000 categorie (classi ImageNet) — persone, animali, veicoli, oggetti domestici. Object Detection funziona in due modalità: single-image (foto singola) e streaming (flusso video con tracciamento). La modalità streaming traccia gli oggetti tra i fotogrammi, assegnando a ciascuno un ID di tracciamento unico.

Pose Detection — API per determinare la posa umana tramite 33 punti chiave (scheletro): testa, spalle, gomiti, polsi, fianchi, ginocchia, piedi. Determina coordinate (x, y, z) e confidenza di ogni punto. Pose Detection è utilizzata in tracker fitness (conteggio ripetizioni, controllo forma), applicazioni AR (avatar imita movimenti) e analisi sportive. Velocità — 10–30 ms per fotogramma a seconda del numero di persone.

Object Tracking — ML Kit Object Detection con tracciamento tra fotogrammi utilizza un tracker basato su Optical Flow. Quando un oggetto viene rilevato, il tracker lo segue senza nuova rilevazione, risparmiando CPU/GPU. Se il tracker perde l'oggetto (movimento rapido, occlusione), ML Kit riavvia la rilevazione. Secondo Google (2025), il tracker mantiene l'oggetto nel 95% dei fotogrammi a velocità fino a 30 km/h.

kotlin
// Rilevamento pose (scheletro umano)
val poseDetector = PoseDetection.getClient(
    PoseDetectorOptions.Builder()
        .setDetectorMode(PoseDetectorOptions.STREAM_MODE)
        .build()
)

poseDetector.process(inputImage)
    .addOnSuccessListener { pose ->
        pose.allPoseLandmarks.forEach { landmark ->
            val type = landmark.landmarkType // SPALLA_SINISTRA, GOMITO_DESTRO...
            val position = landmark.position3D
        }
    }

Selfie Segmentation — API per segmentare una persona dall'immagine (separare la persona dallo sfondo). Restituisce una maschera di confidenza per ogni pixel. Selfie Segmentation viene utilizzata per sfocare o sostituire sfondi in videochiamate, editor fotografici e applicazioni AR. La maschera viene restituita come UInt8Array della dimensione dell'immagine originale — ogni pixel contiene un valore da 0.0 (sfondo) a 1.0 (persona).

Modelli TFLite personalizzati in ML Kit

Custom Model API — la possibilità di caricare ed eseguire i propri modelli TensorFlow Lite tramite l'interfaccia ML Kit. ML Kit fornisce un'API Input/Output unificata: ByteBuffer come input, FloatArray/TensorImage come output. Ciò consente di sfruttare i vantaggi di ML Kit (gestione modelli, elaborazione immagini, integrazione CameraX) con modelli personalizzati per riconoscimento facciale, classificazione oggetti, PNL e altro.

Caricamento di un modello — posiziona il file .tflite in assets/ (Android) o bundle (iOS) e caricalo tramite CustomModelDownloadConditions o Firebase Model Manager. Per scaricare modelli grandi (5+ MB) usa condizioni di scaricamento: Wi-Fi, carico, in background. Google raccomanda di scaricare il modello al primo avvio dell'app, non al momento del primo utilizzo.

kotlin
// Caricamento modello TFLite personalizzato
val conditions = CustomModelDownloadConditions.Builder()
    .requireWifi()
    .build()
val remoteModel = CustomRemoteModel.Builder("my_model")
    .setRemoteModelName("my_model_v2")
    .build()

remoteModel.download(conditions)
    .addOnSuccessListener { /* model ready */ }
    .addOnFailureListener {
        // Usa modello incluso da assets
    }

Ottimizzazione di modelli personalizzati: usa TFLite Converter con compatibilità delegate. Per prestazioni massime quantizza il modello (INT8) — questo riduce le dimensioni del modello di 4x e accelera l'inferenza di 2–3x tramite XNNPACK Delegate. ML Kit Custom Model API supporta Dynamic Shape (batch = 1), Image Input (UInt8, Float32) e Tensor Output.

Domande frequenti

Cos'è ML Kit in Android?

ML Kit è un SDK Google con modelli ML pronti per Android e iOS. Include API per riconoscimento testo (OCR), rilevamento volti, scansione codici a barre, riconoscimento oggetti, rilevamento pose, traduzione e segmentazione. Funziona sul dispositivo, non richiede internet. Si connette tramite Google Play Services (Android) o CocoaPods (iOS) minimamente — con una singola riga di dipendenza.

In cosa ML Kit differisce da TensorFlow Lite?

ML Kit — SDK di alto livello con API pronte per attività specifiche (testo, volti, codici). TensorFlow Lite — runtime di basso livello per eseguire qualsiasi modello TFLite. ML Kit include TFLite internamente ma fornisce codice pronto e ottimizzazioni per attività standard. Se devi riconoscere testo — ML Kit (5 righe di codice). Se hai la tua rete neurale — TFLite (20+ righe).

ML Kit funziona senza internet?

Sì, tutte le API principali di ML Kit (Text Recognition, Face Detection, Barcode Scanning, Object Detection, Pose Detection, Image Labeling) funzionano completamente sul dispositivo senza connessione internet dopo lo scaricamento iniziale del modello. Le API Cloud (Cloud Vision, Natural Language) sono opzionali e richiedono internet. Per i modelli scaricati, internet è necessario solo per il primo scaricamento del modello.

Si può usare ML Kit su iOS?

Sì, ML Kit supporta completamente iOS tramite CocoaPods o Swift Package Manager. Le API sono simili alla versione Android. Per iOS, ML Kit utilizza Vision Framework e Core ML internamente — i modelli vengono eseguiti su Apple Neural Engine (A12+). ML Kit su iOS funziona con UIImage, CVPixelBuffer e CMSampleBuffer. Supporta iOS 12+ e Xcode 15+.

ML Kit è gratuito?

Sì, le API on-device di ML Kit sono completamente gratuite senza limiti sul numero di richieste. Le API Cloud (tramite Firebase) sono a pagamento dopo il limite gratuito ($200/mese gratis). I modelli on-device non richiedono un account Firebase — ML Kit funziona in modo autonomo tramite Google Play Services. Per applicazioni commerciali, ML Kit on-device è una scelta sicura con costo operativo zero.

Riepilogo

  • ML Kit — SDK Google con 14 API ML pronte per Android e iOS
  • Text Recognition — OCR per latino (45 lingue) e CJK, precisione 91–96%
  • Face Detection — 468 punti di contorno, sorriso, occhi aperti, 5–15 ms
  • Barcode Scanning — tutti i formati di codice, multi-codice, 2–3x più veloce di ZXing
  • Pose Detection — 33 punti dello scheletro umano, tracciamento in tempo reale
  • Custom Model API — i tuoi modelli TFLite tramite interfaccia unificata
  • On-device — tutti i modelli funzionano localmente, gratis, senza internet

Svilupperemo un'applicazione mobile chiavi in mano

IT Sectr crea applicazioni iOS e Android per startup e aziende dal 2017. Ti consulteremo e ti proporremo la soluzione migliore.

Discuti il progetto

Leggi anche