Barcode Scanning sa mga app — ano ito, mga uri ng code at ML Kit

May-akda: IT Sectr Nai-publish: 2026-07-18 Oras ng pagbabasa: 10 min

Barcode Scanning — teknolohiya ng pagbasa at pag-decode ng mga barcode gamit ang camera ng mobile device. Hindi tulad ng laser scanners, na nangangailangan ng espesyal na kagamitan, gumagana ang mga camera scanner sa kahit anong smartphone na may camera. Sa mobile development, ang Barcode Scanning ay ipinapatupad sa pamamagitan ng ML Kit Barcode Scanning (Google), AVFoundation (Apple), ZXing (open-source) o Scandit (komersyal na SDK). Ayon sa datos ng Google ML Kit, 2025, pinoproseso ng library ang 2+ bilyong pag-scan bawat araw na may 98.5% katumpakan.

Mga Pangunahing Punto

  • Barcode Scanning — pagbasa ng one-dimensional at two-dimensional na code gamit ang camera
  • ML Kit Barcode — pinakatumpak na SDK (98.5%), multi-code, lahat ng format
  • Mga format — EAN, UPC, QR, Data Matrix, PDF417, Aztec, Code 128
  • Real-time — pag-scan hanggang 60 FPS gamit ang CameraX at AVFoundation
  • On-device — lahat ng computation ay lokal, walang internet

Ano ang Barcode Scanning: mga prinsipyo at format

Barcode Scanning — proseso ng optical recognition ng mga barcode gamit ang camera. Kinukuha ng algorithm ang imahe, hinahanap ang code dito (lokalisasyon), dinidikodigo ito (pagkuha ng datos) at ibinabalik ang string value. Ang mga modernong SDK ay nag-scan ng mga code sa kahit anong oryentasyon, laki at ilaw — sapat na para ituro ng user ang camera.

Mga format ng barcode ay nahahati sa dalawang grupo: 1D (linear) — EAN-13, UPC-A, Code 128, Code 39, ITF, Codabar — naglalaman ng hanggang 20–30 character, ginagamit para sa mga produkto, logistics; 2D (matrix) — QR Code, Data Matrix, PDF417, Aztec — naglalaman ng hanggang 3000+ character, ginagamit para sa mga link, tiket, dokumento. Sinusuportahan ng ML Kit ang 14 na format — lahat ng karaniwang 1D at 2D.

Data Matrix — two-dimensional na code, katulad ng QR, ngunit mas compact. Ginagamit sa industriya (pagmarka ng mga piyesa), electronic tickets (IATA BCBP), medical samples. Ang Data Matrix ay maaaring maglaman ng hanggang 2335 character at inilalapat sa napakaliit na surface — hanggang 2x2 mm. Hindi tulad ng QR, walang finder patterns (mga parisukat sa mga sulok) ang Data Matrix at nangangailangan ng mas tumpak na camera calibration.

FormatUriMax. datosGamit
EAN-131D13 digitMga produkto sa tindahan
QR Code2D4296 characterMga link, pagbabayad, tiket
Data Matrix2D2335 characterIndustriya, medisina
PDF4172D2710 characterMga dokumento, boarding pass
Code 1281D80 characterLogistics, transportasyon

QR Code — pinakasikat na two-dimensional na format sa mga mobile app. Naglalaman ng URL, text, vCard, WiFi configuration, impormasyon sa pagbabayad (UPI, SBP). Ang QR Code ay may 40 bersyon (mula 21x21 hanggang 177x177 modules) at 4 na antas ng error correction (L: 7%, M: 15%, Q: 25%, H: 30%). Para sa mga mobile app gamitin ang bersyon 2–10 (25x25 – 57x57 modules) — pinakamainam na balanse ng laki at datos.

ML Kit Barcode Scanning: pagsasama at pag-setup

ML Kit Barcode Scanning — pangunahing SDK para sa mga Android app. Awtomatikong hinahanap ng ML Kit ang lahat ng code sa imahe (hindi tulad ng ZXing, na nangangailangan na nasa gitna ang code). Ibinabalik ng API ang Barcode object na may rawValue (textual content), format (uri ng code), boundingBox at cornerPoints (4 na punto ng mga sulok ng code). Sinusuportahan ng ML Kit ang single-scan (isang frame) at continuous-scan (video stream).

