Barcode Scanning σε εφαρμογές — τι είναι, τύποι κωδικών και ML Kit

Συγγραφέας: IT Sectr Δημοσιεύτηκε: 2026-07-18 Χρόνος ανάγνωσης: 10 λεπ

Barcode Scanning — είναι η τεχνολογία σάρωσης και αποκωδικοποίησης γραμμωτών κωδίκων μέσω κάμερας κινητής συσκευής. Σε αντίθεση με τους laser-σαρωτές που απαιτούν εξειδικευμένο εξοπλισμό, οι σαρωτές κάμερας λειτουργούν σε οποιοδήποτε smartphone με κάμερα. Στην ανάπτυξη εφαρμογών κινητών, το Barcode Scanning υλοποιείται μέσω ML Kit Barcode Scanning (Google), AVFoundation (Apple), ZXing (open-source) ή Scandit (εμπορικό SDK). Σύμφωνα με τα δεδομένα του Google ML Kit, 2025, η βιβλιοθήκη επεξεργάζεται 2+ δισεκατομμύρια σαρώσεις την ημέρα με ακρίβεια 98.5%.

Κύρια σημεία

  • Barcode Scanning — σάρωση μονοδιάστατων και δισδιάστατων κωδικών με κάμερα
  • ML Kit Barcode — το πιο ακριβές SDK (98.5%), πολλαπλοί κωδικοί, όλες οι μορφές
  • Μορφές — EAN, UPC, QR, Data Matrix, PDF417, Aztec, Code 128
  • Real-time — σάρωση έως 60 FPS με CameraX και AVFoundation
  • On-device — όλοι οι υπολογισμοί τοπικά, χωρίς διαδίκτυο

Τι είναι το Barcode Scanning: αρχές και μορφές

Barcode Scanning — η διαδικασία οπτικής αναγνώρισης γραμμωτών κωδίκων μέσω κάμερας. Ο αλγόριθμος καταγράφει την εικόνα, εντοπίζει τον κωδικό (εντοπισμός), τον αποκωδικοποιεί (εξαγωγή δεδομένων) και επιστρέφει μια συμβολοσειρά. Τα σύγχρονα SDK σαρώνουν κωδικούς οποιουδήποτε προσανατολισμού, μεγέθους και υπό οποιεσδήποτε συνθήκες φωτισμού — ο χρήστης απλά στοχεύει την κάμερα.

Οι μορφές γραμμωτών κωδίκων χωρίζονται σε δύο ομάδες: 1D (γραμμικοί) — EAN-13, UPC-A, Code 128, Code 39, ITF, Codabar — περιέχουν έως 20–30 χαρακτήρες, χρησιμοποιούνται για προϊόντα, logistics. 2D (δισδιάστατοι) — QR Code, Data Matrix, PDF417, Aztec — περιέχουν έως 3000+ χαρακτήρες, χρησιμοποιούνται για συνδέσμους, εισιτήρια, έγγραφα. Το ML Kit υποστηρίζει 14 μορφές — όλες τις δημοφιλείς 1D και 2D.

Data Matrix — δισδιάστατος κωδικός, παρόμοιος με QR αλλά πιο συμπαγής. Χρησιμοποιείται στη βιομηχανία (σήμανση εξαρτημάτων), ηλεκτρονικά εισιτήρια (IATA BCBP), ιατρικά δείγματα. Το Data Matrix μπορεί να περιέχει έως 2335 χαρακτήρες και εφαρμόζεται σε πολύ μικρές επιφάνειες — έως 2x2 mm. Σε αντίθεση με το QR, το Data Matrix δεν έχει finder patterns (τετράγωνα στις γωνίες) και απαιτεί πιο ακριβή βαθμονόμηση κάμερας.

ΜορφήΤύποςΜέγ. δεδομένωνΕφαρμογή
EAN-131D13 ψηφίαΠροϊόντα σε καταστήματα
QR Code2D4296 χαρακτήρεςΣύνδεσμοι, πληρωμές, εισιτήρια
Data Matrix2D2335 χαρακτήρεςΒιομηχανία, ιατρική
PDF4172D2710 χαρακτήρεςΈγγραφα, κάρτες επιβίβασης
Code 1281D80 χαρακτήρεςLogistics, μεταφορές

QR Code — η πιο δημοφιλής δισδιάστατη μορφή σε εφαρμογές κινητών. Περιέχει URL, κείμενο, vCard, διαμόρφωση WiFi, πληροφορίες πληρωμής (UPI, SBP). Το QR Code έχει 40 εκδόσεις (από 21x21 έως 177x177 modules) και 4 επίπεδα διόρθωσης σφαλμάτων (L: 7%, M: 15%, Q: 25%, H: 30%). Για εφαρμογές κινητών χρησιμοποιήστε έκδοση 2–10 (25x25 – 57x57 modules) — βέλτιστη ισορροπία μεγέθους και δεδομένων.

