Barcode Scanning मोबाइल डिवाइस के कैमरे की मदद से बारकोड को पढ़ने और डिकोड करने की तकनीक है। लेज़र स्कैनर के विपरीत जिन्हें विशेष उपकरण की आवश्यकता होती है, कैमरा-आधारित स्कैनर कैमरे वाले किसी भी स्मार्टफोन पर काम करते हैं। मोबाइल डेवलपमेंट में, 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 एक 2D कोड है जो QR जैसा लेकिन अधिक कॉम्पैक्ट है। इसका उपयोग उद्योग (भागों की मार्किंग), इलेक्ट्रॉनिक टिकट (IATA BCBP), चिकित्सा नमूनों में किया जाता है। Data Matrix में 2335 अक्षरों तक हो सकते हैं और इसे बहुत छोटी सतहों पर मुद्रित किया जा सकता है — 2x2 मिमी तक। QR के विपरीत, Data Matrix में फ़ाइंडर पैटर्न (कोनों में वर्ग) नहीं होते और इसके लिए अधिक सटीक कैमरा कैलिब्रेशन की आवश्यकता होती है।
| प्रारूप | प्रकार | अधिकतम डेटा | उपयोग |
|---|---|---|---|
| EAN-13 | 1D | 13 अंक | दुकानों में उत्पाद |
| QR Code | 2D | 4296 अक्षर | लिंक, भुगतान, टिकट |
| Data Matrix | 2D | 2335 अक्षर | उद्योग, चिकित्सा |
| PDF417 | 2D | 2710 अक्षर | दस्तावेज़, बोर्डिंग पास |
| Code 128 | 1D | 80 अक्षर | लॉजिस्टिक्स, परिवहन |
QR Code मोबाइल एप्लिकेशन में सबसे लोकप्रिय 2D प्रारूप है। इसमें 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 Android एप्लिकेशन के लिए प्राथमिक SDK है। ML Kit स्वचालित रूप से छवि में सभी कोड ढूँढता है (ZXing के विपरीत जिसमें कोड केंद्र में होना आवश्यक है)। API एक Barcode ऑब्जेक्ट लौटाता है जिसमें rawValue (टेक्स्ट सामग्री), format (कोड प्रकार), boundingBox और cornerPoints (कोड के 4 कोने बिंदु) होते हैं। ML Kit सिंगल-स्कैन (एक फ्रेम) और कंटीन्यूअस-स्कैन (वीडियो स्ट्रीम) का समर्थन करता है।
मल्टी-बारकोड मोड — ML Kit एक छवि में कई कोड का पता लगा सकता है। BarcodeScannerOptions.Builder() के माध्यम से सक्षम करें। मल्टी-मोड में Barcode की सूची लौटाई जाती है। इन्वेंट्री (उत्पादों के बैच स्कैन करना), टेबल पर कई QR कोड पहचानने के लिए उपयोग करें। मल्टी-बारकोड डिफ़ॉल्ट रूप से बंद है — केवल ज़रूरत होने पर ही सक्षम करें क्योंकि इससे स्कैनिंग 20–30% धीमी हो जाती है।
// 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
}
}
प्रारूप फ़िल्टरिंग — अनिवार्य ऑप्टिमाइज़ेशन। 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) Java (Android) में एक ओपन-सोर्स लाइब्रेरी है जिसके Swift, React Native, Flutter पर पोर्ट हैं। ML Kit के आने से पहले ZXing स्कैनिंग का डी-फैक्टो मानक था। यह सभी लोकप्रिय प्रारूपों का समर्थन करता है, किसी भी डिवाइस (Google Play के बिना Huawei सहित) पर काम करता है, और Google Play Services की आवश्यकता नहीं है। नुकसान: ML Kit से 2–3 गुना धीमा, फ्रेम के किनारों पर कोड नहीं ढूँढता, कोई मल्टी-बारकोड नहीं।
ML Kit vs ZXing — ML Kit गति, सटीकता और UX में जीतता है। ML Kit कोड का पता लगाता है भले ही वह फ्रेम का 10% ही घेरता हो और कोने में हो। ZXing के लिए आवश्यक है कि कोड फ्रेम का 50–80% घेरे और केंद्र में हो। ML Kit कोड स्थानीयकरण के लिए न्यूरल नेटवर्क (MobileNetV2-SSD) का उपयोग करता है, ZXing क्लासिक बाइनराइज़ेशन और फ़ाइंडर पैटर्न खोज का उपयोग करता है। Google (2025) के अनुसार, ML Kit 98.5% सटीकता देता है जबकि ZXing 92%।
| विशेषता | 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: 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
}
Scandit एक विकल्प के रूप में — 99.5% सटीकता और 10–20 मि.से. गति वाला व्यावसायिक SDK। यह स्वयं की न्यूरल नेटवर्क का उपयोग करता है और Google Play Services की आवश्यकता नहीं है। मूल्य — $400/माह से (2019)। Scandit रिटेल और लॉजिस्टिक्स (Walmart, FedEx) में हावी है। अधिकांश मोबाइल एप्लिकेशन के लिए ML Kit पर्याप्त है — Scandit केवल उच्च-मात्रा स्कैनिंग वाले एंटरप्राइज़ कार्यों के लिए उचित है।
Apple AVFoundation AVCaptureMetadataOutput के माध्यम से मूल Barcode Scanning प्रदान करता है। iOS 7 से, AVFoundation QR कोड स्कैनिंग का समर्थन करता है, और iOS 8 से — सभी प्रारूप EAN, UPC, Code 128, PDF417। AVFoundation को अतिरिक्त SDK स्थापित करने की आवश्यकता नहीं है — यह Foundation का हिस्सा है। स्कैनिंग A12+ पर Apple Neural Engine के माध्यम से काम करती है — गति 10–20 मि.से. न्यूनतम ऊर्जा खपत के साथ।
AVFoundation के लाभ: शून्य निर्भरता, स्वचालित कैमरा ओरिएंटेशन प्रबंधन, अंतर्निहित लाइट/डार्क मोड समर्थन, पृष्ठभूमि में कार्य (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 ?? "")
}
}
iOS पर ML Kit vs AVFoundation: ML Kit अधिक नियंत्रण देता है — प्रारूप कॉन्फ़िगर कर सकते हैं, मल्टी-बारकोड सक्षम कर सकते हैं, विश्वास के आधार पर कोड फ़िल्टर कर सकते हैं। AVFoundation पुराने डिवाइसों पर तेज़ है (कम ओवरहेड), लेकिन iOS < 15 पर Data Matrix, Aztec, PDF417 का समर्थन नहीं करता। iOS 15+ के लिए ML Kit बेहतर है। iOS 12–14 के लिए AVFoundation + असमर्थित प्रारूपों के लिए ML Kit पर फ़ॉलबैक का उपयोग करें।
Scandit Barcode Scanning के लिए एक व्यावसायिक SDK है जो रिटेल, लॉजिस्टिक्स और स्वास्थ्य सेवा पर केंद्रित है। Scandit विभिन्न परिस्थितियों में 10+ मिलियन बारकोड छवियों पर प्रशिक्षित स्वयं की न्यूरल नेटवर्क का उपयोग करता है: चमक, क्षति, कम रोशनी, 45° तक झुकाव, प्रतिबिंब। Scandit 15 मीटर तक की दूरी पर कोड स्कैन करता है (गोदामों में PDF417 के लिए) और घुमावदार सतहों (डिब्बे, बोतलें) पर।
Scandit की क्षमताएँ: SparkScan (तेज़ अनुक्रमिक स्कैनिंग के लिए सिंगल-स्कैन), MatrixScan (मल्टी-बारकोड + स्कैन किए गए आइटम की AR हाइलाइटिंग), PickList (पुष्टि के साथ बारकोड द्वारा उत्पाद खोज)। Scandit 50+ प्रारूपों का समर्थन करता है, जिसमें GS1 DataBar और Composite Codes शामिल हैं। गति — 10–15 मि.से. प्रति कोड। सटीकता — मानक रोशनी में 99.5%, खराब रोशनी में 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 भुगतान वाला ($400+/माह) है, लेकिन एंटरप्राइज़ सुविधाएँ प्रदान करता है: SparkScan (कॉर्पोरेट डिवाइसों पर हार्डवेयर बटन), MatrixScan (हाइलाइट करने के लिए AR ओवरले), PickList (ध्वनि पुष्टि)। ML Kit मुफ़्त है और 90% मोबाइल एप्लिकेशन के लिए पर्याप्त है: स्टोर स्कैनर, QR रीडर, टिकट एप्लिकेशन। Scandit केवल Zebra/Honeywell डिवाइस वाले लॉजिस्टिक्स टर्मिनलों के लिए उचित है।
Barcode Scanning ऑप्टिमाइज़ेशन में कैमरा, रिज़ॉल्यूशन और SDK सेटिंग्स शामिल हैं। मुख्य नियम: कम पिक्सेल — तेज़ स्कैनिंग। ML Kit के लिए इष्टतम रिज़ॉल्यूशन वीडियो के लिए 480p (640x480) और फ़ोटो के लिए 720p (1280x720) है। 1080p तक बढ़ाने से सटीकता में सुधार के बिना प्रसंस्करण 2–3 गुना धीमा हो जाता है। स्वचालित रिज़ॉल्यूशन प्रबंधन के लिए ImageAnalysis के साथ CameraX का उपयोग करें।
फ़ोकस और एक्सपोज़र स्कैनिंग गुणवत्ता के लिए महत्वपूर्ण हैं। ML Kit कैमरा स्वचालित रूप से कॉन्फ़िगर नहीं करता — डेवलपर को Camera2 या CameraX के माध्यम से कंटीन्यूअस ऑटो-फ़ोकस और कंटीन्यूअस ऑटो-एक्सपोज़र सक्षम करना होगा। ऑटोफ़ोकस के बिना, धुंधले कोड सटीकता को 60–70% तक कम कर देते हैं। करीब से स्कैनिंग (5–15 सेमी) के लिए यदि उपलब्ध हो तो कैमरा मैक्रो मोड का उपयोग करें।
ऑटो-ज़ूम और फ़ाइंडर ओवरले — उपयोगकर्ता UX सुधार। ऑटो-ज़ूम कोड का पता चलने पर उसे बड़ा करता है (जैसे Google Lens कैमरे में)। कोड के boundingBox का विश्लेषण करके और पूर्वावलोकन को स्केल करके कार्यान्वित किया जाता है। फ़ाइंडर ओवरले एक ग्राफ़िकल फ्रेम है जो दिखाता है कि कैमरा कहाँ इंगित करना है। बेहतर UX के लिए, मिले कोड का boundingBox दिखाएँ और सफल डिकोडिंग पर इसे हरे रंग में हाइलाइट करें।
// 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() }
}
}
उपयोगकर्ता को फ़ीडबैक: कंपन (HapticFeedback), ध्वनि (MediaActionSound), दृश्य हाइलाइटिंग (Canvas/Overlay)। सफल स्कैन के बाद, अगले स्कैन से पहले 1000–1500 मि.से. की देरी (थ्रॉटलिंग) जोड़ें — यह एक ही कोड पर डुप्लिकेट ट्रिगर को रोकता है। अनुक्रमिक स्कैनिंग (बैच स्कैनिंग) के लिए SparkScan दृष्टिकोण का उपयोग करें: प्रत्येक स्कैन रिकॉर्ड किया जाता है और घोषित किया जाता है, 300–500 मि.से. की देरी के साथ।
अक्सर पूछे जाने वाले प्रश्न
ML Kit Barcode Scanning Android के लिए सबसे अच्छा विकल्प है: मुफ़्त, 98.5% सटीकता, मल्टी-कोड, फ्रेम के किसी भी हिस्से में पता लगाना। यदि एप्लिकेशन Google Play के बिना Huawei डिवाइसों पर चलना चाहिए — ZXing (ओपन-सोर्स, कम सटीकता) का उपयोग करें। एंटरप्राइज़ लॉजिस्टिक्स के लिए — 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) तक कम करें, कंटीन्यूअस ऑटो-फ़ोकस सक्षम करें, प्रारूपों को आवश्यक तक सीमित करें (setBarcodeFormats), FAST प्रदर्शन मोड का उपयोग करें। ML Kit के लिए केवल आवश्यक प्रारूप निर्दिष्ट करें — अतिरिक्त प्रारूपों को बाहर करने से स्कैनिंग 2–3 गुना तेज हो जाती है। ZXing के लिए — GlobalHistogramBinarizer के बजाय HybridBinarizer का उपयोग करें (20% तेज़)। AVFoundation के लिए — metadataObjectTypes निर्दिष्ट करें।
हाँ, सभी स्थानीय Barcode Scanning SDK (ML Kit, ZXing, AVFoundation, Scandit) पूरी तरह से ऑफ़लाइन काम करते हैं। ML Kit को केवल मॉडल के पहले डाउनलोड के लिए इंटरनेट की आवश्यकता होती है (डाउनलोड किया गया मोड), जिसके बाद मॉडल डिवाइस पर कैश हो जाता है। AVFoundation iOS में निर्मित है, इंटरनेट की आवश्यकता नहीं है। ZXing Play Services के बिना पूरी तरह से ऑफ़लाइन है। क्लाउड स्कैनिंग (Google Cloud Vision) मोबाइल एप्लिकेशन में उपयोग नहीं की जाती।
ML Kit और Scandit में न्यूरल नेटवर्क एल्गोरिदम की बदौलत क्षतिग्रस्त कोड के लिए अंतर्निहित सुधार है। ML Kit 30% तक क्षतिग्रस्त कोड (खरोंच, दरार) को पुनर्स्थापित करता है। Scandit — दोषपूर्ण कोड पर प्रशिक्षण के कारण 50% तक। ZXing व्यावहारिक रूप से क्षतिग्रस्त कोड को पुनर्स्थापित नहीं करता — इसे स्पष्ट छवि की आवश्यकता होती है। दोषपूर्ण कोड स्कैन करने के लिए Scandit या ML Kit का ACCURATE प्रदर्शन मोड के साथ उपयोग करें।
सारांश
हम एक मोबाइल एप्लिकेशन टर्नकी विकसित करेंगे
IT Sectr 2017 से स्टार्टअप और व्यवसायों के लिए iOS और Android एप्लिकेशन बनाता है। हम आपको सलाह देंगे और सर्वोत्तम समाधान प्रस्तावित करेंगे।
यह भी पढ़ें