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 — 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átum | Típus | Max. adat | Alkalmazás |
|---|---|---|---|
| EAN-13 | 1D | 13 számjegy | Áruk boltokban |
| QR Code | 2D | 4296 karakter | Linkek, fizetések, jegyek |
| Data Matrix | 2D | 2335 karakter | Ipar, orvostudomány |
| PDF417 | 2D | 2710 karakter | Dokumentumok, beszállókártyák |
| Code 128 | 1D | 80 karakter | Logisztika, 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 — 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.
// 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.
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.
\nML 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| Jellemző | ML Kit | ZXing |
|---|---|---|
| Pontosság | 98.5% | 92% |
| Sebesség | 15–30 ms | 50–150 ms |
| Többkód | Igen | Nem |
| Google Play | Szükséges | Nem szükséges |
| Kód a sarokban | Érzékeli | Nem érzékeli |
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// 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ó
}\nScandit 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.
\nApple 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.
\nAVFoundation 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\nimport 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 ?? "")
}
}\nML 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.
\nScandit — 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).
\nScandit 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// 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
}
}\nScandit 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.
\nBarcode 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.
\nFó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ő.
\nAuto-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// 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() }
}
}\nVisszajelzé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.
\nGyakori kérdések
\nML 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.
\nML 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.
\nCsö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.
\nIgen, 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.
\nAz 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Összefoglalás
\nKulcsraké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.
Olvassa el is