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 คือ SDK หลักสำหรับแอปพลิเคชัน Android ML Kit จะค้นหาโค้ดทั้งหมดในภาพโดยอัตโนมัติ (ต่างจาก ZXing ที่ต้องให้โค้ดอยู่ตรงกลาง) API ส่งคืนออบเจกต์ Barcode พร้อม rawValue (เนื้อหาข้อความ), format (ประเภทโค้ด), boundingBox และ cornerPoints (4 จุดมุมของโค้ด) ML Kit รองรับการสแกนครั้งเดียว (single-scan) และการสแกนต่อเนื่อง (continuous-scan)
โหมดหลายบาร์โค้ด — 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 ZXing เป็นมาตรฐานโดยพฤตินัยสำหรับการสแกนก่อนที่ ML Kit จะมา รองรับทุกรูปแบบยอดนิยม ทำงานบนทุกอุปกรณ์ (รวมถึง Huawei ที่ไม่มี Google Play) และไม่ต้องการ 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% เทียบกับ 92% ของ ZXing
| คุณลักษณะ | 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 เป็นทางเลือก — SDK เชิงพาณิชย์ที่มีความแม่นยำ 99.5% และความเร็ว 10–20 มิลลิวินาที ใช้โครงข่ายประสาทเทียมของตนเองและไม่ต้องใช้ Google Play Services ราคา — เริ่มต้น $400/เดือน (2019) Scandit ครองตลาดค้าปลีกและโลจิสติกส์ (Walmart, FedEx) สำหรับแอปพลิเคชันมือถือส่วนใหญ่ ML Kit ก็เพียงพอแล้ว — Scandit เหมาะสมสำหรับงานระดับองค์กรที่มีการสแกนปริมาณมากเท่านั้น
Apple AVFoundation ให้บริการ Barcode Scanning ดั้งเดิมผ่าน AVCaptureMetadataOutput ตั้งแต่ iOS 7, AVFoundation รองรับการสแกน QR โค้ด และตั้งแต่ iOS 8 — ทุกรูปแบบ EAN, UPC, Code 128, PDF417 AVFoundation ไม่ต้องการติดตั้ง SDK เพิ่มเติม — เป็นส่วนหนึ่งของ Foundation การสแกนทำงานผ่าน Apple Neural Engine บน A12+ — ความเร็ว 10–20 มิลลิวินาทีโดยใช้พลังงานน้อยที่สุด
ข้อดีของ AVFoundation: ไม่มีการพึ่งพา, การจัดการทิศทางกล้องอัตโนมัติ, รองรับโหมดสว่าง/มืดในตัว, การทำงานพื้นหลัง (กับ background modes) AVFoundation ปรับโฟกัสและแสงอัตโนมัติสำหรับการสแกน — นักพัฒนาเพียงแค่สมัครรับ delegate 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 ?? "")
}
}
ML Kit vs AVFoundation บน iOS: ML Kit ให้การควบคุมมากกว่า — สามารถกำหนดค่ารูปแบบ เปิดหลายบาร์โค้ด กรองโค้ดตามความเชื่อมั่นได้ AVFoundation เร็วกว่าบนอุปกรณ์รุ่นเก่า (ค่าใช้จ่ายน้อยกว่า) แต่ไม่รองรับ Data Matrix, Aztec, PDF417 บน iOS < 15 สำหรับ iOS 15+ ควรใช้ ML Kit สำหรับ iOS 12–14 ให้ใช้ AVFoundation + การสำรองไปยัง ML Kit สำหรับรูปแบบที่ไม่รองรับ
Scandit คือ SDK เชิงพาณิชย์สำหรับ Barcode Scanning ที่เน้นการค้าปลีก โลจิสติกส์ และการดูแลสุขภาพ 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 เท่าโดยไม่เพิ่มความแม่นยำ ใช้ CameraX กับ ImageAnalysis เพื่อการจัดการความละเอียดอัตโนมัติ
โฟกัสและการเปิดรับแสง มีความสำคัญต่อคุณภาพการสแกน 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%, หลายโค้ด, การตรวจจับในทุกส่วนของเฟรม หากแอปพลิเคชันต้องทำงานบนอุปกรณ์ Huawei ที่ไม่มี Google Play — ให้ใช้ 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 — ใช้ HybridBinarizer แทน GlobalHistogramBinarizer (เร็วกว่า 20%) สำหรับ AVFoundation — ระบุ metadataObjectTypes
ใช่, 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 สร้างแอปพลิเคชัน iOS และ Android สำหรับสตาร์ทอัพและธุรกิจตั้งแต่ปี 2017 เราจะให้คำแนะนำและเสนอวิธีแก้ปัญหาที่ดีที่สุดแก่คุณ