ML Kit Barcode Scanning: ενσωμάτωση και ρύθμιση

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%.

kotlin
// Λειτουργία πολλαπλών κωδικών ML Kit Barcode Scanning
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. Για logistics — FORMAT_CODE_128 | FORMAT_CODE_39 | FORMAT_PDF417.

ZXing vs ML Kit: σύγκριση βιβλιοθηκών

ZXing (Zebra Crossing) — βιβλιοθήκη ανοιχτού κώδικα σε Java (Android) με μεταφορές σε Swift, React Native, Flutter. Το ZXing αποτελεί de-facto πρότυπο για σάρωση πριν την εμφάνιση του ML Kit. Υποστηρίζει όλες τις δημοφιλείς μορφές, λειτουργεί σε οποιαδήποτε συσκευή (συμπεριλαμβανομένων Huawei χωρίς Google Play), δεν απαιτεί Google Play Services. Μειονεκτήματα: πιο αργό από ML Kit κατά 2–3 φορές, δεν εντοπίζει κωδικούς στην περιφέρεια του καρέ, δεν έχει multi-barcode.

ML Kit vs ZXing — το ML Kit υπερέχει σε ταχύτητα, ακρίβεια και UX. Το ML Kit ανιχνεύει τον κωδικό ακόμα κι αν καταλαμβάνει 10% του καρέ και βρίσκεται στη γωνία. Το ZXing απαιτεί ο κωδικός να καταλαμβάνει 50–80% του καρέ και να βρίσκεται στο κέντρο. Το ML Kit χρησιμοποιεί νευρωνικό δίκτυο (MobileNetV2-SSD) για τον εντοπισμό κωδικού, ενώ το ZXing — κλασική δυαδοποίηση και αναζήτηση finder patterns. Σύμφωνα με την Google (2025), το ML Kit παρέχει 98.5% ακρίβεια έναντι 92% του ZXing.

ΧαρακτηριστικόML KitZXing
Ακρίβεια98.5%92%
Ταχύτητα15–30 ms50–150 ms
Πολλαπλοί κωδικοίΝαιΌχι
Google PlayΑπαιτείταιΔεν απαιτείται
Κωδικός στη γωνίαΑνιχνεύειΔεν ανιχνεύει

Πότε να επιλέξετε ZXing: αν η εφαρμογή πρέπει να λειτουργεί σε συσκευές Huawei (χωρίς Google Play Services), σε Android Go (περιορισμένη μνήμη) ή αν χρειάζεστε πλήρη offline λειτουργία χωρίς Play Services. Για όλες τις άλλες περιπτώσεις — το ML Kit είναι ταχύτερο, ακριβέστερο, ευκολότερο στην ενσωμάτωση και παρέχει καλύτερο UX χάρη στους πολλαπλούς κωδικούς και την ανίχνευση στην περιφέρεια.

kotlin
// ZXing Core: απλός σαρωτής
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) {
    // Δεν βρέθηκε κωδικός
}

Scandit ως εναλλακτική — εμπορικό SDK με ακρίβεια 99.5% και ταχύτητα 10–20 ms. Χρησιμοποιεί δικά του νευρωνικά δίκτυα και δεν απαιτεί Google Play Services. Τιμή — από $400/μήνα (2019). Η Scandit κυριαρχεί στο λιανικό εμπόριο και τα logistics (Walmart, FedEx). Για τις περισσότερες εφαρμογές κινητών το ML Kit επαρκεί — το Scandit δικαιολογείται μόνο για enterprise εργασίες με high-volume σάρωση.

Apple AVFoundation: εγγενής σαρωτής σε iOS

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 ms με ελάχιστη κατανάλωση ενέργειας.

Πλεονεκτήματα AVFoundation: μηδενικές εξαρτήσεις, αυτόματη διαχείριση προσανατολισμού κάμερας, ενσωματωμένη υποστήριξη light/dark mode, λειτουργία στο παρασκήνιο (με background modes). Το AVFoundation ρυθμίζει αυτόματα την αυτόματη εστίαση και έκθεση για σάρωση — ο προγραμματιστής χρειάζεται μόνο να εγγραφεί στο delegate captureOutput. Μειονέκτημα: λιγότερες ρυθμίσεις από το ML Kit — δεν μπορεί να ενεργοποιηθεί multi-barcode ή φίλτρο μορφών.

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 σε iOS: το ML Kit παρέχει περισσότερο έλεγχο — μπορείτε να ρυθμίσετε μορφές, να ενεργοποιήσετε multi-barcode, να φιλτράρετε κωδικούς ανά confidence. Το AVFoundation είναι ταχύτερο σε παλιές συσκευές (λιγότερο overhead), αλλά δεν υποστηρίζει Data Matrix, Aztec, PDF417 σε iOS < 15. Για iOS 15+ το ML Kit είναι προτιμότερο. Για iOS 12–14 χρησιμοποιήστε AVFoundation + fallback σε ML Kit για μη υποστηριζόμενες μορφές.