Multi-barcode mode — kayang makita ng ML Kit ang ilang code sa isang imahe. I-activate sa pamamagitan ng BarcodeScannerOptions.Builder(). Sa multi mode, ibinabalik ang listahan ng Barcode. Gamitin para sa inventory (pag-scan ng pack ng mga produkto), pagkilala ng ilang QR code sa mesa. Sa default, naka-off ang multi-barcode — i-activate lang kung kailangan, dahil pinapabagal nito ang pag-scan ng 20–30%.

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
        }
    }

Pag-filter ng mga format — mandatoryong pag-optimize. Nililimitahan ng setBarcodeFormats() ang mga format na hahanapin ng ML Kit. Kung ang app ay nag-scan lang ng QR codes — tukuyin ang FORMAT_QR_CODE. Pinapabilis nito ang pag-scan ng 2–3 beses sa pamamagitan ng pagbubukod ng mga decoding algorithm ng ibang format. Para sa retail scanner — FORMAT_EAN_13 | FORMAT_UPC_A. Para sa logistics — FORMAT_CODE_128 | FORMAT_CODE_39 | FORMAT_PDF417.

ZXing vs ML Kit: paghahambing ng mga library

ZXing (Zebra Crossing) — open-source library sa Java (Android) na may mga port sa Swift, React Native, Flutter. Ang ZXing — de facto standard para sa pag-scan bago dumating ang ML Kit. Sinusuportahan ang lahat ng sikat na format, gumagana sa kahit anong device (kasama ang Huawei na walang Google Play), hindi nangangailangan ng Google Play Services. Mga kahinaan: 2–3 beses na mas mabagal kaysa sa ML Kit, hindi nakakahanap ng mga code sa gilid ng frame, walang multi-barcode.

ML Kit vs ZXing — nananalo ang ML Kit sa bilis, katumpakan at UX. Nakikita ng ML Kit ang code kahit na sumasakop ito ng 10% ng frame at nasa sulok. Ang ZXing ay nangangailangan na sumasakop ang code ng 50–80% ng frame at nasa gitna. Gumagamit ang ML Kit ng neural network (MobileNetV2-SSD) para sa lokalisasyon ng code, ang ZXing — klasikong binarization at paghahanap ng finder patterns. Ayon sa datos ng Google (2025), nagbibigay ang ML Kit ng 98.5% katumpakan laban sa 92% ng ZXing.

KatangianML KitZXing
Katumpakan98.5%92%
Bilis15–30 ms50–150 ms
Multi-codeOoHindi
Google PlayKinakailanganHindi kinakailangan
Code sa sulokNakikitaHindi nakikita

Kailan pipiliin ang ZXing: kung ang app ay dapat gumana sa mga Huawei device (walang Google Play Services), sa Android Go (limitadong memory), o kung kailangan ng ganap na offline na paggana nang walang Play Services. Sa lahat ng iba pang kaso — mas mabilis, mas tumpak, mas madaling isama ang ML Kit at nagbibigay ng mas mahusay na UX dahil sa multi-code at detection sa gilid.

kotlin
// ZXing Core: simpleng 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) {
    // Hindi nahanap ang code
}

Scandit bilang alternatibo — komersyal na SDK na may 99.5% katumpakan at 10–20 ms bilis. Gumagamit ng sariling neural network at hindi nangangailangan ng Google Play Services. Presyo — mula $400/buwan (2019). Nangunguna ang Scandit sa retail at logistics (Walmart, FedEx). Para sa karamihan ng mobile app sapat na ang ML Kit — makatwiran lang ang Scandit para sa enterprise tasks na may high-volume na pag-scan.

Apple AVFoundation: native scanner sa iOS

Apple AVFoundation ay nagbibigay ng native Barcode Scanning sa pamamagitan ng AVCaptureMetadataOutput. Mula sa iOS 7, sinusuportahan ng AVFoundation ang pag-scan ng QR codes, at mula sa iOS 8 — lahat ng format na EAN, UPC, Code 128, PDF417. Hindi nangangailangan ng pag-install ng karagdagang SDK ang AVFoundation — bahagi ito ng Foundation. Gumagana ang pag-scan sa pamamagitan ng Apple Neural Engine sa A12+ — bilis 10–20 ms na may pinakamababang konsumo ng enerhiya.

Mga bentahe ng AVFoundation: zero dependence, awtomatikong pagproseso ng oryentasyon ng camera, built-in na suporta sa light/dark mode, paggana sa background (may background modes). Awtomatikong inaayos ng AVFoundation ang autofocus at exposure para sa pag-scan — ang developer ay kailangan lang mag-subscribe sa delegate na captureOutput. Kahinaan: mas kaunting setting kaysa sa ML Kit — hindi maaaring i-on ang multi-barcode o format filter.

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 ?? "")
    }
}

