Barcode Scanning v aplikacích — co to je, typy kódů a ML Kit

Autor: IT Sectr Publikováno: 2026-07-18 Doba čtení: 10 min

Barcode Scanning — technologie čtení a dekódování čárových kódů pomocí kamery mobilního zařízení. Na rozdíl od laserových skenerů, které vyžadují specializované vybavení, fungují kamerové skenery na jakémkoli smartphonu s fotoaparátem. V mobilním vývoji je Barcode Scanning implementován přes ML Kit Barcode Scanning (Google), AVFoundation (Apple), ZXing (open-source) nebo Scandit (komerční SDK). Podle údajů Google ML Kit, 2025 knihovna zpracuje 2+ miliardy skenování denně s přesností 98.5%.

Hlavní body

  • Barcode Scanning — čtení jednorozměrných a dvourozměrných kódů fotoaparátem
  • ML Kit Barcode — nejpřesnější SDK (98.5%), multi-kód, všechny formáty
  • Formáty — EAN, UPC, QR, Data Matrix, PDF417, Aztec, Code 128
  • Real-time — skenování až 60 FPS s CameraX a AVFoundation
  • On-device — všechny výpočty lokálně, bez internetu

Co je Barcode Scanning: principy a formáty

Barcode Scanning — proces optického rozpoznávání čárových kódů pomocí kamery. Algoritmus zachytí obraz, najde v něm kód (lokalizace), dekóduje ho (extrakce dat) a vrátí řetězcovou hodnotu. Moderní SDK skenují kódy v jakékoli orientaci, velikosti a při jakémkoli osvětlení — stačí, aby uživatel namířil kameru.

Formáty čárových kódů se dělí do dvou skupin: 1D (lineární) — EAN-13, UPC-A, Code 128, Code 39, ITF, Codabar — obsahují až 20–30 znaků, používají se pro zboží a logistiku; 2D (maticové) — QR Code, Data Matrix, PDF417, Aztec — obsahují až 3000+ znaků, používají se pro odkazy, vstupenky a dokumenty. ML Kit podporuje 14 formátů — všechny běžné 1D a 2D.

Data Matrix — dvourozměrný kód podobný QR, ale kompaktnější. Používá se v průmyslu (označování dílů), elektronických vstupenkách (IATA BCBP), zdravotnických vzorcích. Data Matrix může obsahovat až 2335 znaků a nanáší se na velmi malé plochy — až 2x2 mm. Na rozdíl od QR nemá Data Matrix finder patterns (čtverce v rozích) a vyžaduje přesnější kalibraci kamery.

FormátTypMax. datPoužití
EAN-131D13 číslicZboží v obchodech
QR Code2D4296 znakůOdkazy, platby, vstupenky
Data Matrix2D2335 znakůPrůmysl, zdravotnictví
PDF4172D2710 znakůDokumenty, palubní vstupenky
Code 1281D80 znakůLogistika, doprava

QR Code — nejpopulárnější dvourozměrný formát v mobilních aplikacích. Obsahuje URL, text, vCard, konfiguraci WiFi, platební informace (UPI, SBP). QR Code má 40 verzí (od 21x21 do 177x177 modulů) a 4 úrovně opravy chyb (L: 7%, M: 15%, Q: 25%, H: 30%). Pro mobilní aplikace používejte verzi 2–10 (25x25 – 57x57 modulů) — optimální rovnováha velikosti a dat.

ML Kit Barcode Scanning: integrace a nastavení

ML Kit Barcode Scanning — hlavní SDK pro aplikace na Androidu. ML Kit sám najde všechny kódy na obrázku (na rozdíl od ZXing, který vyžaduje, aby kód byl uprostřed). API vrací objekt Barcode s rawValue (textový obsah), format (typ kódu), boundingBox a cornerPoints (4 body rohů kódu). ML Kit podporuje single-scan (jeden snímek) a continuous-scan (videostream).