Scandit: εμπορική λύση για επιχειρήσεις

Scandit — εμπορικό SDK για Barcode Scanning με εστίαση στο λιανικό εμπόριο, τα logistics και την υγειονομική περίθαλψη. Η Scandit χρησιμοποιεί δικά της νευρωνικά δίκτυα, εκπαιδευμένα σε 10+ εκατομμύρια εικόνες γραμμωτών κωδίκων σε διάφορες συνθήκες: αντανακλάσεις, ζημιές, χαμηλό φωτισμό, κλίση έως 45°, αντηλιά. Η Scandit σαρώνει κωδικούς από απόσταση έως 15 μέτρα (για PDF417 σε αποθήκες) και σε κυρτές επιφάνειες (κουτιά, μπουκάλια).

Δυνατότητες Scandit: SparkScan (single-scan για γρήγορη διαδοχική σάρωση), MatrixScan (multi-barcode + AR επισήμανση σαρωμένων), PickList (αναζήτηση προϊόντος με barcode και επιβεβαίωση). Η Scandit υποστηρίζει 50+ μορφές, συμπεριλαμβανομένων GS1 DataBar και Composite Codes. Ταχύτητα — 10–15 ms ανά κωδικό. Ακρίβεια — 99.5% υπό κανονικό φωτισμό, 97% σε χαμηλό φωτισμό.

kotlin
// Scandit MatrixScan (απαιτείται άδεια SDK)
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+/μήνα), αλλά παρέχει enterprise δυνατότητες: SparkScan (φυσικό κουμπί σε επαγγελματικές συσκευές), MatrixScan (AR επικάλυψη για επισήμανση), PickList (φωνητική επιβεβαίωση). Το ML Kit είναι δωρεάν και επαρκές για το 90% των εφαρμογών κινητών: σαρωτές καταστημάτων, QR readers, εφαρμογές εισιτηρίων. Το Scandit δικαιολογείται μόνο για τερματικά logistics με συσκευές Zebra/Honeywell.

Βελτιστοποίηση σάρωσης: ταχύτητα και ακρίβεια

Βελτιστοποίηση Barcode Scanning περιλαμβάνει ρύθμιση κάμερας, ανάλυσης και SDK. Βασικός κανόνας: λιγότερα pixel — ταχύτερη σάρωση. Για ML Kit η βέλτιστη ανάλυση είναι 480p (640x480) για βίντεο και 720p (1280x720) για φωτογραφίες. Η αύξηση σε 1080p επιβραδύνει την επεξεργασία κατά 2–3 φορές χωρίς βελτίωση ακρίβειας. Χρησιμοποιήστε CameraX με ImageAnalysis για αυτόματη διαχείριση ανάλυσης.

Εστίαση και έκθεση είναι κρίσιμες για την ποιότητα σάρωσης. Το ML Kit δεν ρυθμίζει την κάμερα αυτόματα — ο προγραμματιστής πρέπει να ενεργοποιήσει continuous auto-focus και continuous auto-exposure μέσω Camera2 ή CameraX. Χωρίς αυτόματη εστίαση, οι θολοί κωδικοί μειώνουν την ακρίβεια στο 60–70%. Για σάρωση από κοντινή απόσταση (5–15 cm) χρησιμοποιήστε macro-λειτουργία κάμερας, αν είναι διαθέσιμη.

Auto-zoom και finder overlay — βελτιώσεις UX για τον χρήστη. Το Auto-zoom μεγεθύνει τον κωδικό κατά τον εντοπισμό του (όπως στην κάμερα Google Lens). Υλοποιείται μέσω ανάλυσης boundingBox του κωδικού και κλιμάκωσης preview. Το Finder overlay — γραφικό πλαίσιο που δείχνει πού να στοχεύσετε την κάμερα. Για καλύτερο UX εμφανίστε το boundingBox του εντοπισμένου κωδικού και τονίστε τον με πράσινο κατά την επιτυχή αποκωδικοποίηση.

kotlin
// CameraX + ML Kit: βελτιστοποιημένος σαρωτής
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 {
                    // Απτική + ήχος + επισήμανση κωδικού
                }
            }
            .addOnCompleteListener { image.close() }
    }
}

