Barcode Scanning alkalmazásokban — mi ez, kódtípusok és ML Kit

Szerző: IT Sectr Megjelenés: 2026-07-18 Olvasási idő: 10 perc

Barcode Scanning — a vonalkódok mobileszköz kamerájával történő olvasásának és dekódolásának technológiája. Ellentétben a lázerszkennerekkel, amelyek speciális berendezést igényelnek, a kamerás szkennerek bármely kamerás okostelefonon működnek. A mobilfejlesztésben a Barcode Scanning az ML Kit Barcode Scanning (Google), AVFoundation (Apple), ZXing (open-source) vagy Scandit (kereskedelmi SDK) segítségével valósul meg. A Google ML Kit, 2025 szerint a könyvtár naponta 2+ milliárd szkennelést dolgoz fel 98.5%-os pontossággal.

Főbb pontok

  • Barcode Scanning — egydimenziós és kétdimenziós kódok olvasása kamerával
  • ML Kit Barcode — legpontosabb SDK (98.5%), multi-kód, minden formátum
  • Formátumok — EAN, UPC, QR, Data Matrix, PDF417, Aztec, Code 128
  • Valós idejű — szkennelés akár 60 FPS sebességgel CameraX és AVFoundation segítségével
  • Eszközön — minden számítás lokálisan, internet nélkül

Mi az a Barcode Scanning: elvek és formátumok

Barcode Scanning — a vonalkódok optikai felismerésének folyamata kamerával. Az algoritmus leképezi a képet, megtalálja rajta a kódot (lokalizáció), dekódolja (adatkinyerés) és visszaadja a sztring értéket. A modern SDK-k bármilyen tájolású, méretű és megvilágítású kódokat szkennelnek — a felhasználónak csak a kamerát kell irányítania.

Vonalkód formátumok két csoportra oszthatók: 1D (lineáris) — EAN-13, UPC-A, Code 128, Code 39, ITF, Codabar — legfeljebb 20–30 karaktert tartalmaznak, árukhoz, logisztikához használhatók; 2D (mátrix) — QR Code, Data Matrix, PDF417, Aztec — legfeljebb 3000+ karaktert tartalmaznak, linkekhez, jegyekhez, dokumentumokhoz használhatók. Az ML Kit 14 formátumot támogat — az összes népszerű 1D és 2D formátumot.

Data Matrix — kétdimenziós kód, hasonló a QR-hez, de kompaktabb. Az iparban (alkatrészek jelölése), elektronikus jegyekben (IATA BCBP), orvosi mintákban használják. A Data Matrix legfeljebb 2335 karaktert tartalmazhat és nagyon kicsi felületekre — akár 2x2 mm-esre is felvihető. A QR-től eltérően a Data Matrixnak nincsenek keresőmintái (négyzetek a sarkokban) és precízebb kamera kalibrálást igényel.

FormátumTípusMax. adatAlkalmazás
EAN-131D13 számjegyÁruk boltokban
QR Code2D4296 karakterLinkek, fizetések, jegyek
Data Matrix2D2335 karakterIpar, orvostudomány
PDF4172D2710 karakterDokumentumok, beszállókártyák
Code 1281D80 karakterLogisztika, szállítás

QR Code — a legnépszerűbb kétdimenziós formátum a mobilalkalmazásokban. URL-t, szöveget, vCard-ot, WiFi-konfigurációt, fizetési információkat (UPI, SBP) tartalmaz. A QR Code-nak 40 változata van (21x21-től 177x177 modulig) és 4 hibajavítási szintje (L: 7%, M: 15%, Q: 25%, H: 30%). Mobilalkalmazásokhoz használja a 2–10-es változatot (25x25 – 57x57 modul) — optimális egyensúly a méret és az adatok között.

ML Kit Barcode Scanning: integráció és konfiguráció

ML Kit Barcode Scanning — a fő SDK Android alkalmazásokhoz. Az ML Kit önállóan megtalálja összes kódot a képen (ellentétben a ZXinggel, ami megköveteli, hogy a kód középen legyen). Az API egy Barcode objektumot ad vissza rawValue (szöveges tartalom), formátum (kódtípus), boundingBox és cornerPoints (a kód 4 sarokpontja) értékekkel. Az ML Kit támogatja a single-scan (egy keret) és continuous-scan (videófolyam) módot.

Többkód mód — az ML Kit képes több kódot észlelni egyetlen képen. Aktiválja a BarcodeScannerOptions.Builder() segítségével. Több módban a rendszer egy Barcode listát ad vissza. Használja leltároshoz (árukészlet szkennelése), több QR kód felismeréséhez az asztalon. Alapértelmezetten a többkód mód ki van kapcsolva — csak szükség esetén aktiválja, mert 20–30%-kal lassítja a szkennelést.