ML Kit vs AVFoundation sa iOS: nagbibigay ang ML Kit ng mas maraming kontrol — maaaring i-configure ang mga format, i-on ang multi-barcode, i-filter ang mga code ayon sa confidence. Mas mabilis ang AVFoundation sa mga lumang device (mas kaunting overhead), ngunit hindi sinusuportahan ang Data Matrix, Aztec, PDF417 sa iOS < 15. Para sa iOS 15+ mas mainam ang ML Kit. Para sa iOS 12–14 gamitin ang AVFoundation + fallback sa ML Kit para sa mga hindi sinusuportahang format.

Scandit: komersyal na solusyon para sa enterprise

Scandit — komersyal na SDK para sa Barcode Scanning na may pokus sa retail, logistics at healthcare. Gumagamit ang Scandit ng sariling neural network, na sinanay sa 10+ milyong larawan ng barcode sa iba't ibang kondisyon: glares, pinsala, mahinang ilaw, pagtabingi hanggang 45°, mga reflection. Nag-scan ang Scandit ng mga code sa layo hanggang 15 metro (para sa PDF417 sa mga bodega) at sa mga bilog na surface (lata, bote).

Mga kakayahan ng Scandit: SparkScan (single-scan para sa mabilis na sunod-sunod na pag-scan), MatrixScan (multi-barcode + AR highlight ng mga na-scan), PickList (paghahanap ng produkto sa pamamagitan ng barcode na may kumpirmasyon). Sinusuportahan ng Scandit ang 50+ format, kasama ang GS1 DataBar at Composite Codes. Bilis — 10–15 ms bawat code. Katumpakan — 99.5% sa karaniwang ilaw, 97% sa mahinang ilaw.

kotlin
// Scandit MatrixScan (kinakailangan ang SDK license)
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: may bayad ang Scandit ($400+/buwan), ngunit nagbibigay ng enterprise features: SparkScan (hardware button sa corporate devices), MatrixScan (AR overlay para sa highlight), PickList (voice confirmation). Libre ang ML Kit at sapat para sa 90% ng mobile app: mga scanner sa tindahan, QR reader, ticket app. Makatwiran lang ang Scandit para sa logistics terminals na may Zebra/Honeywell devices.

Pag-optimize ng pag-scan: bilis at katumpakan

Pag-optimize ng Barcode Scanning ay kasama ang pag-aayos ng camera, resolution at SDK. Pangunahing tuntunin: mas kaunting pixels — mas mabilis na pag-scan. Para sa ML Kit ang optimal na resolution ay 480p (640x480) para sa video at 720p (1280x720) para sa larawan. Ang pagtaas sa 1080p ay nagpapabagal ng processing ng 2–3 beses nang walang pagtaas ng katumpakan. Gamitin ang CameraX na may ImageAnalysis para sa awtomatikong pamamahala ng resolution.

Focus at exposure ay kritikal para sa kalidad ng pag-scan. Hindi awtomatikong inaayos ng ML Kit ang camera — dapat i-on ng developer ang continuous auto-focus at continuous auto-exposure sa pamamagitan ng Camera2 o CameraX. Kung walang autofocus, ang malabong code ay nagbabawas ng katumpakan sa 60–70%. Para sa pag-scan mula sa malapit (5–15 cm) gamitin ang macro mode ng camera, kung available.

Auto-zoom at finder overlay — mga pagpapahusay ng UX ng user. Inilalapit ng Auto-zoom ang code kapag natuklasan ito (tulad ng sa Google Lens camera). Ipinapatupad sa pamamagitan ng pagsusuri ng boundingBox ng code at pag-zoom ng preview. Ang Finder overlay — graphic frame na nagpapakita kung saan ituturo ang camera. Para sa mas magandang UX, ipakita ang boundingBox ng nahanap na code at i-highlight ito ng berde sa matagumpay na pag-decode.

kotlin
// CameraX + ML Kit: na-optimize na 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 + tunog + highlight ng code
                }
            }
            .addOnCompleteListener { image.close() }
    }
}

