Ilovalarda Barcode Scanning — bu nima, kod turlari va ML Kit

Muallif: IT Sectr Nashr etilgan: 2026-07-18 O'qish vaqti: 10 daq

Barcode Scanning — bu mobil qurilma kamerasi yordamida barkodlarni o‘qish va dekodlash texnologiyasidir. Maxsus jihozlarni talab qiladigan lazer skanerlardan farqli o‘laroq, kamera skanerlari kamerasi bor har qanday smartfonda ishlaydi. Mobil rivojlanishda Barcode Scanning ML Kit Barcode Scanning (Google), AVFoundation (Apple), ZXing (open-source) yoki Scandit (tijoriy SDK) orqali amalga oshiriladi. Google ML Kit, 2025 ma’lumotlariga ko‘ra, kutubxona kuniga 2+ milliard skanerlashni 98.5% aniqlik bilan qayta ishlaydi.

Asosiy

  • Barcode Scanning — bir va ikki o‘lchovli kodlarni kamera bilan o‘qish
  • ML Kit Barcode — eng aniq SDK (98.5%), multi-kod, barcha formatlar
  • Formatlar — EAN, UPC, QR, Data Matrix, PDF417, Aztec, Code 128
  • Real-time — CameraX va AVFoundation bilan 60 FPS gacha skanerlash
  • On-device — barcha hisob-kitoblar mahalliy, internetisiz

Barcode Scanning nima: prinsiplar va formatlar

Barcode Scanning — kamera yordamida barkodlarni optik tanib olish jarayoni. Algoritm tasvirni oladi, unda kodni topadi (joylashuvni aniqlash), uni dekodlaydi (ma’lumotlarni chiqarish) va satr qiymatini qaytaradi. Zamonaviy SDK-lar har qanday yo‘nalish, o‘lcham va yoritishdagi kodlarni skanerlaydi — foydalanuvchi faqat kamerani yo‘naltirishi kerak.

Barkod formatlari ikki guruhga bo‘linadi: 1D (chiziqli) — EAN-13, UPC-A, Code 128, Code 39, ITF, Codabar — 20–30 belgigacha, tovarlar va logistika uchun; 2D (matritsali) — QR Code, Data Matrix, PDF417, Aztec — 3000+ belgigacha, havolalar, chiptalar va hujjatlar uchun. ML Kit 14 formatni qo‘llab-quvvatlaydi — barcha mashhur 1D va 2D formatlari.

Data Matrix — QR ga o‘xshash, ammo ixchamroq ikki o‘lchovli kod. Sanoatda (qismlarni markalash), elektron chiptalarda (IATA BCBP), tibbiy namunalarda ishlatiladi. Data Matrix 2335 belgigacha saqlashi mumkin va juda kichik yuzalarga — 2x2 mm gacha qo‘llaniladi. QR dan farqli o‘laroq, Data Matrix qidiruv naqshlariga (burchaklardagi kvadratlar) ega emas va kamerani aniqroq kalibrlashni talab qiladi.

FormatTurMaks. ma’lumotQo‘llanish
EAN-131D13 raqamDo‘konlardagi tovarlar
QR Code2D4296 belgiHavolalar, to‘lovlar, chiptalar
Data Matrix2D2335 belgiSanoat, tibbiyot
PDF4172D2710 belgiHujjatlar, bortga chiqish talonlari
Code 1281D80 belgiLogistika, transport

QR Code — mobil ilovalardagi eng mashhur ikki o‘lchovli format. URL, matn, vCard, WiFi sozlamalari, to‘lov ma’lumotlarini (UPI, SBP) o‘z ichiga oladi. QR Code 40 versiyaga (21x21 dan 177x177 modulgacha) va 4 xato tuzatish darajasiga ega (L: 7%, M: 15%, Q: 25%, H: 30%). Mobil ilovalar uchun 2–10 versiyalaridan (25x25 – 57x57 modul) foydalaning — o‘lcham va ma’lumot o‘rtasidagi optimal muvozanat.

ML Kit Barcode Scanning: integratsiya va sozlash

ML Kit Barcode Scanning — Android ilovalari uchun asosiy SDK. ML Kit tasvirdagi barcha kodlarni mustaqil ravishda topadi (kodni markazda bo‘lishini talab qiladigan ZXing dan farqli o‘laroq). API rawValue (matn mazmuni), format (kod turi), boundingBox va cornerPoints (kodning 4 burchak nuqtasi) bilan Barcode obyektini qaytaradi. ML Kit single-scan (bitta kadr) va continuous-scan (video oqim) rejimlarini qo‘llab-quvvatlaydi.

