Uygulamalarda Barkod Tarama — kod türleri ve ML Kit

Yazar: IT Sectr Yayınlanma: 2026-07-18 Okuma süresi: 10 dk

Barcode Scanning, mobil cihaz kamerası kullanarak barkodları okuma ve kod çözme teknolojisidir. Özel ekipman gerektiren lazer tarayıcıların aksine, kamera tabanlı tarayıcılar kameraya sahip herhangi bir akıllı telefonda çalışır. Mobil geliştirmede, Barcode Scanning ML Kit Barcode Scanning (Google), AVFoundation (Apple), ZXing (açık kaynak) veya Scandit (ticari SDK) aracılığıyla uygulanır. Google ML Kit, 2025'e göre, kütüphane günde 2+ milyar taramayı %98,5 doğrulukla işler.

Önemli Noktalar

  • Barcode Scanning — kamera ile 1D ve 2D kodları okuma
  • ML Kit Barcode — en doğru SDK (%98,5), çoklu kod, tüm formatlar
  • Formatlar — EAN, UPC, QR, Data Matrix, PDF417, Aztec, Code 128
  • Gerçek zamanlı — CameraX ve AVFoundation ile 60 FPS'ye kadar tarama
  • Cihaz üzerinde — tüm işlemler yerel, internet gereksiz

Barcode Scanning Nedir: İlkeler ve Formatlar

Barcode Scanning, bir kamera kullanarak barkodların optik olarak tanınması sürecidir. Algoritma bir görüntü yakalar, kodu bulur (konumlandırma), kodunu çözer (veri çıkarma) ve bir dize değeri döndürür. Modern SDK'lar her yön, boyut ve aydınlatmadaki kodları tarayabilir — kullanıcının sadece kamerayı doğrultması yeterlidir.

Barkod formatları iki gruba ayrılır: 1D (doğrusal) — EAN-13, UPC-A, Code 128, Code 39, ITF, Codabar — 20–30 karaktere kadar içerir, ürünler ve lojistik için kullanılır; 2D (matris) — QR Kod, Data Matrix, PDF417, Aztec — 3000+ karaktere kadar içerir, bağlantılar, biletler, belgeler için kullanılır. ML Kit 14 formatı destekler — tüm yaygın 1D ve 2D formatları.

Data Matrix, QR'a benzer ancak daha kompakt bir 2D koddur. Endüstride (parça işaretleme), elektronik biletlerde (IATA BCBP), tıbbi numunelerde kullanılır. Data Matrix 2335 karaktere kadar içerebilir ve çok küçük yüzeylere — 2x2 mm'ye kadar — basılabilir. QR'dan farklı olarak, Data Matrix'te bulucu desenleri (köşelerde kareler) yoktur ve daha hassas kamera kalibrasyonu gerektirir.

FormatTürMaks. VeriKullanım
EAN-131D13 haneliPerakende ürünleri
QR Kod2D4296 karakterBağlantılar, ödemeler, biletler
Data Matrix2D2335 karakterEndüstri, tıp
PDF4172D2710 karakterBelgeler, biniş kartları
Code 1281D80 karakterLojistik, ulaşım

QR Kod, mobil uygulamalarda en popüler 2D formatıdır. URL, metin, vCard, WiFi yapılandırması, ödeme bilgileri (UPI, SBP) içerir. QR Kod'un 40 sürümü (21x21'den 177x177 modüle) ve 4 hata düzeltme seviyesi (L: %7, M: %15, Q: %25, H: %30) vardır. Mobil uygulamalar için sürüm 2–10 (25x25 – 57x57 modül) kullanın — boyut ve veri arasında optimum denge.

ML Kit Barcode Scanning: Entegrasyon ve Kurulum

ML Kit Barcode Scanning, Android uygulamaları için birincil SDK'dır. ML Kit, görüntüdeki tüm kodları otomatik olarak bulur (kodun merkezde olmasını gerektiren ZXing'in aksine). API, rawValue (metin içeriği), format (kod türü), boundingBox ve cornerPoints (kodun 4 köşe noktası) içeren bir Barcode nesnesi döndürür. ML Kit, tek tarama (single-scan) ve sürekli taramayı (continuous-scan) destekler.