kotlin
// ML Kit Barcode Scanning többkód mód
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, SZÖVEG, TELEFON...
            val rawValue = barcode.rawValue
            val displayValue = barcode.displayValue
        }
    }

Formátumszűrés — kötelező optimalizálás. A setBarcodeFormats() korlátozza azokat a formátumokat, amelyeket az ML Kit keresni fog. Ha az alkalmazás csak QR kódokat szkennel — adja meg a FORMAT_QR_CODE értéket. Ez 2–3-szor felgyorsítja a szkennelést a más formátumok dekódoló algoritmusainak kizárásával. Bolti szkennerhez — FORMAT_EAN_13 | FORMAT_UPC_A. Logisztikához — FORMAT_CODE_128 | FORMAT_CODE_39 | FORMAT_PDF417.

\n\n
\n

ZXing vs ML Kit: könyvtárak összehasonlítása

\n

ZXing (Zebra Crossing) — nyílt forráskódú könyvtár Java nyelven (Android) Swift, React Native, Flutter portokkal. A ZXing volt a de facto szabvány a szkennelésben az ML Kit megjelenése előtt. Támogatja az összes népszerű formátumot, bármely eszközön működik (beleértve a Google Play nélküli Huawei-t is), nem igényel Google Play Services-t. Hátrányok: 2–3-szor lassabb mint az ML Kit, nem találja a kódokat a kép szélén, nincs többkód támogatás.

\n

ML Kit vs ZXing — az ML Kit gyorsaságban, pontosságban és UX-ben is felülmúlja a ZXinget. Az ML Kit akkor is érzékeli a kódot, ha az csak a kép 10%-át foglalja el és a sarokban van. A ZXing megköveteli, hogy a kód a kép 50–80%-át foglalja el és középen legyen. Az ML Kit neurális hálózatot (MobileNetV2-SSD) használ a kód lokalizálásához, a ZXing klasszikus binarizációt és keresőminta-keresést. A Google (2025) szerint az ML Kit 98.5%-os pontosságot nyújt a ZXing 92%-ával szemben.

\n\n\n\n\n\n\n\n\n\n\n\n\n
JellemzőML KitZXing
Pontosság98.5%92%
Sebesség15–30 ms50–150 ms
TöbbkódIgenNem
Google PlaySzükségesNem szükséges
Kód a sarokbanÉrzékeliNem érzékeli
\n\n

Mikor válassza a ZXinget: ha az alkalmazásnak Huawei eszközökön (Google Play Services nélkül), Android Go-n (korlátozott memória) kell működnie, vagy ha teljes offline működés szükséges Play Services nélkül. Minden más esetben — az ML Kit gyorsabb, pontosabb, egyszerűbben integrálható és jobb UX-et nyújt a többkódnak és periféria érzékelésnek köszönhetően.

\n\n
kotlin\n
// ZXing Core: egyszerű szkener
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) {
    // A kód nem található
}
\n
\n\n

Scandit mint alternatíva — kereskedelmi SDK 99.5%-os pontossággal és 10–20 ms sebességgel. Saját neurális hálózatokat használ és nem igényel Google Play Services-t. Ár — $400/hónaptól (2019). A Scandit dominál a kiskereskedelemben és a logisztikában (Walmart, FedEx). A legtöbb mobilalkalmazáshoz az ML Kit elegendő — a Scandit csak nagy volumenű vállalati szkennelési feladatokhoz indokolt.

\n
\n\n
\n

Apple AVFoundation: natív szkener iOS-en

\n

Apple AVFoundation natív Barcode Scanning-et biztosít az AVCaptureMetadataOutput segítségével. Az iOS 7-től kezdve az AVFoundation támogatja a QR-kódok szkennelését, iOS 8-tól pedig az összes EAN, UPC, Code 128, PDF417 formátumot. Az AVFoundation nem igényel további SDK-k telepítését — a Foundation része. A szkennelés az Apple Neural Engine-en keresztül működik A12+ processzorokon — sebesség 10–20 ms minimális energiafogyasztással.

\n

AVFoundation előnyei: nulla függőség, automatikus kamera tájolás kezelés, beépített világos/sötét mód támogatás, háttérben történő működés (background modes). Az AVFoundation automatikusan beállítja az autofókuszt és az expozíciót a szkenneléshez — a fejlesztőnek csak a captureOutput delegáltra kell feliratkoznia. Hátrány: kevesebb beállítás mint az ML Kit-ben — nem kapcsolható be a többkód vagy a formátumszűrő.

\n\n
swift\n
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 ?? "")
    }
}
\n
\n\n