Multi-barcode rejimi — ML Kit bitta tasvirda bir nechta kodlarni aniqlay oladi. BarcodeScannerOptions.Builder() orqali yoqing. Multi rejimda Barcode ro‘yxati qaytariladi. Inventarizatsiya (bir partiya tovarlarni skanerlash), stolda bir nechta QR kodlarni tanib olish uchun foydalaning. Odatiy bo‘lib multi-barcode o‘chirilgan — faqat kerak bo‘lganda yoqing, chunki bu skanerlashni 20–30% sekinlashtiradi.

kotlin
// ML Kit Barcode Scanning ko‘p kod rejimi
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, MATN, TELEFON...
            val rawValue = barcode.rawValue
            val displayValue = barcode.displayValue
        }
    }

Formatlarni filtrlash — majburiy optimallashtirish. setBarcodeFormats() ML Kit qidiradigan formatlarni cheklaydi. Ilova faqat QR kodlarni skanerlasa — FORMAT_QR_CODE belgilang. Bu boshqa formatlarni dekodlash algoritmlarini chiqarib tashlash orqali skanerlashni 2–3 marta tezlashtiradi. Do‘kon skaneri uchun — FORMAT_EAN_13 | FORMAT_UPC_A. Logistika uchun — FORMAT_CODE_128 | FORMAT_CODE_39 | FORMAT_PDF417.

ZXing vs ML Kit: kutubxonalarni solishtirish

ZXing (Zebra Crossing) — Java (Android) tillarida Swift, React Native, Flutter portlari bilan ochiq kodli kutubxona. ZXing ML Kit paydo bo‘lishidan oldin skanerlashning de-fakto standarti edi. Barcha mashhur formatlarni qo‘llab-quvvatlaydi, har qanday qurilmada ishlaydi (Google Play bo‘lmagan Huawei qurilmalari ham), Google Play Services talab qilmaydi. Kamchiliklari: ML Kit dan 2–3 marta sekinroq, kadr chekkalarida kodlarni topmaydi, multi-barcode yo‘q.

ML Kit vs ZXing — ML Kit tezlik, aniqlik va UX bo‘yicha g‘alaba qozonadi. ML Kit kod kadrning 10% ini egallasa va burchakda bo‘lsa ham aniqlaydi. ZXing kod kadrning 50–80% ini egallashini va markazda bo‘lishini talab qiladi. ML Kit kodni joylashishini aniqlash uchun neyron tarmoq (MobileNetV2-SSD) dan foydalanadi, ZXing esa klassik binarizatsiya va qidiruv naqshlarini topishdan foydalanadi. Google (2025) ma’lumotlariga ko‘ra, ML Kit 98.5% aniqlik beradi, ZXing esa 92%.

XususiyatML KitZXing
Aniqlik98.5%92%
Tezlik15–30 ms50–150 ms
Multi-kodHaYo‘q
Google PlayTalab qilinadiTalab qilinmaydi
Burchakdagi kodAniqlaydiAniqlamaydi

Qachon ZXingni tanlash kerak: ilova Huawei qurilmalarida (Google Play Servicesiz), Android Go da (cheklangan xotira) ishlashi kerak bo‘lsa, yoki Play Servicesiz to‘liq oflayn ish talab qilinsa. Boshqa barcha hollarda — ML Kit tezroq, aniqroq, integratsiyasi osonroq va multi-kod va periferiya deteksiyasi tufayli yaxshiroq UX beradi.

kotlin
// ZXing Core: oddiy skaner
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) {
    // Kod topilmadi
}

Scandit alternativ sifatida — 99.5% aniqlik va 10–20 ms tezlik bilan tijoriy SDK. O’zining neyron tarmoqlaridan foydalanadi va Google Play Services talab qilmaydi. Narxi — oyiga $400 dan (2019). Scandit chakana savdo va logistikada (Walmart, FedEx) ustunlik qiladi. Aksariyat mobil ilovalar uchun ML Kit yetarli — Scandit faqat yuqori hajmli skanerlash bilan enterprise vazifalari uchun asoslanadi.

Apple AVFoundation: iOS-da native skaner

Apple AVFoundation AVCaptureMetadataOutput orqali native Barcode Scanning ta’minlaydi. iOS 7 dan boshlab AVFoundation QR kodlarini, iOS 8 dan esa barcha EAN, UPC, Code 128, PDF417 formatlarini qo‘llab-quvvatlaydi. AVFoundation qo‘shimcha SDK o‘rnatishni talab qilmaydi — bu Foundation ning bir qismidir. Skanerlash A12+ da Apple Neural Engine orqali ishlaydi — 10–20 ms tezlikda minimal energiya sarfi bilan.

