Barcode Scanning — технологија читања и декодирања бар кодова помоћу камере мобилног уређаја. За разлику од laser-скенера, који захтевају специјализовану опрему, камерски скенери раде на сваком паметном телефону са камером. У мобилном развоју Barcode Scanning се реализује кроз ML Kit Barcode Scanning (Google), AVFoundation (Apple), ZXing (open-source) или Scandit (комерцијални SDK). Према подацима Google ML Kit, 2025, библиотека обради 2+ милијарде скенирања дневно са прецизношћу од 98.5%.
Најважније
Barcode Scanning — процес оптичког препознавања бар кодова помоћу камере. Алгоритам снима слику, проналази код на њој (локализација), декодира га (извлачење података) и враћа вредност низа. Савремени SDK скенирају кодове било које оријентације, величине и при било ком осветљењу — довољно је да корисник усмери камеру.
Формати бар кодова се деле на две групе: 1D (линеарни) — EAN-13, UPC-A, Code 128, Code 39, ITF, Codabar — садрже до 20–30 знакова, користе се за производе, логистику; 2D (матрични) — QR Code, Data Matrix, PDF417, Aztec — садрже до 3000+ знакова, користе се за линкове, карте, документе. ML Kit подржава 14 формата — све уобичајене 1D и 2D.
Data Matrix — дводимензионални код, сличан QR-у, али компактнији. Користи се у индустрији (означавање делова), електронским картама (IATA BCBP), медицинским узорцима. Data Matrix може да садржи до 2335 знакова и наноси се на веома мале површине — до 2x2 мм. За разлику од QR-а, Data Matrix нема finder patterns (квадрате у угловима) и захтева прецизнију калибрацију камере.
| Формат | Тип | Макс. података | Примена |
|---|---|---|---|
| EAN-13 | 1D | 13 цифара | Производи у продавницама |
| QR Code | 2D | 4296 знакова | Линкови, плаћања, карте |
| Data Matrix | 2D | 2335 знакова | Индустрија, медицина |
| PDF417 | 2D | 2710 знакова | Документи, карте за укрцавање |
| Code 128 | 1D | 80 знакова | Логистика, транспорт |
QR Code — најпопуларнији дводимензионални формат у мобилним апликацијама. Садржи URL, текст, vCard, WiFi конфигурацију, податке о плаћању (UPI, SBP). QR Code има 40 верзија (од 21x21 до 177x177 модула) и 4 нивоа исправке грешака (L: 7%, M: 15%, Q: 25%, H: 30%). За мобилне апликације користите верзије 2–10 (25x25 – 57x57 модула) — оптималан баланс величине и података.
ML Kit Barcode Scanning — основни SDK за Android апликације. ML Kit самостално проналази све кодове на слици (за разлику од ZXing-а, који захтева да код буде у центру). API враћа Barcode објекат са rawValue (текстуални садржај), format (тип кода), boundingBox и cornerPoints (4 тачке углова кода). ML Kit подржава single-scan (један кадар) и continuous-scan (видео ток).
Multi-barcode mode — ML Kit може да открије више кодова на једној слици. Укључите преко BarcodeScannerOptions.Builder(). У мулти режиму враћа се листа Barcode. Користите за инвентаризацију (скенирање пакета производа), препознавање више QR кодова на столу. Подразумевано мулти-баркод је искључен — укључите само ако је потребно, јер успорава скенирање за 20–30%.
// ML Kit Barcode Scanning мулти-код режим
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
}
}
Филтрирање формата — обавезна оптимизација. setBarcodeFormats() ограничава формате које ML Kit тражи. Ако апликација скенира само QR кодове — наведите FORMAT_QR_CODE. Ово убрзава скенирање 2–3 пута искључивањем алгоритама за декодирање других формата. За трговачки скенер — FORMAT_EAN_13 | FORMAT_UPC_A. За логистику — FORMAT_CODE_128 | FORMAT_CODE_39 | FORMAT_PDF417.
ZXing (Zebra Crossing) — open-source библиотека на Java-у (Android) са портовима на Swift, React Native, Flutter. ZXing — де факто стандард за скенирање пре појаве ML Kit-а. Подржава све популарне формате, ради на сваком уређају (укључујући Huawei без Google Play-а), не захтева Google Play Services. Недостаци: 2–3 пута спорији од ML Kit-а, не проналази кодове на периферији кадра, нема мулти-баркод.
ML Kit vs ZXing — ML Kit побеђује по брзини, прецизности и UX-у. ML Kit открива код чак и ако заузима 10% кадра и налази се у углу. ZXing захтева да код заузима 50–80% кадра и буде у центру. ML Kit користи неуронску мрежу (MobileNetV2-SSD) за локализацију кода, ZXing — класичну бинаризацију и претрагу finder patterns. Према подацима Google-а (2025), ML Kit даје 98.5% прецизности наспрам 92% код ZXing-а.
| Карактеристика | ML Kit | ZXing |
|---|---|---|
| Прецизност | 98.5% | 92% |
| Брзина | 15–30 мс | 50–150 мс |
| Мулти-код | Да | Не |
| Google Play | Потребан | Није потребан |
| Код у углу | Открива | Не открива |
Када изабрати ZXing: ако апликација мора да ради на Huawei уређајима (без Google Play Services-а), на Android Go-у (ограничена меморија), или ако је потребан потпуно офлајн рад без Play Services-а. У свим осталим случајевима ML Kit је бржи, прецизнији, једноставнији за интеграцију и даје бољи UX захваљујући мулти-коду и откривању на периферији.
// ZXing Core: једноставан скенер
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) {
// Код није пронађен
}
Scandit као алтернатива — комерцијални SDK са прецизношћу 99.5% и брзином 10–20 мс. Користи сопствене неуронске мреже и не захтева Google Play Services. Цена — од $400/месец (2019). Scandit доминира у ритејлу и логистици (Walmart, FedEx). За већину мобилних апликација ML Kit је довољан — Scandit је оправдан само за enterprise задатке са high-volume скенирањем.
Apple AVFoundation пружа нативни Barcode Scanning преко AVCaptureMetadataOutput. Од iOS 7, AVFoundation подржава скенирање QR кодова, а од iOS 8 — све формате EAN, UPC, Code 128, PDF417. AVFoundation не захтева инсталацију додатних SDK-ова — део је Foundation-а. Скенирање ради преко Apple Neural Engine-а на A12+ — брзина 10–20 мс са минималном потрошњом енергије.
Предности AVFoundation-а: нулта зависност, аутоматска обрада оријентације камере, уграђена подршка за light/dark mode, рад у позадини (са background modes). AVFoundation аутоматски подешава автофокус и експозицију за скенирање — програмер само треба да се пријави на делегат captureOutput. Недостатак: мање подешавања него у ML Kit-у — не може се укључити мулти-баркод или филтер формата.
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 на iOS-у: ML Kit даје више контроле — могу се подесити формати, укључити мулти-баркод, филтрирати кодове по confidence. AVFoundation — бржи је на старијим уређајима (мање overhead-а), али не подржава Data Matrix, Aztec, PDF417 на iOS < 15. За iOS 15+ пожељнији је ML Kit. За iOS 12–14 користите AVFoundation + fallback на ML Kit за неподржане формате.
Scandit — комерцијални SDK за Barcode Scanning са фокусом на ритејл, логистику и здравство. Scandit користи сопствене неуронске мреже, обучене на 10+ милиона слика бар кодова у различитим условима: одсјаји, оштећења, слабо осветљење, нагиб до 45°, одрази. Scandit скенира кодове на удаљености до 15 метара (за PDF417 у складиштима) и на заобљеним површинама (конзерве, флаше).
Могућности Scandit-а: SparkScan (single-scan за брзо узастопно скенирање), MatrixScan (мулти-баркод + AR осветљавање скенираних), PickList (претрага производа по бар коду са потврдом). Scandit подржава 50+ формата, укључујући GS1 DataBar и Composite Codes. Брзина — 10–15 мс по коду. Прецизност — 99.5% при стандардном осветљењу, 97% при лошем.
// Scandit MatrixScan (потребна SDK лиценца)
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 је плаћен ($400+/месец), али даје enterprise функције: SparkScan (хардверско дугме на корпоративним уређајима), MatrixScan (AR overlay за осветљавање), PickList (гласовна потврда). ML Kit је бесплатан и довољан за 90% мобилних апликација: продавнички скенери, QR читачи, апликације за карте. Scandit је оправдан само за логистичке терминале са Zebra/Honeywell уређајима.
Оптимизација Barcode Scanning-а укључује подешавање камере, резолуције и SDK-а. Основно правило: мање пиксела — брже скенирање. За ML Kit оптимална резолуција је 480p (640x480) за видео и 720p (1280x720) за фотографије. Повећање на 1080p успорава обраду 2–3 пута без побољшања прецизности. Користите CameraX са ImageAnalysis за аутоматско управљање резолуцијом.
Фокус и експозиција су критични за квалитет скенирања. ML Kit не подешава камеру аутоматски — програмер мора да укључи continuous auto-focus и continuous auto-exposure преко Camera2 или CameraX-а. Без автофокуса замућени кодови смањују прецизност на 60–70%. За скенирање са блиске удаљености (5–15 цм) користите macro режим камере, ако је доступан.
Auto-zoom и finder overlay — корисничка UX побољшања. Auto-zoom приближава код када се открије (као у Google Lens камери). Реализује се анализом boundingBox-а кода и зумовањем прегледа. Finder overlay — графички оквир који показује куда усмерити камеру. За бољи UX приказујте boundingBox пронађеног кода и истичите га зелено при успешном декодирању.
// CameraX + ML Kit: оптимизовани скенер
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 {
// Хаптика + звук + осветљавање кода
}
}
.addOnCompleteListener { image.close() }
}
}
Повратна информација кориснику: вибрација (HapticFeedback), звук (MediaActionSound), визуелно осветљавање (Canvas/Overlay). Након успешног скенирања додајте паузу од 1000–1500 мс (throttling) пре следећег скенирања — ово спречава дуплирање окидача на истом коду. За узастопно скенирање (скенирање пакета производа) користите SparkScan приступ: свако скенирање се бележи и најављује звуком, пауза 300–500 мс.
Често постављана питања
ML Kit Barcode Scanning — најбољи избор за Android: бесплатно, 98.5% прецизност, мулти-код, откривање на било ком делу кадра. Ако апликација мора да ради на Huawei уређајима без Google Play-а — користите ZXing (open-source, нижа прецизност). За enterprise логистику — Scandit (плаћен, 99.5% прецизност, SparkScan). За једноставан QR скенер довољан је ZXing или ML Kit.
ML Kit Barcode Scanning подржава 14 формата: 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). Пуна листа — у документацији Barcode.FORMAT_*. За ограничавање формата користите setBarcodeFormats() — ово убрзава скенирање 2–3 пута.
Смањите резолуцију камере на 480p (640x480), укључите continuous auto-focus, ограничите формате на потребне (setBarcodeFormats), користите FAST performance mode. За ML Kit наведите само потребне формате — искључивање сувишних формата убрзава скенирање 2–3 пута. За ZXing користите HybridBinarizer уместо GlobalHistogramBinarizer-а (20% брже). За AVFoundation — наведите metadataObjectTypes.
Да, сви локални Barcode Scanning SDK (ML Kit, ZXing, AVFoundation, Scandit) раде потпуно офлајн. ML Kit захтева интернет само при првом преузимању модела (downloaded mode), након чега се модел кешира на уређају. AVFoundation — уграђен у iOS, не захтева интернет. ZXing — потпуно офлајн без Play Services-а. Cloud скенирање (Google Cloud Vision) се не користи у мобилним апликацијама.
ML Kit и Scandit имају уграђену корекцију оштећених кодова захваљујући неуронским алгоритмима. ML Kit обнавља до 30% оштећеног кода (огреботине, прекиди). Scandit — до 50% захваљујући обуци на дефектним кодовима. ZXing практично не обнавља оштећене кодове — захтева јасну слику. За скенирање дефектних кодова користите Scandit или ML Kit са ACCURATE performance mode-ом.
Резиме
Развићемо мобилну апликацију под кључ
IT Sectr креира iOS и Android апликације за стартапе и предузећа од 2017. године. Саветоваћемо вас и предложити најбоље решење.
Прочитајте такође