Çoklu barkod modu — ML Kit, tek bir görüntüde birden çok kodu algılayabilir. BarcodeScannerOptions.Builder() aracılığıyla etkinleştirin. Çoklu modda bir Barcode listesi döndürülür. Envanter (ürün gruplarını tarama), masadaki birden çok QR kodunu tanıma için kullanın. Çoklu barkod varsayılan olarak devre dışıdır — yalnızca gerekirse etkinleştirin, çünkü taramayı %20–30 yavaşlatır.

kotlin
// ML Kit Barcode Scanning multi-code mode
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
        }
    }

Format filtreleme — zorunlu optimizasyon. setBarcodeFormats(), ML Kit'in arayacağı formatları sınırlar. Uygulama yalnızca QR kodları tarıyorsa — FORMAT_QR_CODE belirtin. Bu, diğer formatların kod çözme algoritmalarını hariç tutarak taramayı 2–3 kat hızlandırır. Perakende tarayıcılar için — FORMAT_EAN_13 | FORMAT_UPC_A. Lojistik için — FORMAT_CODE_128 | FORMAT_CODE_39 | FORMAT_PDF417.

ZXing vs ML Kit: Kütüphane Karşılaştırması

ZXing (Zebra Crossing), Swift, React Native, Flutter için bağlantı noktaları olan Java (Android) dilinde açık kaynaklı bir kütüphanedir. ZXing, ML Kit'ten önce tarama için fiili standarttı. Tüm popüler formatları destekler, herhangi bir cihazda (Google Play olmayan Huawei dahil) çalışır ve Google Play Services gerektirmez. Dezavantajları: ML Kit'ten 2–3 kat daha yavaş, çerçevenin kenarlarındaki kodları bulamaz, çoklu barkod yok.

ML Kit vs ZXing — ML Kit hız, doğruluk ve UX'te kazanır. ML Kit, kod çerçevenin yalnızca %10'unu kaplıyorsa ve bir köşedeyse bile algılar. ZXing, kodun çerçevenin %50–80'ini kaplamasını ve merkezde olmasını gerektirir. ML Kit, kod konumlandırma için bir sinir ağı (MobileNetV2-SSD) kullanır, ZXing klasik ikili hale getirme ve bulucu desen arama kullanır. Google'a (2025) göre, ML Kit %98,5 doğruluk elde ederken ZXing %92'dir.

ÖzellikML KitZXing
Doğruluk%98,5%92
Hız15–30 ms50–150 ms
Çoklu kodEvetHayır
Google PlayGerekliGerekli değil
Köşedeki kodAlgılarAlgılamaz

ZXing ne zaman seçilmeli: uygulama Huawei cihazlarda (Google Play Services olmadan), Android Go'da (sınırlı bellek) çalışmalıysa veya Play Services olmadan tam çevrimdışı çalışma gerekiyorsa. Diğer tüm durumlarda — ML Kit daha hızlı, daha doğru, entegrasyonu daha kolaydır ve çoklu kod ve kenar algılama sayesinde daha iyi UX sağlar.

kotlin
// ZXing Core: simple scanner
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) {
    // Code not found
}

Alternatif olarak Scandit — %99,5 doğruluk ve 10–20 ms hıza sahip ticari bir SDK. Kendi sinir ağlarını kullanır ve Google Play Services gerektirmez. Fiyat — ayda $400'den başlayan (2019). Scandit, perakende ve lojistikte (Walmart, FedEx) hakimdir. Çoğu mobil uygulama için ML Kit yeterlidir — Scandit yalnızca yüksek hacimli tarama gerektiren kurumsal görevler için haklı çıkar.

Apple AVFoundation: iOS'ta Yerel Tarayıcı

Apple AVFoundation, AVCaptureMetadataOutput aracılığıyla yerel Barcode Scanning sağlar. iOS 7'den itibaren AVFoundation, QR kod taramayı ve iOS 8'den itibaren tüm EAN, UPC, Code 128, PDF417 formatlarını destekler. AVFoundation ek SDK kurulumu gerektirmez — Foundation'ın bir parçasıdır. Tarama, A12+'da Apple Neural Engine aracılığıyla çalışır — hız 10–20 ms, minimum güç tüketimiyle.