AVFoundation afzalliklari: nol bog‘liqlik, kamera yo‘nalishini avtomatik boshqarish, yorug‘/qorong‘u rejimni qo‘llab-quvvatlash, fonda ishlash (background modes bilan). AVFoundation avtomatik ravishda skanerlash uchun avtofokus va ekspozitsiyani sozlaydi — dasturchi faqat captureOutput delegatiga obuna bo‘lishi kerak. Kamchilik: ML Kit dan kamroq sozlamalar — multi-barcode yoki format filtrini yoqib bo‘lmaydi.

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

iOS da ML Kit vs AVFoundation: ML Kit ko‘proq nazorat beradi — formatlarni sozlash, multi-barcode yoqish, kodlarni confidence bo‘yicha filtrlash mumkin. AVFoundation eski qurilmalarda tezroq (kam overhead), lekin iOS < 15 da Data Matrix, Aztec, PDF417 ni qo‘llab-quvvatlamaydi. iOS 15+ uchun ML Kit afzal. iOS 12–14 uchun AVFoundation + qo‘llab-quvvatlanmaydigan formatlar uchun ML Kit ga o‘tishdan foydalaning.

Scandit: enterprise uchun tijoriy yechim

Scandit — chakana savdo, logistika va sog‘liqni saqlashga yo‘naltirilgan Barcode Scanning uchun tijoriy SDK. Scandit turli sharoitlarda 10+ million barkod tasvirlari ustida o‘qitilgan o‘zining neyron tarmoqlaridan foydalanadi: porlash, shikastlanish, zaif yoritish, 45° gacha egilish, aks ettirish. Scandit 15 metrgacha masofadan (omborlarda PDF417 uchun) va dumaloq yuzalarda (bankalar, shishalar) kodlarni skanerlaydi.

Scandit imkoniyatlari: SparkScan (tez ketma-ket skanerlash uchun single-scan), MatrixScan (multi-barcode + AR skanerlanganlarni belgilash), PickList (tovar identifikatsiyasi bilan barkod bo‘yicha qidirish). Scandit GS1 DataBar va Composite Codes ni o‘z ichiga olgan 50+ formatni qo‘llab-quvvatlaydi. Tezlik — kod boshiga 10–15 ms. Aniqlik — standart yoritishda 99.5%, zaif yoritishda 97%.

kotlin
// Scandit MatrixScan (SDK litsenziyasi talab qilinadi)
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 pullik ($400+/oy), lekin enterprise xususiyatlarini beradi: SparkScan (korporativ qurilmalarda apparat tugmasi), MatrixScan (belgilash uchun AR qoplama), PickList (ovozli tasdiqlash). ML Kit bepul va 90% mobil ilovalar uchun yetarli: do‘kon skanerlari, QR o‘qish, chipta ilovalari. Scandit faqat Zebra/Honeywell qurilmalari bo‘lgan logistika terminallari uchun asoslanadi.

Skanerlashni optimallashtirish: tezlik va aniqlik

Barcode Scanning optimallashtirish kamera, rezolyutsiya va SDK sozlamalarini o‘z ichiga oladi. Asosiy qoida: kamroq piksel — tezroq skanerlash. ML Kit uchun optimal rezolyutsiya video uchun 480p (640x480) va rasm uchun 720p (1280x720). 1080p ga oshirish aniqlikni oshirmasdan ishlov berishni 2–3 marta sekinlashtiradi. Rezolyutsiyani avtomatik boshqarish uchun CameraX ni ImageAnalysis bilan ishlating.

Fokus va ekspozitsiya skanerlash sifati uchun juda muhim. ML Kit kamerani avtomatik sozlamaydi — dasturchi Camera2 yoki CameraX orqali continuous auto-focus va continuous auto-exposure ni yoqishi kerak. Avtofokussiz loyqa kodlar aniqlikni 60–70% gacha tushiradi. Yaqin masofadan (5–15 sm) skanerlash uchun iloji bo‘lsa kamera makro rejimidan foydalaning.

Auto-zoom va nishon qoplamasi — foydalanuvchi UX yaxshilanishlari. Auto-zoom kod aniqlanganda uni yaqinlashtiradi (Google Lens kamerasidagi kabi). Kodning boundingBox tahlili va oldindan ko‘rishni masshtablash orqali amalga oshiriladi. Nishon qoplamasi — kamerani qayerga yo‘naltirishni ko‘rsatadigan grafik ramka. Yaxshiroq UX uchun topilgan kodning boundingBox ini ko‘rsating va muvaffaqiyatli dekodlashdan keyin uni yashil rang bilan ajrating.

kotlin
// CameraX + ML Kit: optimallashtirilgan skaner
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 {
                    // Haptik + tovush + kodni ajratib ko‘rsatish
                }
            }
            .addOnCompleteListener { image.close() }
    }
}

