ML Kit — is een mobiele SDK van Google voor integratie van kant-en-klare ML-modellen in Android- en iOS-apps. ML Kit biedt API's voor tekstherkenning, gezichtsdetectie, barcodescannen, objectherkenning, tekstvertaling, posebepaling en beeldsegmentatie — alle modellen werken op het apparaat (on-device) zonder verplichte serververbinding. Volgens Google ML Kit, 2025 wordt de bibliotheek gebruikt in meer dan 100.000 apps en verwerkt het 2+ miljard verzoeken per dag
Belangrijkste punten
ML Kit — is een Firebase-compatibele SDK voor mobiele platforms die 14 ML-API's biedt voor Android en iOS. ML Kit verving Firebase ML (oude naam) in 2020 en is nu beschikbaar als zelfstandige SDK via Google Play Services (Android) of CocoaPods/SPM (iOS). Het belangrijkste voordeel — alle modellen werken on-device, wat gegevensprivacy en werking zonder internet garandeert.
Architectuur van ML Kit is opgebouwd rond twee modi: bundled (model ingebouwd in APK/IPA) en downloaded (model wordt bij eerste aanroep via Google Play Services gedownload). Bundled-modus geeft directe start, maar vergroot de appgrootte met 5–20 MB. Downloaded — bespaart ruimte, maar vereist internet bij eerste start. Google raadt downloaded aan voor API's die niet op elk scherm worden gebruikt (Object Detection, Pose Detection).
Aanpassing via TFLite — ML Kit maakt het mogelijk om uw eigen TensorFlow Lite-model te laden via de Custom Model API. Dit biedt flexibiliteit — gebruik kant-en-klare API's voor standaardtaken en uw eigen model voor specifieke taken. ML Kit biedt een universele Input/Output-handler die werkt met ByteBuffer en FloatArray. Volgens Google (2025) combineert 40% van de ML Kit-projecten kant-en-klare API's en aangepaste modellen.
// ML Kit Text Recognition instellen (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 ->
// Verwerkingsfout
}
Firebase vs standalone — ML Kit kan worden gebruikt met Firebase (Cloud-functies, Analytics, Crashlytics) of als zelfstandige SDK zonder Firebase. Standalone-modus maakt verbinding via Google Play Services (Android) zonder Firebase-accountconfiguratie. Cloud-API's zijn beschikbaar via Firebase (Cloud Vision, Natural Language) voor taken die neurale netwerken op de Google-server vereisen — maar deze functies zijn betaald en niet on-device.
ML Kit Text Recognition — API voor optische tekenherkenning (OCR) op afbeeldingen. Ondersteunt twee modi: Latin-based (Latijns alfabet, Cyrillisch, cijfers — 45 talen) en Chinese/Japanese/Korean (CJK — hiërogliefentalen). Latin-herkenning gebruikt model V2 (sneller) of V1 (hoge precisie). V2 geeft snelheid van 10–30 ms per frame, V1 — 50–100 ms.
Mogelijkheden van Text Recognition omvatten herkenning van gedrukte en handgeschreven tekst, bepaling van tekstoriëntatie, detectie van regels, woorden en symbolen, bepaling van teksttaal. De API retourneert de structuur: Text → TextBlock → Line → Element (Word/Symbol). Elk element heeft bounding box, confidence en herkende tekst. Volgens Google (2025) is de nauwkeurigheid van ML Kit Text Recognition V2 op Latijns alfabet 96%, op Cyrillisch — 91%.
Text Recognition in real-time — gebruik met CameraX of Camera2 voor videostream. Maak een ImageAnalysis.Analyzer en stuur frames naar ML Kit. Verlaag voor prestaties de frameresolutie naar 480p (640x480) — dit is de optimale balans tussen snelheid en nauwkeurigheid. ML Kit verwerkt automatisch beeldrotatie, maar stuur voor maximale snelheid de afbeelding in de juiste oriëntatie.
// Tekstherkenning met 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() }
}
}
Optimalisatie van Text Recognition: gebruik ImageDecoder voor verbeterde herkenning van wazige of donkere afbeeldingen. Voor gedrukte tekst — TextRecognizerOptions.DEFAULT_OPTIONS (model V2). Voor handgeschreven tekst — TextRecognizerOptions.SCRIPT_LATIN (nauwkeuriger, maar langzamer). In IT Sectr-projecten gebruiken we V2 voor documentherkenning en het Latin-model voor cheques en bonnen.
ML Kit Face Detection — API voor gezichtsdetectie op afbeeldingen en video. Bepaalt de bounding box van het gezicht, coördinaten van ogen, neus, mond, oren (468 contourpunten) en basisuitdrukkingen: glimlach, open mond, gesloten ogen. Face Detection is een van de snelste ML Kit-API's: 5–15 ms per frame afhankelijk van aantal gezichten en contourpunten.
Face Detection-modi: contour mode (468 contourpunten van het gezicht voor precieze toepassing van maskers/filters), classification mode (bepaling van glimlach, open ogen), landmark mode (sleutelpunten zonder contour). Modi worden gecombineerd in FaceDetectorOptions. Het inschakelen van alle modi vertraagt detectie 2–3 keer — gebruik de minimaal benodigde set voor uw taak.
Face Detection in AR-apps — op basis van contourpunten bouwt ML Kit een gezichtsmasker voor Snapchat-achtige filters. ML Kit retourneert 468 punten met coördinaten x, y, z (z = diepte). Punten worden 30–60 keer per seconde bijgewerkt op moderne apparaten. Gebruik voor AR-toepassing FaceMeshDetector (gespecialiseerde versie) — deze retourneert ook de driehoeken van het mesh voor texturering.
// Gezichtsdetectie met contourpunten
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
}
}
Beperkingen van Face Detection: de API herkent niet van wie het gezicht is (face recognition) — detecteert alleen gezichten. Gebruik voor persoonsidentificatie FaceNet of ArcFace op een aangepast TFLite-model. ML Kit werkt correct met gezichten onder een hoek tot 45°, met bril en gedeeltelijk masker. Voor profielhoeken (90°) daalt de nauwkeurigheid naar 40–60%.
ML Kit Barcode Scanning — API voor het lezen en decoderen van eendimensionale (EAN, UPC, Code 128) en tweedimensionale (QR, Data Matrix, PDF417) barcodes. Barcode Scanning detecteert de code in de afbeelding — in tegenstelling tot ZXing, dat vereist dat de code bijna het hele frame beslaat. ML Kit detecteert de code van elke grootte en oriëntatie, inclusief meerdere codes in één frame (multi-barcode-modus).
Ondersteunde formaten: EAN-8, EAN-13, UPC-A, UPC-E, Code 39, Code 93, Code 128, ITF, Codabar, QR, Data Matrix, PDF417, Aztec. ML Kit bepaalt automatisch het formaat — u hoeft het codetype niet op te geven. Gebruik in productie setBarcodeFormats() om ondersteunde formaten te beperken — dit versnelt scannen met 30–50% door overbodige decoderingsalgoritmen uit te sluiten.
Barcode Scanning in real-time — vergelijkbaar met Text Recognition, integratie met CameraX. ML Kit verwerkt frames met een frequentie tot 60 FPS. Schakel voor maximale snelheid setPerformanceMode(PerformanceMode.FAST) in. Barcode Scanning van ML Kit is 2–3 keer sneller dan ZXing en detecteert wazige of gedeeltelijk bedekte codes nauwkeuriger. Volgens Google (2025) heeft ML Kit Barcode Scanning 98.5% nauwkeurigheid bij standaardverlichting.
// Barcodescannen met formaatfilter
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
}
}
Vergelijking met ZXing: ML Kit is sneller, nauwkeuriger en eenvoudiger te integreren. ZXing — open-source, werkt volledig offline, vereist geen Google Play Services. ML Kit vereist Google Play Services (Android) of CocoaPods (iOS). Gebruik voor apps die op apparaten zonder Google (Huawei, Amazon Fire) draaien ZXing als fallback. Voor de rest — ML Kit, omdat het een betere UX biedt dankzij multi-code-detectie.
ML Kit Object Detection — API voor detectie en tracking van objecten op afbeeldingen. Detecteert objecten uit 1000+ categorieën (ImageNet-klassen) — mensen, dieren, voertuigen, huishoudelijke voorwerpen. Object Detection werkt in twee modi: single-image (enkele foto) en streaming (videostream met tracking). Streaming-modus volgt objecten tussen frames en kent aan elk een unieke track ID toe.
Pose Detection — API voor het bepalen van de menselijke pose op basis van 33 sleutelpunten (skelet): hoofd, schouders, ellebogen, polsen, heupen, knieën, voeten. Bepaalt coördinaten (x, y, z) en confidence van elk punt. Pose Detection wordt toegepast in fitness-trackers (herhalingen tellen, vormcontrole), AR-apps (avatar die bewegingen kopieert) en sportanalytiek. Snelheid — 10–30 ms per frame afhankelijk van aantal personen.
Object Tracking — ML Kit Object Detection met tracking tussen frames gebruikt een tracker gebaseerd op Optical Flow. Wanneer een object is gedetecteerd, volgt de tracker het zonder herdetectie, wat CPU/GPU bespaart. Als de tracker het object verliest (snelle beweging, obstructie), start ML Kit herdetectie. Volgens Google (2025) behoudt de tracker het object in 95% van de frames bij bewegingssnelheid tot 30 km/u.
// Posedetectie (menselijk skelet)
val poseDetector = PoseDetection.getClient(
PoseDetectorOptions.Builder()
.setDetectorMode(PoseDetectorOptions.STREAM_MODE)
.build()
)
poseDetector.process(inputImage)
.addOnSuccessListener { pose ->
pose.allPoseLandmarks.forEach { landmark ->
val type = landmark.landmarkType // LINKER_SCHOUDER, RECHTER_ELLEMBOOG...
val position = landmark.position3D
}
}
Selfie Segmentation — API voor segmentatie van de persoon op de afbeelding (persoon scheiden van achtergrond). Retourneert een betrouwbaarheidsmasker voor elke pixel. Selfie Segmentation wordt gebruikt voor vervagen of vervangen van de achtergrond in videogesprekken, fotobewerkers en AR-apps. Het masker wordt geretourneerd als UInt8Array van de grootte van de originele afbeelding — elke pixel bevat een waarde van 0.0 (achtergrond) tot 1.0 (persoon).
Custom Model API — mogelijkheid om eigen TensorFlow Lite-modellen te laden en uit te voeren via de ML Kit-interface. ML Kit biedt een uniforme Input/Output API: ByteBuffer aan invoer, FloatArray/TensorImage aan uitvoer. Dit maakt gebruik van de voordelen van ML Kit (modelbeheer, beeldverwerking, verbinding met CameraX) met aangepaste modellen voor face recognition, object classification, NLP en andere.
Model laden — plaats het .tflite-bestand in assets/ (Android) of bundle (iOS) en laad het via CustomModelDownloadConditions of Firebase Model Manager. Gebruik voor het downloaden van grote modellen (5+ MB) downloadvoorwaarden: Wi-Fi, opgeladen, op de achtergrond. Google raadt aan het model te laden bij de eerste start van de app, niet op het moment van eerste gebruik.
// Aangepast TFLite-model laden
val conditions = CustomModelDownloadConditions.Builder()
.requireWifi()
.build()
val remoteModel = CustomRemoteModel.Builder("my_model")
.setRemoteModelName("my_model_v2")
.build()
remoteModel.download(conditions)
.addOnSuccessListener { /* model ready */ }
.addOnFailureListener {
// Gebruik meegeleverd model uit assets
}
Optimalisatie van aangepaste modellen: gebruik TFLite Converter met delegate-compatibiliteit. Kwantiseer het model (INT8) voor maximale prestaties — dit verkleint het model 4x en versnelt inferentie 2–3x via XNNPACK Delegate. ML Kit Custom Model API ondersteunt Dynamic Shape (batch = 1), Image Input (UInt8, Float32) en Tensor Output.
Veelgestelde vragen
ML Kit — is een SDK van Google met kant-en-klare ML-modellen voor Android en iOS. Bevat API's voor tekstherkenning (OCR), gezichtsdetectie, barcodescannen, objectherkenning, posebepaling, vertaling en segmentatie. Werkt op het apparaat, vereist geen internet. Wordt verbonden via Google Play Services (Android) of CocoaPods (iOS) minimaal — met één regel afhankelijkheid.
ML Kit — een hoogwaardige SDK met kant-en-klare API's voor specifieke taken (tekst, gezichten, codes). TensorFlow Lite — een laagwaardige runtime voor het uitvoeren van alle TFLite-modellen. ML Kit bevat TFLite onder de motorkap, maar biedt kant-en-klare code en optimalisaties voor standaardtaken. Als u tekst moet herkennen — ML Kit (5 regels code). Als u uw eigen neuraal netwerk heeft — TFLite (20+ regels).
Ja, alle belangrijke ML Kit API's (Text Recognition, Face Detection, Barcode Scanning, Object Detection, Pose Detection, Image Labeling) werken volledig on-device zonder internetverbinding na initiële download van het model. Cloud API (Cloud Vision, Natural Language) — optioneel en vereisen internet. Voor downloaded-modellen is internet alleen nodig bij de eerste download van het model.
Ja, ML Kit ondersteunt iOS volledig via CocoaPods of Swift Package Manager. De API's zijn vergelijkbaar met de Android-versie. Voor iOS gebruikt ML Kit Vision Framework en Core ML onder de motorkap — modellen worden uitgevoerd op Apple Neural Engine (A12+). ML Kit op iOS werkt met UIImage, CVPixelBuffer en CMSampleBuffer. Ondersteuning voor iOS 12+ en Xcode 15+.
Ja, de on-device API's van ML Kit zijn volledig gratis, zonder limieten op het aantal verzoeken. Cloud API (via Firebase) — betaald na overschrijding van de gratis limiet ($200/maand gratis). On-device modellen vereisen geen Firebase-account — ML Kit werkt zelfstandig via Google Play Services. Voor commerciële apps is on-device ML Kit een veilige keuze met nul operationele kosten.
Samenvatting
We ontwikkelen een mobiele applicatie turnkey
IT Sectr creëert sinds 2017 iOS- en Android-applicaties voor startups en bedrijven. We adviseren u en stellen de beste oplossing voor.
Lees ook