Multi-barcode mode — ML Kit dokáže detekovat více kódů na jednom obrázku. Zapněte přes BarcodeScannerOptions.Builder(). V multi režimu se vrací seznam Barcode. Použijte pro inventuru (skenování balíku zboží), rozpoznávání více QR kódů na stole. Ve výchozím nastavení je multi-barcode vypnutý — zapněte jen pokud je potřeba, protože to zpomaluje skenování o 20–30%.

kotlin
// ML Kit Barcode Scanning multi-code režim
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
        }
    }

Filtrace formátů — povinná optimalizace. setBarcodeFormats() omezuje formáty, které ML Kit bude hledat. Pokud aplikace skenuje pouze QR kódy — uveďte FORMAT_QR_CODE. Tím se skenování zrychlí 2–3× vyloučením dekódovacích algoritmů jiných formátů. Pro obchodní skener — FORMAT_EAN_13 | FORMAT_UPC_A. Pro logistiku — FORMAT_CODE_128 | FORMAT_CODE_39 | FORMAT_PDF417.

ZXing vs ML Kit: srovnání knihoven

ZXing (Zebra Crossing) — open-source knihovna v Javě (Android) s porty pro Swift, React Native, Flutter. ZXing — de facto standard pro skenování před příchodem ML Kit. Podporuje všechny oblíbené formáty, funguje na jakémkoli zařízení (včetně Huawei bez Google Play), nevyžaduje Google Play Services. Nevýhody: 2–3× pomalejší než ML Kit, nenajde kódy na okraji snímku, nemá multi-barcode.

ML Kit vs ZXing — ML Kit vyhrává v rychlosti, přesnosti a UX. ML Kit detekuje kód, i když zabírá 10% snímku a je v rohu. ZXing vyžaduje, aby kód zabíral 50–80% snímku a byl uprostřed. ML Kit používá neuronovou síť (MobileNetV2-SSD) pro lokalizaci kódu, ZXing — klasickou binarizaci a hledání finder patterns. Podle údajů Googlu (2025) dosahuje ML Kit přesnosti 98.5% oproti 92% u ZXing.

CharakteristikaML KitZXing
Přesnost98.5%92%
Rychlost15–30 ms50–150 ms
Multi-kódAnoNe
Google PlayVyžaduje seNevyžaduje se
Kód v rohuDetekujeNedetekuje

Kdy zvolit ZXing: pokud aplikace musí fungovat na zařízeních Huawei (bez Google Play Services), na Android Go (omezená paměť), nebo pokud je potřeba plně offline provoz bez Play Services. Ve všech ostatních případech je ML Kit rychlejší, přesnější, jednodušší na integraci a poskytuje lepší UX díky multi-kódu a detekci na okraji.

kotlin
// ZXing Core: jednoduchý skener
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) {
    // Kód nenalezen
}

Scandit jako alternativa — komerční SDK s přesností 99.5% a rychlostí 10–20 ms. Používá vlastní neuronové sítě a nevyžaduje Google Play Services. Cena — od $400/měsíc (2019). Scandit dominuje v maloobchodě a logistice (Walmart, FedEx). Pro většinu mobilních aplikací ML Kit stačí — Scandit je opodstatněný jen pro enterprise úlohy s high-volume skenováním.

Apple AVFoundation: nativní skener na iOS

Apple AVFoundation poskytuje nativní Barcode Scanning přes AVCaptureMetadataOutput. Od iOS 7 podporuje AVFoundation skenování QR kódů, od iOS 8 — všechny formáty EAN, UPC, Code 128, PDF417. AVFoundation nevyžaduje instalaci dalších SDK — je součástí Foundation. Skenování funguje přes Apple Neural Engine na A12+ — rychlost 10–20 ms s minimální spotřebou energie.