Foydalanuvchiga qayta aloqa: tebranish (HapticFeedback), tovush (MediaActionSound), vizual belgilash (Canvas/Overlay). Muvaffaqiyatli skanerlashdan keyin keyingi skanerdan oldin 1000–1500 ms kechikish (throttling) qo‘shing — bu bitta kodda takroriy ishga tushirishning oldini oladi. Ketma-ket skanerlash (bir partiya tovarlarni skanerlash) uchun SparkScan yondashuvidan foydalaning: har bir skaner qayd etiladi va tovush bilan bildiriladi, kechikish 300–500 ms.

Tez-tez so‘raladigan savollar

Android da barkodlarni skanerlash uchun qaysi SDK eng yaxshi?

ML Kit Barcode Scanning — Android uchun eng yaxshi tanlov: bepul, 98.5% aniqlik, multi-kod, kadrning istalgan qismida aniqlash. Ilova Google Play siz Huawei qurilmalarida ishlashi kerak bo‘lsa — ZXing (ochiq kodli, pastroq aniqlik) dan foydalaning. Enterprise logistikasi uchun — Scandit (pullik, 99.5% aniqlik, SparkScan). Oddiy QR o‘qish uchun ZXing yoki ML Kit yetarli.

ML Kit qanday barkod formatlarini qo‘llab-quvvatlaydi?

ML Kit Barcode Scanning 14 formatni qo‘llab-quvvatlaydi: 1D — EAN-8, EAN-13, UPC-A, UPC-E, Code 39, Code 93, Code 128, ITF, Codabar; 2D — QR Code, Data Matrix, PDF417, Aztec. Shuningdek GS1 DataBar (RSS-14, RSS-Expanded) qo‘llab-quvvatlanadi. To‘liq ro‘yxat — Barcode.FORMAT_* hujjatlarida. Formatlarni cheklash uchun setBarcodeFormats() dan foydalaning — bu skanerlashni 2–3 marta tezlashtiradi.

Barkod skanerlashni qanday tezlashtirish mumkin?

Kamera rezolyutsiyasini 480p (640x480) ga tushiring, continuous auto-focus ni yoqing, formatlarni keraklilari bilan cheklang (setBarcodeFormats), FAST performance rejimidan foydalaning. ML Kit uchun faqat zarur formatlarni belgilang — qo‘shimcha formatlarni chiqarib tashlash skanerlashni 2–3 marta tezlashtiradi. ZXing uchun — GlobalHistogramBinarizer o‘rniga HybridBinarizer dan foydalaning (20% tezroq). AVFoundation uchun — metadataObjectTypes ni belgilang.

Barkod skanerlash internetisiz ishlaydimi?

Ha, barcha mahalliy Barcode Scanning SDK lari (ML Kit, ZXing, AVFoundation, Scandit) to‘liq oflayn ishlaydi. ML Kit internetni faqat modelni birinchi yuklashda talab qiladi (downloaded rejimi), shundan so‘ng model qurilmada keshlanadi. AVFoundation — iOS ga o‘rnatilgan, internet talab qilmaydi. ZXing — Play Servicesiz to‘liq oflayn. Bulutli skanerlash (Google Cloud Vision) mobil ilovalarda ishlatilmaydi.

Shikastlangan yoki loyqa barkodlarni skanerlash mumkinmi?

ML Kit va Scandit neyron tarmoq algoritmlari tufayli shikastlangan kodlarning ichki tuzatishiga ega. ML Kit shikastlangan kodning 30% gacha tiklaydi (chizishlar, yirtiqlar). Scandit — nuqsonli kodlar ustida o‘qitish tufayli 50% gacha. ZXing shikastlangan kodlarni amalda tiklamaydi — aniq tasvir talab qiladi. Nuqsonli kodlarni skanerlash uchun Scandit yoki ACCURATE performance rejimli ML Kit dan foydalaning.

Xulosa

  • Barcode Scanning — smartfon kamerasi bilan 1D/2D kodlarni aniqlash va dekodlash
  • ML Kit — 98.5% aniqlik, multi-kod, kadrning istalgan qismida aniqlash, bepul
  • ZXing — ochiq kodli, har qanday qurilma bilan moslik, 92% aniqlik
  • AVFoundation — native iOS skaneri, tizimga o‘rnatilgan (iOS 7+)
  • Scandit — enterprise SDK (99.5%), SparkScan, MatrixScan, oyiga $400 dan
  • Optimallashtirish — 480p rezolyutsiya, avtofokus, format cheklash, Haptic feedback
  • Barcha formatlar — EAN, UPC, QR, Data Matrix, PDF417, Aztec, Code 128

Biz kalit topshirig'i bilan mobil ilovani ishlab chiqamiz

IT Sectr 2017-yildan beri startaplar va korxonalar uchun iOS va Android ilovalarini yaratadi. Biz sizga maslahat beramiz va eng yaxshi yechimni taklif qilamiz.

Loyihani muhokama qilish

Shuningdek o'qing