AVFoundation'ın avantajları: sıfır bağımlılık, otomatik kamera yönü işleme, yerleşik açık/koyu mod desteği, arka planda çalışma (arka plan modlarıyla). AVFoundation, tarama için otomatik olarak odağı ve pozlamayı ayarlar — geliştiricinin yalnızca captureOutput temsilcisine abone olması gerekir. Dezavantajı: ML Kit'ten daha az ayar — çoklu barkod veya format filtreleme etkinleştirilemez.

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'ta ML Kit vs AVFoundation: ML Kit daha fazla kontrol sağlar — formatları yapılandırabilir, çoklu barkodu etkinleştirebilir, kodları güven seviyesine göre filtreleyebilirsiniz. AVFoundation eski cihazlarda daha hızlıdır (daha az ek yük), ancak iOS < 15'te Data Matrix, Aztec, PDF417'yi desteklemez. iOS 15+ için ML Kit tercih edilir. iOS 12–14 için desteklenmeyen formatlar için AVFoundation + ML Kit'e geri dönüş kullanın.

Scandit: Kurumsal İçin Ticari Çözüm

Scandit, perakende, lojistik ve sağlık hizmetlerine odaklanan ticari bir Barcode Scanning SDK'sıdır. Scandit, çeşitli koşullarda 10+ milyon barkod görüntüsü üzerinde eğitilmiş kendi sinir ağlarını kullanır: parlamalar, hasar, düşük ışık, 45°'ye kadar eğim, yansımalar. Scandit, 15 metreye kadar mesafelerde (depolarda PDF417 için) ve eğri yüzeylerde (kutular, şişeler) kodları tarar.

Scandit özellikleri: SparkScan (hızlı sıralı tarama için tek tarama), MatrixScan (çoklu barkod + taranan öğelerin AR vurgulaması), PickList (onayla barkoda göre ürün arama). Scandit, GS1 DataBar ve Composite Codes dahil 50'den fazla formatı destekler. Hız — kod başına 10–15 ms. Doğruluk — standart aydınlatmada %99,5, düşük ışıkta %97.

kotlin
// Scandit MatrixScan (SDK license required)
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 ücretlidir (ayda $400+), ancak kurumsal özellikler sunar: SparkScan (kurumsal cihazlarda donanım düğmesi), MatrixScan (vurgulama için AR kaplaması), PickList (sesli onay). ML Kit ücretsizdir ve mobil uygulamaların %90'ı için yeterlidir: mağaza tarayıcıları, QR okuyucular, bilet uygulamaları. Scandit yalnızca Zebra/Honeywell cihazlı lojistik terminalleri için haklı çıkar.

Tarama Optimizasyonu: Hız ve Doğruluk

Barcode Scanning optimizasyonu, kamera, çözünürlük ve SDK ayarlarını içerir. Temel kural: daha az piksel — daha hızlı tarama. ML Kit için optimum çözünürlük video için 480p (640x480) ve fotoğraflar için 720p (1280x720)'dir. 1080p'ye yükseltmek, doğruluk artışı olmadan işlemeyi 2–3 kat yavaşlatır. Otomatik çözünürlük yönetimi için ImageAnalysis ile CameraX kullanın.

Odak ve pozlama tarama kalitesi için kritiktir. ML Kit, kamerayı otomatik olarak yapılandırmaz — geliştirici, Camera2 veya CameraX aracılığıyla sürekli otomatik odaklama ve sürekli otomatik pozlamayı etkinleştirmelidir. Otomatik odaklama olmadan, bulanık kodlar doğruluğu %60–70'e düşürür. Yakın mesafe taraması (5–15 cm) için mevcutsa kamera makro modunu kullanın.

Otomatik yakınlaştırma ve bulucu kaplaması — kullanıcı UX iyileştirmeleri. Otomatik yakınlaştırma, kod algılandığında onu büyütür (Google Lens kamerasındaki gibi). Kodun boundingBox'ını analiz ederek ve önizlemeyi ölçeklendirerek uygulanır. Bulucu kaplaması, kameranın nereye doğrultulacağını gösteren grafik bir çerçevedir. Daha iyi UX için, bulunan kodun boundingBox'ını gösterin ve başarılı kod çözmede yeşil renkle vurgulayın.

kotlin
// CameraX + ML Kit: optimized scanner
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 {
                    // Haptic + sound + code highlight
                }
            }
            .addOnCompleteListener { image.close() }
    }
}