Výhody AVFoundation: nulová závislost, automatické zpracování orientace kamery, vestavěná podpora light/dark mode, práce na pozadí (s background modes). AVFoundation automaticky nastaví autofocus a expozici pro skenování — vývojář se jen musí přihlásit k delegátovi captureOutput. Nevýhoda: méně nastavení než v ML Kit — nelze zapnout multi-barcode ani filtr formátů.

swift
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 na iOS: ML Kit dává více kontroly — lze nastavit formáty, zapnout multi-barcode, filtrovat kódy podle confidence. AVFoundation — rychlejší na starších zařízeních (menší režie), ale nepodporuje Data Matrix, Aztec, PDF417 na iOS < 15. Pro iOS 15+ je výhodnější ML Kit. Pro iOS 12–14 použijte AVFoundation + fallback na ML Kit pro nepodporované formáty.

Scandit: komerční řešení pro enterprise

Scandit — komerční SDK pro Barcode Scanning se zaměřením na maloobchod, logistiku a zdravotnictví. Scandit používá vlastní neuronové sítě, trénované na 10+ milionech obrázků čárových kódů v různých podmínkách: odlesky, poškození, nízké osvětlení, náklon až 45°, odrazy. Scandit skenuje kódy na vzdálenost až 15 metrů (pro PDF417 ve skladech) a na kulatých plochách (plechovky, lahve).

Možnosti Scandit: SparkScan (single-scan pro rychlé sekvenční skenování), MatrixScan (multi-barcode + AR zvýraznění naskenovaných), PickList (hledání zboží podle čárového kódu s potvrzením). Scandit podporuje 50+ formátů včetně GS1 DataBar a Composite Codes. Rychlost — 10–15 ms na kód. Přesnost — 99.5% při standardním osvětlení, 97% při špatném.

kotlin
// Scandit MatrixScan (vyžadována SDK licence)
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 je placený ($400+/měsíc), ale poskytuje enterprise funkce: SparkScan (hardwarové tlačítko na firemních zařízeních), MatrixScan (AR overlay pro zvýraznění), PickList (hlasové potvrzení). ML Kit je zdarma a stačí pro 90% mobilních aplikací: obchodní skenery, QR čtečky, vstupenkové aplikace. Scandit je opodstatněný jen pro logistické terminály se zařízeními Zebra/Honeywell.

Optimalizace skenování: rychlost a přesnost

Optimalizace Barcode Scanning zahrnuje nastavení kamery, rozlišení a SDK. Základní pravidlo: méně pixelů — rychlejší skenování. Pro ML Kit je optimální rozlišení 480p (640x480) pro video a 720p (1280x720) pro foto. Zvýšení na 1080p zpomaluje zpracování 2–3× bez nárůstu přesnosti. Použijte CameraX s ImageAnalysis pro automatické řízení rozlišení.

Zaostření a expozice jsou kritické pro kvalitu skenování. ML Kit nenastavuje kameru automaticky — vývojář musí zapnout continuous auto-focus a continuous auto-exposure přes Camera2 nebo CameraX. Bez autofokusu rozmazané kódy snižují přesnost na 60–70%. Pro skenování zblízka (5–15 cm) použijte macro režim kamery, pokud je dostupný.

Auto-zoom a finder overlay — uživatelská vylepšení UX. Auto-zoom přiblíží kód při jeho detekci (jako v kameře Google Lens). Realizuje se analýzou boundingBox kódu a zoomem náhledu. Finder overlay — grafický rámeček ukazující, kam namířit kameru. Pro lepší UX zobrazujte boundingBox nalezeného kódu a zvýrazňujte ho zeleně při úspěšném dekódování.

kotlin
// CameraX + ML Kit: optimalizovaný skener
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 {
                    // Haptika + zvuk + zvýraznění kódu
                }
            }
            .addOnCompleteListener { image.close() }
    }
}