Ανατροφοδότηση χρήστη: δόνηση (HapticFeedback), ήχος (MediaActionSound), οπτική επισήμανση (Canvas/Overlay). Μετά από επιτυχή σάρωση προσθέστε καθυστέρηση 1000–1500 ms (throttling) πριν από την επόμενη σάρωση — αυτό αποτρέπει διπλές ενεργοποιήσεις στον ίδιο κωδικό. Για sequential scanning (σάρωση παρτίδας προϊόντων) χρησιμοποιήστε προσέγγιση SparkScan: κάθε σάρωση καταγράφεται και ηχεί, με καθυστέρηση 300–500 ms.

Συχνές ερωτήσεις

Ποιο SDK για σάρωση γραμμωτών κωδίκων είναι καλύτερο σε Android;

ML Kit Barcode Scanning — η καλύτερη επιλογή για Android: δωρεάν, 98.5% ακρίβεια, πολλαπλοί κωδικοί, ανίχνευση σε οποιοδήποτε σημείο του καρέ. Αν η εφαρμογή πρέπει να λειτουργεί σε συσκευές Huawei χωρίς Google Play — χρησιμοποιήστε ZXing (open-source, χαμηλότερη ακρίβεια). Για enterprise logistics — Scandit (επί πληρωμή, 99.5% ακρίβεια, SparkScan). Για απλό QR scanner αρκεί ZXing ή ML Kit.

Ποιες μορφές γραμμωτών κωδίκων υποστηρίζει το 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), ενεργοποιήστε continuous auto-focus, περιορίστε τις μορφές στις απαραίτητες (setBarcodeFormats), χρησιμοποιήστε λειτουργία FAST performance. Για ML Kit ορίστε μόνο τις απαραίτητες μορφές — η εξαίρεση περιττών μορφών επιταχύνει τη σάρωση κατά 2–3 φορές. Για ZXing — χρησιμοποιήστε HybridBinarizer αντί για GlobalHistogramBinarizer (ταχύτερο κατά 20%). Για AVFoundation — ορίστε metadataObjectTypes.

Λειτουργεί η σάρωση γραμμωτών κωδίκων χωρίς διαδίκτυο;

Ναι, όλα τα τοπικά SDK Barcode Scanning (ML Kit, ZXing, AVFoundation, Scandit) λειτουργούν πλήρως offline. Το ML Kit απαιτεί διαδίκτυο μόνο για την πρώτη λήψη του μοντέλου (downloaded mode), μετά το μοντέλο αποθηκεύεται προσωρινά στη συσκευή. Το AVFoundation είναι ενσωματωμένο στο iOS, δεν απαιτεί διαδίκτυο. Το ZXing είναι πλήρως offline χωρίς Play Services. Η cloud-σάρωση (Google Cloud Vision) δεν χρησιμοποιείται σε εφαρμογές κινητών.

Μπορώ να σαρώσω κατεστραμμένους ή θολούς γραμμωτούς κωδικούς;

Τα ML Kit και Scandit διαθέτουν ενσωματωμένη διόρθωση κατεστραμμένων κωδικών χάρη σε αλγορίθμους νευρωνικών δικτύων. Το ML Kit αποκαθιστά έως 30% του κατεστραμμένου κωδικού (γρατσουνιές, σκισίματα). Το Scandit — έως 50% χάρη στην εκπαίδευση σε ελαττωματικούς κωδικούς. Το ZXing ουσιαστικά δεν αποκαθιστά κατεστραμμένους κωδικούς — απαιτεί καθαρή εικόνα. Για σάρωση ελαττωματικών κωδικών χρησιμοποιήστε Scandit ή ML Kit με λειτουργία ACCURATE performance.

Σύνοψη

  • Barcode Scanning — ανίχνευση και αποκωδικοποίηση 1D/2D κωδικών με κάμερα smartphone
  • ML Kit — 98.5% ακρίβεια, πολλαπλοί κωδικοί, ανίχνευση σε οποιοδήποτε σημείο καρέ, δωρεάν
  • ZXing — open-source, συμβατότητα με οποιεσδήποτε συσκευές, 92% ακρίβεια
  • AVFoundation — εγγενής σαρωτής iOS, ενσωματωμένος στο σύστημα (iOS 7+)
  • Scandit — enterprise SDK (99.5%), SparkScan, MatrixScan, από $400/μήνα
  • Βελτιστοποίηση — ανάλυση 480p, αυτόματη εστίαση, περιορισμός μορφών, απτική ανατροφοδότηση
  • Όλες οι μορφές — EAN, UPC, QR, Data Matrix, PDF417, Aztec, Code 128

Θα αναπτύξουμε μια εφαρμογή για κινητά έτοιμη για χρήση

Η IT Sectr δημιουργεί εφαρμογές iOS και Android για νεοφυείς επιχειρήσεις και επιχειρήσεις από το 2017. Θα σας συμβουλεύσουμε και θα προτείνουμε την καλύτερη λύση.

Συζήτηση έργου

Διαβάστε επίσης