Kullanıcıya geri bildirim: titreşim (HapticFeedback), ses (MediaActionSound), görsel vurgulama (Canvas/Overlay). Başarılı bir taramadan sonra, bir sonraki taramadan önce 1000–1500 ms gecikme (kısma) ekleyin — bu, aynı kodda yinelenen tetiklemeleri önler. Sıralı tarama (toplu tarama) için SparkScan yaklaşımını kullanın: her tarama kaydedilir ve bildirilir, 300–500 ms gecikmeyle.

Sıkça Sorulan Sorular

Android'de barkod tarama için en iyi SDK hangisidir?

ML Kit Barcode Scanning Android için en iyi seçimdir: ücretsiz, %98,5 doğruluk, çoklu kod, çerçevenin herhangi bir yerinde algılama. Uygulama Google Play olmayan Huawei cihazlarda çalışacaksa — ZXing (açık kaynak, daha düşük doğruluk) kullanın. Kurumsal lojistik için — Scandit (ücretli, %99,5 doğruluk, SparkScan). Basit bir QR tarayıcı için ZXing veya ML Kit yeterlidir.

ML Kit hangi barkod formatlarını destekler?

ML Kit Barcode Scanning 14 formatı destekler: 1D — EAN-8, EAN-13, UPC-A, UPC-E, Code 39, Code 93, Code 128, ITF, Codabar; 2D — QR Kod, Data Matrix, PDF417, Aztec. GS1 DataBar (RSS-14, RSS-Expanded) da desteklenir. Tam liste Barcode.FORMAT_* dokümantasyonundadır. Formatları sınırlamak için setBarcodeFormats() kullanın — bu, taramayı 2–3 kat hızlandırır.

Barkod tarama nasıl hızlandırılır?

Kamera çözünürlüğünü 480p'ye (640x480) düşürün, sürekli otomatik odağı etkinleştirin, formatları gerekli olanlarla sınırlayın (setBarcodeFormats), FAST performans modunu kullanın. ML Kit için yalnızca gerekli formatları belirtin — ekstra formatları hariç tutmak taramayı 2–3 kat hızlandırır. ZXing için — GlobalHistogramBinarizer yerine HybridBinarizer kullanın (%20 daha hızlı). AVFoundation için — metadataObjectTypes belirtin.

Barkod tarama internet olmadan çalışır mı?

Evet, tüm yerel Barcode Scanning SDK'ları (ML Kit, ZXing, AVFoundation, Scandit) tamamen çevrimdışı çalışır. ML Kit, yalnızca modelin ilk indirilmesi için internet gerektirir (indirilen mod), ardından model cihazda önbelleğe alınır. AVFoundation, iOS'a yerleşiktir, internet gerektirmez. ZXing, Play Services olmadan tamamen çevrimdışıdır. Bulut tarama (Google Cloud Vision) mobil uygulamalarda kullanılmaz.

Hasar görmüş veya bulanık barkodlar taranabilir mi?

ML Kit ve Scandit, sinir ağı algoritmaları sayesinde hasarlı kodlar için yerleşik düzeltmeye sahiptir. ML Kit, hasarlı bir kodun (çizikler, yırtıklar) %30'a kadarını geri yükler. Scandit — kusurlu kodlar üzerinde eğitim sayesinde %50'ye kadar. ZXing, hasarlı kodları neredeyse hiç geri yüklemez — net bir görüntü gerektirir. Kusurlu kodları taramak için ACCURATE performans moduyla Scandit veya ML Kit kullanın.

Özet

  • Barcode Scanning — akıllı telefon kamerasıyla 1D/2D kodlarının algılanması ve kod çözümü
  • ML Kit — %98,5 doğruluk, çoklu kod, çerçevenin herhangi bir yerinde algılama, ücretsiz
  • ZXing — açık kaynak, her cihazla uyumlu, %92 doğruluk
  • AVFoundation — yerel iOS tarayıcısı, sisteme yerleşik (iOS 7+)
  • Scandit — kurumsal SDK (%99,5), SparkScan, MatrixScan, ayda $400'den
  • Optimizasyon — 480p çözünürlük, otomatik odak, format sınırlama, dokunsal geri bildirim
  • Tüm formatlar — EAN, UPC, QR, Data Matrix, PDF417, Aztec, Code 128

Anahtar teslim bir mobil uygulama geliştireceğiz

IT Sectr, 2017'den beri girişimler ve işletmeler için iOS ve Android uygulamaları oluşturmaktadır. Size danışmanlık yapacak ve en iyi çözümü önereceğiz.

Projeyi tartış

Ayrıca okuyun