Barcode Scanning ist eine Technologie zum Lesen und Decodieren von Barcodes mit der Kamera eines mobilen Geräts. Im Gegensatz zu Laserscannern, die spezielle Hardware benötigen, funktionieren kamerabasierte Scanner auf jedem Smartphone mit Kamera. In der mobilen Entwicklung wird Barcode Scanning über ML Kit Barcode Scanning (Google), AVFoundation (Apple), ZXing (Open-Source) oder Scandit (kommerzielles SDK) implementiert. Laut Google ML Kit, 2025 verarbeitet die Bibliothek täglich über 2 Milliarden Scans mit einer Genauigkeit von 98,5%.
Wichtigste Punkte
Barcode Scanning ist der Prozess der optischen Erkennung von Barcodes mit einer Kamera. Der Algorithmus erfasst ein Bild, findet den Code (Lokalisierung), decodiert ihn (Datenextraktion) und gibt einen String-Wert zurück. Moderne SDKs scannen Codes jeder Ausrichtung, Größe und Beleuchtung — der Benutzer muss nur die Kamera darauf richten.
Barcode-Formate werden in zwei Gruppen unterteilt: 1D (linear) — EAN-13, UPC-A, Code 128, Code 39, ITF, Codabar — enthalten bis zu 20–30 Zeichen, werden für Produkte und Logistik verwendet; 2D (Matrix) — QR-Code, Data Matrix, PDF417, Aztec — enthalten bis zu 3000+ Zeichen, werden für Links, Tickets, Dokumente verwendet. ML Kit unterstützt 14 Formate — alle gängigen 1D- und 2D-Formate.
Data Matrix ist ein 2D-Code ähnlich wie QR, aber kompakter. Es wird in der Industrie (Teilekennzeichnung), elektronischen Tickets (IATA BCBP), medizinischen Proben verwendet. Data Matrix kann bis zu 2335 Zeichen enthalten und auf sehr kleine Oberflächen gedruckt werden — bis zu 2x2 mm. Im Gegensatz zu QR hat Data Matrix keine Finder-Patterns (Quadrate in den Ecken) und erfordert eine präzisere Kamerakalibrierung.
| Format | Typ | Max. Daten | Anwendung |
|---|---|---|---|
| EAN-13 | 1D | 13 Ziffern | Einzelhandelsprodukte |
| QR-Code | 2D | 4296 Zeichen | Links, Zahlungen, Tickets |
| Data Matrix | 2D | 2335 Zeichen | Industrie, Medizin |
| PDF417 | 2D | 2710 Zeichen | Dokumente, Bordkarten |
| Code 128 | 1D | 80 Zeichen | Logistik, Transport |
QR-Code ist das beliebteste 2D-Format in mobilen Anwendungen. Es enthält URLs, Text, vCard, WiFi-Konfiguration, Zahlungsinformationen (UPI, SBP). QR-Code hat 40 Versionen (von 21x21 bis 177x177 Modulen) und 4 Fehlerkorrekturstufen (L: 7%, M: 15%, Q: 25%, H: 30%). Für mobile Apps verwenden Sie Version 2–10 (25x25 – 57x57 Module) — der optimale Kompromiss zwischen Größe und Daten.
ML Kit Barcode Scanning ist das primäre SDK für Android-Anwendungen. ML Kit findet automatisch alle Codes im Bild (im Gegensatz zu ZXing, das den Code in der Mitte benötigt). Die API gibt ein Barcode-Objekt mit rawValue (Textinhalt), format (Code-Typ), boundingBox und cornerPoints (4 Eckpunkte des Codes) zurück. ML Kit unterstützt Single-Scan (ein Frame) und Continuous-Scan (Videostream).
Multi-Barcode-Modus — ML Kit kann mehrere Codes in einem Bild erkennen. Aktivieren Sie ihn über BarcodeScannerOptions.Builder(). Im Multi-Modus wird eine Liste von Barcodes zurückgegeben. Verwenden Sie ihn für Inventur (Scannen von Produktchargen), Erkennung mehrerer QR-Codes auf einem Tisch. Multi-Barcode ist standardmäßig deaktiviert — aktivieren Sie ihn nur bei Bedarf, da er das Scannen um 20–30% verlangsamt.
// ML Kit Barcode Scanning multi-code mode
val options = BarcodeScannerOptions.Builder()
.setBarcodeFormats(
Barcode.FORMAT_QR_CODE,
Barcode.FORMAT_EAN_13,
Barcode.FORMAT_DATA_MATRIX
)
.enableAllPotentialBarcodes()
.build()
val scanner = BarcodeScanning.getClient(options)
scanner.process(inputImage)
.addOnSuccessListener { barcodes ->
barcodes.forEach { barcode ->
val type = barcode.valueType // URL, TEXT, PHONE...
val rawValue = barcode.rawValue
val displayValue = barcode.displayValue
}
}
Formatfilterung — obligatorische Optimierung. setBarcodeFormats() schränkt die Formate ein, nach denen ML Kit sucht. Wenn die App nur QR-Codes scannt — geben Sie FORMAT_QR_CODE an. Dies beschleunigt das Scannen um das 2–3-fache, da Decodierungsalgorithmen für andere Formate ausgeschlossen werden. Für Einzelhandelsscanner — FORMAT_EAN_13 | FORMAT_UPC_A. Für Logistik — FORMAT_CODE_128 | FORMAT_CODE_39 | FORMAT_PDF417.
ZXing (Zebra Crossing) ist eine Open-Source-Bibliothek in Java (Android) mit Ports für Swift, React Native, Flutter. ZXing war vor ML Kit der De-facto-Standard für das Scannen. Es unterstützt alle gängigen Formate, funktioniert auf jedem Gerät (einschließlich Huawei ohne Google Play) und benötigt keine Google Play Services. Nachteile: 2–3 mal langsamer als ML Kit, findet keine Codes am Bildrand, kein Multi-Barcode.
ML Kit vs ZXing — ML Kit gewinnt bei Geschwindigkeit, Genauigkeit und UX. ML Kit erkennt einen Code, selbst wenn er nur 10% des Bildes einnimmt und in einer Ecke ist. ZXing erfordert, dass der Code 50–80% des Bildes einnimmt und in der Mitte ist. ML Kit verwendet ein neuronales Netz (MobileNetV2-SSD) zur Code-Lokalisierung, ZXing verwendet klassische Binarisierung und Finder-Pattern-Suche. Laut Google (2025) erreicht ML Kit eine Genauigkeit von 98,5% gegenüber 92% bei ZXing.
| Eigenschaft | ML Kit | ZXing |
|---|---|---|
| Genauigkeit | 98,5% | 92% |
| Geschwindigkeit | 15–30 ms | 50–150 ms |
| Multi-Code | Ja | Nein |
| Google Play | Erforderlich | Nicht erforderlich |
| Code in Ecke | Erkennt | Erkennt nicht |
Wann ZXing wählen: wenn die App auf Huawei-Geräten (ohne Google Play Services), auf Android Go (begrenzter Speicher) laufen muss oder ein vollständig offline Betrieb ohne Play Services erforderlich ist. In allen anderen Fällen ist ML Kit schneller, genauer, einfacher zu integrieren und bietet durch Multi-Code und Kantenerkennung eine bessere UX.
// ZXing Core: simple scanner
val reader = MultiFormatReader()
val bitmap = BitmapFactory.decodeResource(resources, R.drawable.test)
val source = RGBLuminanceSource(bitmap)
val binarizer = HybridBinarizer(source)
val binaryBitmap = BinaryBitmap(binarizer)
try {
val result = reader.decode(binaryBitmap)
Log.d("ZXing", result.text)
} catch (e: NotFoundException) {
// Code not found
}
Scandit als Alternative — ein kommerzielles SDK mit 99,5% Genauigkeit und 10–20 ms Geschwindigkeit. Es verwendet eigene neuronale Netze und benötigt keine Google Play Services. Preis — ab 400 $/Monat (2019). Scandit dominiert im Einzelhandel und in der Logistik (Walmart, FedEx). Für die meisten mobilen Apps ist ML Kit ausreichend — Scandit ist nur für Enterprise-Aufgaben mit hohem Scanvolumen gerechtfertigt.
Apple AVFoundation bietet natives Barcode Scanning über AVCaptureMetadataOutput. Ab iOS 7 unterstützt AVFoundation QR-Code-Scannen, ab iOS 8 — alle Formate EAN, UPC, Code 128, PDF417. AVFoundation erfordert keine zusätzlichen SDKs — es ist Teil von Foundation. Das Scannen läuft über Apple Neural Engine auf A12+ — Geschwindigkeit 10–20 ms bei minimalem Stromverbrauch.
Vorteile von AVFoundation: keine Abhängigkeiten, automatische Handhabung der Kameraausrichtung, integrierte Unterstützung für Hell/Dunkel-Modus, Hintergrundbetrieb (mit background modes). AVFoundation stellt automatisch Autofokus und Belichtung für das Scannen ein — der Entwickler muss nur das captureOutput-Delegat abonnieren. Nachteil: weniger Einstellungen als ML Kit — Multi-Barcode oder Formatfilterung können nicht aktiviert werden.
import AVFoundation
class BarcodeScannerController: UIViewController, AVCaptureMetadataOutputObjectsDelegate {
private var captureSession: AVCaptureSession!
override func viewDidLoad() {
let metadataOutput = AVCaptureMetadataOutput()
captureSession.addOutput(metadataOutput)
metadataOutput.setMetadataObjectsDelegate(self, queue: .main)
metadataOutput.metadataObjectTypes = [.qr, .ean13, .code128]
}
func metadataOutput(_ output: AVCaptureMetadataOutput,
didOutput objects: [AVMetadataObject],
from connection: AVCaptureConnection) {
guard let code = objects.first as? AVMetadataMachineReadableCodeObject else { return }
print(code.stringValue ?? "")
}
}
ML Kit vs AVFoundation auf iOS: ML Kit bietet mehr Kontrolle — Formate können konfiguriert, Multi-Barcode aktiviert, Codes nach Vertrauenswürdigkeit gefiltert werden. AVFoundation ist auf älteren Geräten schneller (weniger Overhead), unterstützt aber Data Matrix, Aztec, PDF417 auf iOS < 15 nicht. Für iOS 15+ ist ML Kit vorzuziehen. Für iOS 12–14 verwenden Sie AVFoundation + Fallback auf ML Kit für nicht unterstützte Formate.
Scandit ist ein kommerzielles SDK für Barcode Scanning mit Fokus auf Einzelhandel, Logistik und Gesundheitswesen. Scandit verwendet eigene neuronale Netze, die mit über 10 Millionen Barcode-Bildern unter verschiedenen Bedingungen trainiert wurden: Spiegelungen, Beschädigungen, schwaches Licht, Neigung bis zu 45°, Reflexionen. Scandit scannt Codes aus Entfernungen von bis zu 15 Metern (für PDF417 in Lagern) und auf gekrümmten Oberflächen (Dosen, Flaschen).
Scandit-Funktionen: SparkScan (Einzelscan für schnelles sequenzielles Scannen), MatrixScan (Multi-Barcode + AR-Hervorhebung gescannter Artikel), PickList (Produktsuche per Barcode mit Bestätigung). Scandit unterstützt über 50 Formate, einschließlich GS1 DataBar und Composite Codes. Geschwindigkeit — 10–15 ms pro Code. Genauigkeit — 99,5% bei Standardbeleuchtung, 97% bei schlechtem Licht.
// Scandit MatrixScan (SDK license required)
val barcodeTracking = BarcodeTracking
.forDataCaptureContext(context)
.addListener(this)
.build()
barcodeTracking.addSessionListener { session, _ ->
session.trackedBarcodes.forEach { (trackingId, barcode) ->
val data = barcode.data
val symbolCount = barcode.symbolCount
}
}
Scandit vs ML Kit: Scandit ist kostenpflichtig (ab 400 $/Monat), bietet aber Enterprise-Funktionen: SparkScan (Hardware-Taste auf Unternehmensgeräten), MatrixScan (AR-Overlay zur Hervorhebung), PickList (Sprachbestätigung). ML Kit ist kostenlos und für 90% der mobilen Apps ausreichend: Laden-Scanner, QR-Reader, Ticket-Apps. Scandit ist nur für Logistikterminals mit Zebra-/Honeywell-Geräten gerechtfertigt.
Barcode Scanning Optimierung umfasst Kameraeinstellungen, Auflösung und SDK-Konfiguration. Die Grundregel: weniger Pixel — schnelleres Scannen. Für ML Kit ist die optimale Auflösung 480p (640x480) für Video und 720p (1280x720) für Fotos. Eine Erhöhung auf 1080p verlangsamt die Verarbeitung um das 2–3-fache ohne Genauigkeitssteigerung. Verwenden Sie CameraX mit ImageAnalysis für automatische Auflösungsverwaltung.
Fokus und Belichtung sind entscheidend für die Scanqualität. ML Kit konfiguriert die Kamera nicht automatisch — der Entwickler muss kontinuierlichen Autofokus und kontinuierliche Belichtung über Camera2 oder CameraX aktivieren. Ohne Autofokus reduzieren unscharfe Codes die Genauigkeit auf 60–70%. Für Nahbereich-Scans (5–15 cm) verwenden Sie den Makromodus der Kamera, falls verfügbar.
Auto-Zoom und Finder-Overlay — UX-Verbesserungen für den Benutzer. Auto-Zoom vergrößert den Code bei Erkennung (wie in der Google Lens-Kamera). Implementiert durch Analyse des boundingBox des Codes und Skalierung der Vorschau. Das Finder-Overlay ist ein grafischer Rahmen, der anzeigt, wohin die Kamera gerichtet werden muss. Für eine bessere UX zeigen Sie den boundingBox des gefundenen Codes an und heben Sie ihn bei erfolgreicher Decodierung grün hervor.
// CameraX + ML Kit: optimized scanner
class BarcodeAnalyzer(private val scanner: BarcodeScanner) :
ImageAnalysis.Analyzer {
override fun analyze(image: ImageProxy) {
if (image.image == null) { image.close(); return }
val mediaImage = InputImage.fromMediaImage(image.image, image.imageInfo.rotationDegrees)
scanner.process(mediaImage)
.addOnSuccessListener { barcodes ->
barcodes.firstOrNull()?.let {
// Haptic + sound + code highlight
}
}
.addOnCompleteListener { image.close() }
}
}
Benutzerfeedback: Vibration (HapticFeedback), Ton (MediaActionSound), visuelle Hervorhebung (Canvas/Overlay). Fügen Sie nach einem erfolgreichen Scan eine Verzögerung von 1000–1500 ms (Drosselung) vor dem nächsten Scan hinzu — dies verhindert doppelte Auslösungen auf demselben Code. Für sequenzielles Scannen (Batch-Scanning) verwenden Sie den SparkScan-Ansatz: jeder Scan wird aufgezeichnet und bestätigt, mit einer Verzögerung von 300–500 ms.
Häufig gestellte Fragen
ML Kit Barcode Scanning ist die beste Wahl für Android: kostenlos, 98,5% Genauigkeit, Multi-Code, Erkennung in jedem Bildbereich. Wenn die App auf Huawei-Geräten ohne Google Play laufen muss — verwenden Sie ZXing (Open-Source, geringere Genauigkeit). Für Enterprise-Logistik — Scandit (kostenpflichtig, 99,5% Genauigkeit, SparkScan). Für einen einfachen QR-Scanner reichen ZXing oder ML Kit.
ML Kit Barcode Scanning unterstützt 14 Formate: 1D — EAN-8, EAN-13, UPC-A, UPC-E, Code 39, Code 93, Code 128, ITF, Codabar; 2D — QR-Code, Data Matrix, PDF417, Aztec. GS1 DataBar (RSS-14, RSS-Expanded) wird ebenfalls unterstützt. Die vollständige Liste finden Sie in der Dokumentation zu Barcode.FORMAT_*. Verwenden Sie setBarcodeFormats(), um Formate einzuschränken — dies beschleunigt das Scannen um das 2–3-fache.
Reduzieren Sie die Kameraauflösung auf 480p (640x480), aktivieren Sie kontinuierlichen Autofokus, schränken Sie die Formate auf die benötigten ein (setBarcodeFormats), verwenden Sie den FAST-Leistungsmodus. Geben Sie bei ML Kit nur die erforderlichen Formate an — das Ausschließen zusätzlicher Formate beschleunigt das Scannen um das 2–3-fache. Verwenden Sie bei ZXing HybridBinarizer statt GlobalHistogramBinarizer (20% schneller). Geben Sie bei AVFoundation metadataObjectTypes an.
Ja, alle lokalen Barcode Scanning SDKs (ML Kit, ZXing, AVFoundation, Scandit) arbeiten vollständig offline. ML Kit benötigt nur beim ersten Herunterladen des Modells Internet (heruntergeladener Modus), danach wird das Modell auf dem Gerät zwischengespeichert. AVFoundation ist in iOS integriert und benötigt kein Internet. ZXing ist ohne Play Services vollständig offline. Cloud-Scannen (Google Cloud Vision) wird in mobilen Apps nicht verwendet.
ML Kit und Scandit verfügen über eine integrierte Korrektur für beschädigte Codes dank neuronaler Netzwerkalgorithmen. ML Kit stellt bis zu 30% eines beschädigten Codes (Kratzer, Risse) wieder her. Scandit — bis zu 50% dank Training mit defekten Codes. ZXing stellt beschädigte Codes praktisch nicht wieder her — es benötigt ein klares Bild. Verwenden Sie zum Scannen defekter Codes Scandit oder ML Kit mit dem ACCURATE-Leistungsmodus.
Zusammenfassung
Wir entwickeln eine mobile Applikation schlüsselfertig
IT Sectr entwickelt seit 2017 iOS- und Android-Apps für Startups und Unternehmen. Wir beraten Sie und schlagen die beste Lösung vor.
Lesen Sie auch