Zpětná vazba uživateli: vibrace (HapticFeedback), zvuk (MediaActionSound), vizuální zvýraznění (Canvas/Overlay). Po úspěšném skenování přidejte prodlevu 1000–1500 ms (throttling) před dalším skenem — to zabrání duplikování spuštění na stejném kódu. Pro sekvenční skenování (skenování balíku zboží) použijte přístup SparkScan: každý sken se zaznamená a ozve se zvukem, prodleva 300–500 ms.

Často kladené dotazy

Které SDK pro skenování čárových kódů je nejlepší na Androidu?

ML Kit Barcode Scanning — nejlepší volba pro Android: zdarma, 98.5% přesnost, multi-kód, detekce na jakékoli části snímku. Pokud aplikace musí fungovat na zařízeních Huawei bez Google Play — použijte ZXing (open-source, nižší přesnost). Pro enterprise logistiku — Scandit (placený, 99.5% přesnost, SparkScan). Pro jednoduchý QR skener stačí ZXing nebo ML Kit.

Jaké formáty čárových kódů podporuje ML Kit?

ML Kit Barcode Scanning podporuje 14 formátů: 1D — EAN-8, EAN-13, UPC-A, UPC-E, Code 39, Code 93, Code 128, ITF, Codabar; 2D — QR Code, Data Matrix, PDF417, Aztec. Podporován je také GS1 DataBar (RSS-14, RSS-Expanded). Úplný seznam — v dokumentaci Barcode.FORMAT_*. Pro omezení formátů použijte setBarcodeFormats() — to urychlí skenování 2–3×.

Jak urychlit skenování čárových kódů?

Snižte rozlišení kamery na 480p (640x480), zapněte continuous auto-focus, omezte formáty na potřebné (setBarcodeFormats), použijte FAST performance mode. Pro ML Kit uveďte pouze potřebné formáty — vyloučení nadbytečných formátů urychlí skenování 2–3×. Pro ZXing použijte HybridBinarizer místo GlobalHistogramBinarizer (rychlejší o 20%). Pro AVFoundation — uveďte metadataObjectTypes.

Funguje skenování čárových kódů bez internetu?

Ano, všechna lokální Barcode Scanning SDK (ML Kit, ZXing, AVFoundation, Scandit) fungují zcela offline. ML Kit vyžaduje internet pouze při prvním stažení modelu (downloaded mode), poté je model uložen v mezipaměti zařízení. AVFoundation — vestavěno do iOS, nevyžaduje internet. ZXing — plně offline bez Play Services. Cloudové skenování (Google Cloud Vision) se v mobilních aplikacích nepoužívá.

Lze skenovat poškozené nebo rozmazané čárové kódy?

ML Kit a Scandit mají vestavěnou korekci poškozených kódů díky neuronovým algoritmům. ML Kit obnoví až 30% poškozeného kódu (škrábance, přerušení). Scandit — až 50% díky trénování na vadných kódech. ZXing poškozené kódy prakticky neobnovuje — vyžaduje ostrý obraz. Pro skenování vadných kódů použijte Scandit nebo ML Kit s ACCURATE performance mode.

Shrnutí

  • Barcode Scanning — detekce a dekódování 1D/2D kódů fotoaparátem smartphonu
  • ML Kit — 98.5% přesnost, multi-kód, detekce na jakékoli části snímku, zdarma
  • ZXing — open-source, kompatibilita se všemi zařízeními, 92% přesnost
  • AVFoundation — nativní iOS skener, vestavěný v systému (iOS 7+)
  • Scandit — enterprise SDK (99.5%), SparkScan, MatrixScan, od $400/měsíc
  • Optimalizace — 480p rozlišení, autofokus, omezení formátů, Haptic feedback
  • Všechny formáty — EAN, UPC, QR, Data Matrix, PDF417, Aztec, Code 128

Vyvineme mobilní aplikaci na klíč

IT Sectr vytváří aplikace pro iOS a Android pro startupy a podniky od roku 2017. Poradíme vám a navrhneme nejlepší řešení.

Prodiskutovat projekt

Přečtěte si také