ML Kit vs AVFoundation iOS-en: Az ML Kit több vezérlést biztosít — konfigurálhatók a formátumok, bekapcsolható a többkód, szűrhetők a kódok confidence alapján. Az AVFoundation gyorsabb régebbi eszközökön (kevesebb többletterhelés) de nem támogatja a Data Matrix, Aztec, PDF417 formátumokat iOS < 15 esetén. iOS 15+ esetén az ML Kit ajánlott. iOS 12–14 esetén használja az AVFoundation + visszaesést ML Kit-re a nem támogatott formátumokhoz.

\n
\n\n
\n

Scandit: kereskedelmi megoldás vállalatoknak

\n

Scandit — kereskedelmi SDK Barcode Scanning-hez, kiskereskedelemre, logisztikára és egészségügyre fókuszálva. A Scandit saját neurális hálózatokat használ, amelyeket 10+ millió vonalkód képen tanítottak különböző körülmények között: tükröződés, sérülés, gyenge megvilágítás, 45°-os dőlésig, visszaverődés. A Scandit akár 15 méteres távolságból is szkenneli a kódokat (PDF417 raktárakban) és kerek felületeken (dobozok, palackok).

\n

Scandit képességek: SparkScan (single-scan gyors egymás utáni szkenneléshez), MatrixScan (multi-kód + AR kiemelés a beolvasottakhoz), PickList (termék keresése vonalkóddal megerősítéssel). A Scandit 50+ formátumot támogat, beleértve a GS1 DataBar és Composite Codes formátumokat. Sebesség — 10–15 ms kódonként. Pontosság — 99.5% normál megvilágításnál, 97% gyenge fénynél.

\n\n
kotlin\n
// Scandit MatrixScan (SDK licenc szükséges)
val barcodeTracking = BarcodeTracking
    .forDataCaptureContext(context)
    .addListener(this)
    .build()
barcodeTracking.addSessionListener { session, _ ->
    session.trackedBarcodes.forEach { (trackingId, barcode) ->
        val data = barcode.data
        val symbolCount = barcode.symbolCount
    }
}
\n
\n\n

Scandit vs ML Kit: A Scandit fizetős ($400+/hónap), de vállalati funkciókat kínál: SparkScan (hardver gomb vállalati eszközökön), MatrixScan (AR átfedés kiemeléshez), PickList (hangos megerősítés). Az ML Kit ingyenes és elegendő a mobilalkalmazások 90%-a számára: bolt szkennerek, QR olvasók, jegy alkalmazások. A Scandit csak Zebra/Honeywell eszközökkel rendelkező logisztikai terminálokhoz indokolt.

\n
\n\n
\n

Szkenelés optimalizálása: sebesség és pontosság

\n

Barcode Scanning optimalizálása magában foglalja a kamera, felbontás és SDK konfigurálását. Fő szabály: kevesebb pixel — gyorsabb szkennelés. ML Kit esetén az optimális felbontás 480p (640x480) videóhoz és 720p (1280x720) fényképekhez. 1080p-re növelés 2–3-szor lassítja a feldolgozást a pontosság növelése nélkül. Használja a CameraX-et ImageAnalysis-szel az automatikus felbontáskezeléshez.

\n

Fókusz és expozíció kritikus a szkennelés minőségéhez. Az ML Kit nem állítja be automatikusan a kamerát — a fejlesztőnek be kell kapcsolnia a continuous auto-focus és continuous auto-exposure funkciókat a Camera2 vagy CameraX segítségével. Autofókusz nélkül az elmosódott kódok 60–70%-ra csökkentik a pontosságot. Közeli távolságból (5–15 cm) történő szkenneléshez használja a kamera makró módját, ha elérhető.

\n

Auto-zoom és irányút átfedés — UX javítások a felhasználó számára. Az auto-zoom közelíti a kódot annak érzékelésekor (mint a Google Lens kamerában). A kód boundingBox-jának elemzésével és az előnézet méretezésével valósul meg. Az irányút átfedés — grafikus keret, amely megmutatja, hova kell irányítani a kamerát. Jobb UX érdekében jelenítse meg a talált kód boundingBox-ját és emelje ki zölddel sikeres dekódolás után.

\n\n
kotlin\n
// CameraX + ML Kit: optimalizált szkener
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 {
                    // Haptikus + hang + kód kiemelés
                }
            }
            .addOnCompleteListener { image.close() }
    }
}
\n
\n\n

Visszajelzés a felhasználónak: rezgés (HapticFeedback), hang (MediaActionSound), vizuális kiemelés (Canvas/Overlay). Sikeres szkennelés után adjon hozzá 1000–1500 ms késleltetést (throttling) a következő szkennelés előtt — ez megakadályozza a többszörös aktiválódást ugyanazon a kódon. Szekvenciális szkenneléshez (árukészlet szkennelése) használja a SparkScan módszert: minden szkennelés rögzítésre kerül és hangjelzéssel történik, késleltetés 300–500 ms.

