Barcode Scanning একটি মোবাইল ডিভাইসের ক্যামেরা ব্যবহার করে বারকোড পড়া এবং ডিকোড করার প্রযুক্তি। লেজার স্ক্যানারের বিপরীতে যেগুলির বিশেষায়িত সরঞ্জাম প্রয়োজন, ক্যামেরা-ভিত্তিক স্ক্যানারগুলি ক্যামেরা সহ যেকোনো স্মার্টফোনে কাজ করে। মোবাইল ডেভেলপমেন্টে, Barcode Scanning বাস্তবায়িত হয় ML Kit Barcode Scanning (Google), AVFoundation (Apple), ZXing (ওপেন-সোর্স) বা 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 কার্যত ক্ষতিগ্রস্ত কোড পুনরুদ্ধার করে না — এটির স্পষ্ট ছবি প্রয়োজন। ত্রুটিপূর্ণ কোড স্ক্যান করতে ACCURATE পারফরম্যান্স মোড সহ Scandit বা ML Kit ব্যবহার করুন।
সারাংশ
আমরা একটি মোবাইল অ্যাপ্লিকেশন টার্নকি তৈরি করব
IT Sectr 2017 সাল থেকে স্টার্টআপ এবং ব্যবসার জন্য iOS এবং Android অ্যাপ্লিকেশন তৈরি করে। আমরা আপনাকে পরামর্শ দেব এবং সেরা সমাধান প্রস্তাব করব।
আরও পড়ুন