Barcode Scanning — bu mobil cihazın kamerası ilə barkodların oxunması və dekodlaşdırılması texnologiyasıdır. Xüsusi avadanlıq tələb edən lazer skanerlərdən fərqli olaraq, kamera skanerləri kamerasi olan istənilən smartfonda işləyir. Mobil inkişafda Barcode Scanning ML Kit Barcode Scanning (Google), AVFoundation (Apple), ZXing (open-source) və ya Scandit (kommersiya SDK) vasitəsilə həyata keçirilir. Google ML Kit, 2025 məlumatlarına görə, kitabxana gündə 2+ milyard skanı 98.5% dəqiqliklə emal edir.
Başlıca
Barcode Scanning — kamera vasitəsilə barkodların optik tanınması prosesidir. Alqoritm şəkli çəkir, orada kodu tapır (lokallaşdırma), onu dekodlaşdırır (məlumatı çıxarır) və sətr dəyərini qaytarır. Müasir SDK-lar istənilən oriyentasiya, ölçü və işıqlandırmada kodları skan edir — istifadəçi sadəcə kameranı yönəltməlidir.
Barkod formatları iki qrupa bölünür: 1D (xətti) — EAN-13, UPC-A, Code 128, Code 39, ITF, Codabar — 20–30 simvola qədər ehtiva edir, mallar və logistika üçün istifadə olunur; 2D (matris) — QR Code, Data Matrix, PDF417, Aztec — 3000+ simvola qədər ehtiva edir, keçidlər, biletlər və sənədlər üçün istifadə olunur. ML Kit 14 formatı dəstəkləyir — bütün məşhur 1D və 2D formatları.
Data Matrix — QR-a bənzər, lakin daha yığcam ikiu015flü kod. Sənayedə (hissələrin markalanması), elektron biletlərdə (IATA BCBP), tibb nümunələrində istifadə olunur. Data Matrix 2335 simvola qədər ehtiva edə bilər və çox kiçik səthlərə — 2x2 mm-dək tətbiq olunur. QR-dan fərqli olaraq, Data Matrix-in axtarış nöqşələri (künclərdə kvadratlar) yoxdur və daha dəqiq kamera kalibrasiyası tələb edir.
| Format | Tip | Maks. məlumat | Tətbiq |
|---|---|---|---|
| EAN-13 | 1D | 13 rəqəm | Mağazalarda mallar |
| QR Code | 2D | 4296 simvol | Keçidlər, ödənişlər, biletlər |
| Data Matrix | 2D | 2335 simvol | Sənaye, tibb |
| PDF417 | 2D | 2710 simvol | Sənədlər, minik biletləri |
| Code 128 | 1D | 80 simvol | Logistika, nəqliyyat |
QR Code — mobil tətbiqlərdə ən məşhur ikiölçülü format. URL, mətn, vCard, WiFi konfiqurasiyası, ödəniş məlumatları (UPI, SBP) ehtiva edir. QR Code-un 40 versiyası (21x21-dən 177x177 modula qədər) və 4 səhv korreksiyası səviyyəsi var (L: 7%, M: 15%, Q: 25%, H: 30%). Mobil tətbiqlər üçün 2–10 versiyasından (25x25 – 57x57 modul) istifadə edin — ölçü və məlumat arasında optimal tarazlıq.
ML Kit Barcode Scanning — Android tətbiqləri üçün əsas SDK. ML Kit şəkildə bütün kodları müstəqil tapır (kodun mərkəzdə olmasını tələb edən ZXing-dən fərqli olaraq). API rawValue (mətn məzmunu), format (kod növü), boundingBox və cornerPoints (kodun 4 künc nöqtəsi) ilə Barcode obyekti qaytarır. ML Kit single-scan (tək çərçivə) və continuous-scan (video axını) dəstəkləyir.
Multi-barcode rejimi — ML Kit bir şəkildə bir neçə kodu aşkar edə bilər. BarcodeScannerOptions.Builder() vasitəsilə aktivləşdirin. Multi rejimində Barcode siyahısı qaytarılır. İnventarlaşdırma (bir dəstə malı skan etmək), stol üzərində bir neçə QR kodunu tanımaq üçün istifadə edin. Defolt olaraq multi-barcode söndürülüdür — yalnız lazım olduqda aktivləşdirin, çünki bu skanlamanı 20–30% yavaşlatır.
// ML Kit Barcode Scanning multi-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, MƏTN, TELEFON...
val rawValue = barcode.rawValue
val displayValue = barcode.displayValue
}
}
Format filtrləməsi — məcburi optimallaşdırma. setBarcodeFormats() ML Kit-in axtaracağı formatları məhdudlaşdırır. Tətbiq yalnız QR kodları skan edirsə — FORMAT_QR_CODE göstərin. Bu, digər formatların dekodlaşdırma alqoritmlərini istisna etməklə skanlamanı 2–3 dəfə sürətləndirir. Ticarət skaneri üçün — FORMAT_EAN_13 | FORMAT_UPC_A. Logistika üçün — FORMAT_CODE_128 | FORMAT_CODE_39 | FORMAT_PDF417.
ZXing (Zebra Crossing) — Swift, React Native, Flutter portları ilə Java-da (Android) açıq mənbəli kitabxana. ZXing ML Kit ortaya çıxmamışdan əvvəl skanlamanın de-fakto standartı idi. Bütün məşhur formatları dəstəkləyir, istənilən cihazda işləyir (Google Play olmayan Huawei daxil olmaqla), Google Play Services tələb etmir. Çatışmazlıqları: ML Kit-dən 2–3 dəfə yavaş, çərçivənin kənarında kodları tapmır, multi-barcode yoxdur.
ML Kit vs ZXing — ML Kit sürət, dəqiqlik və UX baxımından qalib gəlir. ML Kit kod çərçivənin 10%-ni tutsa və küncdə olsa belə onu aşkar edir. ZXing kodun çərçivənin 50–80%-ni tutmasını və mərkəzdə olmasını tələb edir. ML Kit kodun lokallaşdırılması üçün neyron şəbəkə (MobileNetV2-SSD) istifadə edir, ZXing isə klassik binarizasiya və axtarış nöqşələrinin axtarılmasını istifadə edir. Google (2025) məlumatlarına görə, ML Kit 98.5% dəqiqlik verir, ZXing isə 92%.
| Xüsusiyyət | ML Kit | ZXing |
|---|---|---|
| Dəqiqlik | 98.5% | 92% |
| Sürət | 15–30 ms | 50–150 ms |
| Multi-kod | Bəli | Xeyr |
| Google Play | Tələb olunur | Tələb olunmur |
| Küncdə kod | Aşkar edir | Aşkar etmir |
Nə vaxt ZXing seçməli: tətbiq Huawei cihazlarında (Google Play Services olmadan), Android Go-da (məhdud yaddaş) işləməlidirsə, və ya Play Services olmadan tam oflayn iş tələb olunursa. Bütün digər hallarda — ML Kit daha sürətli, dəqiq, inteqrasiyası daha sadədir və multi-kod və periferiya deteksiyası sayəsində daha yaxşı UX təmin edir.
// ZXing Core: sadə 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 tapılmadı
}
Scandit alternativ olaraq — 99.5% dəqiqlik və 10–20 ms sürətlə kommersiya SDK. Öz neyron şəbəkələrindən istifadə edir və Google Play Services tələb etmir. Qiymət — ayda $400-dən (2019). Scandit pərakəndə satış və logistikada (Walmart, FedEx) üstünlük təşkil edir. Əksər mobil tətbiqlər üçün ML Kit kifayətdir — Scandit yalnız yüksək həcimli skanlama ilə enterprise tapşırıqları üçün əsaslandırılır.
Apple AVFoundation AVCaptureMetadataOutput vasitəsilə native Barcode Scanning təmin edir. iOS 7-dən başlayaraq AVFoundation QR kodlarının skan edilməsini, iOS 8-dən isə bütün EAN, UPC, Code 128, PDF417 formatlarını dəstəkləyir. AVFoundation əlavə SDK quraşdırma tələb etmir — bu Foundation-ın bir hissəsidir. Skanlama A12+ da Apple Neural Engine vasitəsilə işləyir — minimal enerji sərfi ilə 10–20 ms sürət.
AVFoundation-ın üstünlükləri: sıfır asılılıq, kamera oriyentasiyasının avtomatik idarə edilməsi, açıq/qaranlıq rejim dəstəyi, fon işi (background modes ilə). AVFoundation avtomatik olaraq skanlama üçün avtofokus və ekspozisiyanı tənzimləyir — tərtibatçı sadəcə captureOutput delegatına abunə olmalıdır. Çatışmazlıq: ML Kit-dən daha az parametr — multi-barcode və ya format filtri aktivləşdirilə bilməz.
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 daha çox nəzarət verir — formatları konfiqurasiya etmək, multi-barcode aktivləşdirmək, kodları confidence görə filtrləmək olar. AVFoundation köhnə cihazlarda daha sürətlidir (az overhead), lakin iOS < 15-də Data Matrix, Aztec, PDF417-ni dəstəkləmir. iOS 15+ üçün ML Kit üstünlüklüdür. iOS 12–14 üçün AVFoundation + dəstəklənməyən formatlar üçün ML Kit-ə keçid istifadə edin.
Scandit — pərakəndə satış, logistika və səhiyyəyə yönəlmiş Barcode Scanning üçün kommersiya SDK. Scandit müxtəlif şəraitdə 10+ milyon barkod şəkli üzərində təlim keçmiş öz neyron şəbəkələrindən istifadə edir: parıltı, zədələnmə, zəif işıqlandırma, 45°-dək meyl, əks etmələr. Scandit 15 metrə qədər məsafədən (anbarlarda PDF417 üçün) və dairəvi səthlərdə (bankalar, şüşələr) kodları skan edir.
Scandit imkanları: SparkScan (sürətli ardıcıl skanlama üçün single-scan), MatrixScan (multi-barcode + AR skan edilmiş işartıləmə), PickList (təsdiqlə barkodla mal axtarışı). Scandit GS1 DataBar və Composite Codes daxil olmaqla 50+ formatı dəstəkləyir. Sürət — kod başına 10–15 ms. Dəqiqlik — standart işıqlandırmada 99.5%, zəif işıqda 97%.
// Scandit MatrixScan (SDK lisenziyası tələb olunur)
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 ödənişlidir ($400+/ay), lakin enterprise xüsusiyyətləri verir: SparkScan (korporativ cihazlarda aparat düyməsi), MatrixScan (işartıləmə üçün AR örtüyü), PickList (səs təsdiqi). ML Kit pulsuzdur və 90% mobil tətbiqlər üçün kifayətdir: mağaza skanerləri, QR oxuyucular, bilet tətbiqləri. Scandit yalnız Zebra/Honeywell cihazları olan logistika terminalları üçün əsaslandırılır.
Barcode Scanning optimallaşdırılması kamera, qətnamə və SDK parametrlərinin konfiqurasiyasını əhatə edir. Əsas qayda: daha az piksel — daha sürətli skanlama. ML Kit üçün optimal qətnamə video üçün 480p (640x480) və şəkil üçün 720p (1280x720)-dir. 1080p-yə yüksəltmə dəqiqliyi artırmadan emalı 2–3 dəfə yavaşlatır. Qətnamənin avtomatik idarə edilməsi üçün CameraX-dən ImageAnalysis ilə istifadə edin.
Fokus və ekspozisiya skanlama keyfiyyəti üçün kritik əhəmiyyət daşıyır. ML Kit kameranı avtomatik tənzimləmir — tərtibatçı Camera2 və ya CameraX vasitəsilə continuous auto-focus və continuous auto-exposure aktivləşdirməlidir. Avtofokus olmadan bulanıq kodlar dəqiqliyi 60–70%-ə endirir. Yaxın məsafədən (5–15 sm) skanlama üçün mümkündürsə kamera makro rejimindən istifadə edin.
Auto-zoom və nişan örtüyü — istifadəçi UX təkmilləşdirmələri. Auto-zoom kod aşkar edildikdə onu yaxınlaşdırır (Google Lens kamerasında olduğu kimi). Kodun boundingBox təhlili və önizləmənin miqyaslanması vasitəsilə həyata keçirilir. Nişan örtüyü — kameranı hara yönəltmək lazım olduğunu göstərən qrafik çərçivə. Daha yaxşı UX üçün tapılan kodun boundingBox-nı göstərin və müvəffəqiyyətli dekodlaşdırmadan sonra onu yaşıl rənglə vurğulayın.
// CameraX + ML Kit: optimallaşdırılmış 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 + səs + kod işartısı
}
}
.addOnCompleteListener { image.close() }
}
}
İstifadəçiyə rəy: vibrasiya (HapticFeedback), səs (MediaActionSound), vizual işartı (Canvas/Overlay). Uğurlu skanlamadan sonra növbəti skandan əvvəl 1000–1500 ms gecikmə (throttling) əlavə edin — bu bir kodda təkrarlanmaların qarşısını alır. Ardıcıl skanlama (bir dəstə malı skan etmək) üçün SparkScan yanaşmasından istifadə edin: hər skan qeydə alınır və səslə bildirilir, gecikmə 300–500 ms.
Tez-tez verilən suallar
ML Kit Barcode Scanning — Android üçün ən yaxşı seçim: pulsuz, 98.5% dəqiqlik, multi-kod, çərçivənin istənilən hissəsində deteksiya. Tətbiq Google Play olmadan Huawei cihazlarında işləməlidirsə — ZXing (açıq mənbə, daha aşağı dəqiqlik) istifadə edin. Enterprise logistikası üçün — Scandit (ödənişli, 99.5% dəqiqlik, SparkScan). Sadə QR oxuyucusu üçün ZXing və ya ML Kit kifayətdir.
ML Kit Barcode Scanning 14 formatı dəstəkləyir: 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) da dəstəklənir. Tam siyahı — Barcode.FORMAT_* sənədlərində. Formatları məhdudlaşdırmaq üçün setBarcodeFormats() istifadə edin — bu skanlamanı 2–3 dəfə sürətləndirir.
Kamera qətnaməsini 480p (640x480) endirin, continuous auto-focus aktivləşdirin, formatları lazım olanlarla məhdudlaşdırın (setBarcodeFormats), FAST performance rejimindən istifadə edin. ML Kit üçün yalnız zəruri formatları göstərin — əlavə formatları istisna etmək skanlamanı 2–3 dəfə sürətləndirir. ZXing üçün — GlobalHistogramBinarizer əvəzinə HybridBinarizer istifadə edin (20% sürətli). AVFoundation üçün — metadataObjectTypes göstərin.
Bəli, bütün yerli Barcode Scanning SDK-ları (ML Kit, ZXing, AVFoundation, Scandit) tam oflayn işləyir. ML Kit interneti yalnız modelin ilk yüklənməsində tələb edir (downloaded rejimi), bundan sonra model cihazda keşlənir. AVFoundation — iOS-a daxildir, internet tələb etmir. ZXing — Play Services olmadan tam oflayn. Bulud skanlaması (Google Cloud Vision) mobil tətbiqlərdə istifadə olunmur.
ML Kit və Scandit neyron şəbəkə alqoritmləri sayəsində zədələnmiş kodların daxili korreksiyasına malikdir. ML Kit zədələnmiş kodun 30%-dək bərpa edir (cızıqlar, qırılmalar). Scandit — qüsurlu kodlar üzərində təlim sayəsində 50%-dək. ZXing zədələnmiş kodları praktiki olaraq bərpa etmir — aydın şəkil tələb edir. Qüsurlu kodları skan etmək üçün Scandit və ya ACCURATE performance rejimli ML Kit istifadə edin.
Nəticə
Açar təslim mobil tətbiq hazırlayacağıq
IT Sectr 2017-ci ildən startaplar və bizneslər üçün iOS və Android tətbiqləri yaradır. Sizə məsləhət verəcəyik və ən yaxşı həlli təklif edəcəyik.
Həm də oxuyun