\n
\n\n
\n

Gyakori kérdések

\n
\nMelyik SDK a legjobb vonalkód szkenneléshez Androidon?\n
\n

ML Kit Barcode Scanning — a legjobb választás Androidhoz: ingyenes, 98.5% pontosság, többkód, érzékelés a kép bármely részén. Ha az alkalmazásnak Google Play nélküli Huawei eszközökön kell működnie — használja a ZXinget (nyílt forrás, alacsonyabb pontosság). Vállalati logisztikához — Scandit (fizetős, 99.5% pontosság, SparkScan). Egyszerű QR olvasóhoz elegendő a ZXing vagy az ML Kit.

\n
\n
\n
\nMilyen vonalkód formátumokat támogat az ML Kit?\n
\n

ML Kit Barcode Scanning 14 formátumot támogat: 1D — EAN-8, EAN-13, UPC-A, UPC-E, Code 39, Code 93, Code 128, ITF, Codabar; 2D — QR Code, Data Matrix, PDF417, Aztec. Továbbá támogatja a GS1 DataBart (RSS-14, RSS-Expanded). Teljes lista — a Barcode.FORMAT_* dokumentációban. A formátumok korlátozásához használja a setBarcodeFormats() függvényt — ez 2–3-szor felgyorsítja a szkennelést.

\n
\n
\n
\nHogyan gyorsíthatom a vonalkód szkennelést?\n
\n

Csökkentse a kamera felbontását 480p-re (640x480), kapcsolja be a continuous auto-focus-t, korlátozza a formátumokat a szükségesekre (setBarcodeFormats), használja a FAST performance módot. ML Kit esetén csak a szükséges formátumokat adja meg — a felesleges formátumok kizárása 2–3-szor felgyorsítja a szkennelést. ZXing esetén használja a HybridBinarizer-t a GlobalHistogramBinarizer helyett (20%-kal gyorsabb). AVFoundation esetén adja meg a metadataObjectTypes-t.

\n
\n
\n
\nMűködik a vonalkód szkennelés internet nélkül?\n
\n

Igen, az összes helyi Barcode Scanning SDK (ML Kit, ZXing, AVFoundation, Scandit) teljesen offline működik. Az ML Kit csak a modell első letöltésekor igényel internetet (letöltött mód), ezután a modell a gyorsítótárban tárolódik az eszközön. AVFoundation — beépítve iOS-be, nem igényel internetet. ZXing — teljesen offline Play Services nélkül. Felhőalapú szkennelés (Google Cloud Vision) nem használatos mobil alkalmazásokban.

\n
\n
\n
\nLehet szkennelni sérült vagy elmosódott vonalkódokat?\n
\n

Az ML Kit és a Scandit beépített korrekcióval rendelkezik a sérült kódokhoz a neurális hálózati algoritmusoknak köszönhetően. Az ML Kit a sérült kód akár 30%-_t is helyreállítja (karcolások, szakadások). A Scandit — akár 50%-ot a hibás kódokon végzett tanításnak köszönhetően. A ZXing gyakorlatilag nem állítja helyre a sérült kódokat — tiszta képet igényel. Hibás kódok szkenneléséhez használja a Scandit-ot vagy az ML Kit-et ACCURATE performance módban.

\n
\n
\n
\n\n
\n

Összefoglalás

\n
    \n
  • Barcode Scanning — 1D/2D kódok érzékelése és dekódolása okostelefon kamerával
  • \n
  • ML Kit — 98.5% pontosság, többkód, érzékelés a kép bármely részén, ingyenes
  • \n
  • ZXing — nyílt forrás, kompatibilitás bármely eszközzel, 92% pontosság
  • \n
  • AVFoundation — natív iOS szkener, beépítve a rendszerbe (iOS 7+)
  • \n
  • Scandit — vállalati SDK (99.5%), SparkScan, MatrixScan, $400/hónaptól
  • \n
  • Optimalizálás — 480p felbontás, autofókusz, formátum korlátozás, Haptic feedback
  • \n
  • Minden formátum — EAN, UPC, QR, Data Matrix, PDF417, Aztec, Code 128
  • \n
\n
\n\n

Kulcsrakész mobilalkalmazást fejlesztünk

Az IT Sectr 2017 óta készít iOS és Android alkalmazásokat induló vállalkozásoknak és vállalkozásoknak. Tanácsot adunk, és a legjobb megoldást javasoljuk.

Projekt megbeszélése

Olvassa el is