Feedback sa user: vibration (HapticFeedback), tunog (MediaActionSound), visual highlight (Canvas/Overlay). Pagkatapos ng matagumpay na pag-scan, magdagdag ng delay na 1000–1500 ms (throttling) bago ang susunod na pag-scan — pinipigilan nito ang duplicate triggers sa parehong code. Para sa sequential scanning (pag-scan ng pack ng produkto) gamitin ang SparkScan approach: bawat scan ay nire-record at may voice, delay 300–500 ms.

Mga Madalas Itanong

Aling SDK para sa pag-scan ng barcode ang pinakamahusay sa Android?

ML Kit Barcode Scanning — pinakamahusay na pagpipilian para sa Android: libre, 98.5% katumpakan, multi-code, detection sa kahit anong bahagi ng frame. Kung ang app ay dapat gumana sa mga Huawei device na walang Google Play — gamitin ang ZXing (open-source, mas mababang katumpakan). Para sa enterprise logistics — Scandit (may bayad, 99.5% katumpakan, SparkScan). Para sa simpleng QR scanner sapat na ang ZXing o ML Kit.

Anong mga format ng barcode ang sinusuportahan ng ML Kit?

Sinusuportahan ng ML Kit Barcode Scanning ang 14 na format: 1D — EAN-8, EAN-13, UPC-A, UPC-E, Code 39, Code 93, Code 128, ITF, Codabar; 2D — QR Code, Data Matrix, PDF417, Aztec. Sinusuportahan din ang GS1 DataBar (RSS-14, RSS-Expanded). Buong listahan — sa dokumentasyon ng Barcode.FORMAT_*. Para sa paglilimita ng mga format gamitin ang setBarcodeFormats() — pinapabilis nito ang pag-scan ng 2–3 beses.

Paano pabilisin ang pag-scan ng barcode?

Bawasan ang resolution ng camera sa 480p (640x480), i-on ang continuous auto-focus, limitahan ang mga format sa kailangan (setBarcodeFormats), gamitin ang FAST performance mode. Para sa ML Kit tukuyin lang ang mga kinakailangang format — ang pagbubukod ng labis na format ay nagpapabilis ng pag-scan ng 2–3 beses. Para sa ZXing gamitin ang HybridBinarizer sa halip na GlobalHistogramBinarizer (mas mabilis ng 20%). Para sa AVFoundation — tukuyin ang metadataObjectTypes.

Gumagana ba ang pag-scan ng barcode nang walang internet?

Oo, lahat ng lokal na Barcode Scanning SDK (ML Kit, ZXing, AVFoundation, Scandit) ay gumagana nang ganap na offline. Nangangailangan ang ML Kit ng internet lamang sa unang pag-download ng model (downloaded mode), pagkatapos ay naka-cache ang model sa device. Ang AVFoundation — built-in sa iOS, hindi nangangailangan ng internet. Ang ZXing — ganap na offline nang walang Play Services. Ang cloud scanning (Google Cloud Vision) ay hindi ginagamit sa mga mobile app.

Maaari bang i-scan ang mga sira o malabong barcode?

May built-in na pagwawasto ng mga sirang code ang ML Kit at Scandit salamat sa neural network algorithms. Ibinabalik ng ML Kit ang hanggang 30% ng sirang code (gasping, punit). Ang Scandit — hanggang 50% dahil sa pagsasanay sa mga depektibong code. Halos hindi ibinabalik ng ZXing ang mga sirang code — nangangailangan ng malinaw na larawan. Para sa pag-scan ng mga depektibong code gamitin ang Scandit o ML Kit na may ACCURATE performance mode.

Buod

  • Barcode Scanning — detection at decoding ng 1D/2D codes gamit ang camera ng smartphone
  • ML Kit — 98.5% katumpakan, multi-code, detection sa kahit anong bahagi ng frame, libre
  • ZXing — open-source, compatibility sa kahit anong device, 92% katumpakan
  • AVFoundation — native iOS scanner, built-in sa system (iOS 7+)
  • Scandit — enterprise SDK (99.5%), SparkScan, MatrixScan, mula $400/buwan
  • Pag-optimize — 480p resolution, autofocus, paglilimita ng format, Haptic feedback
  • Lahat ng format — EAN, UPC, QR, Data Matrix, PDF417, Aztec, Code 128

Gagawa kami ng mobile application na turnkey

Gumagawa ang IT Sectr ng mga iOS at Android application para sa mga startup at negosyo mula noong 2017. Magpapayo kami sa iyo at magmumungkahi ng pinakamahusay na solusyon.

Pag-usapan ang proyekto

Basahin din