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, 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.
| Format | Tür | Maks. Veri | Kullanım |
|---|---|---|---|
| EAN-13 | 1D | 13 haneli | Perakende ürünleri |
| QR Kod | 2D | 4296 karakter | Bağlantılar, ödemeler, biletler |
| Data Matrix | 2D | 2335 karakter | Endüstri, tıp |
| PDF417 | 2D | 2710 karakter | Belgeler, biniş kartları |
| Code 128 | 1D | 80 karakter | Lojistik, 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, 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.
// 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 (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.
| Özellik | ML Kit | ZXing |
|---|---|---|
| Doğruluk | %98,5 | %92 |
| Hız | 15–30 ms | 50–150 ms |
| Çoklu kod | Evet | Hayır |
| Google Play | Gerekli | Gerekli değil |
| Köşedeki kod | Algılar | Algı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.
// 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, 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.
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, 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.
// 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.
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.
// 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
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 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.
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.
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.
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
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.
Ayrıca okuyun