مسح الباركود في التطبيقات — أنواع الرموز و ML Kit

المؤلف: IT Sectr نُشر: 2026-07-18 وقت القراءة: 10 دق

Barcode Scanning هي تقنية لقراءة وفك تشفير الباركود باستخدام كاميرا الجهاز المحمول. على عكس الماسحات الضوئية الليزرية التي تتطلب معدات متخصصة، تعمل الماسحات الضوئية بالكاميرا على أي هاتف ذكي مزود بكاميرا. في تطوير التطبيقات المحمولة، يتم تنفيذ Barcode Scanning عبر ML Kit Barcode Scanning (Google) أو AVFoundation (Apple) أو ZXing (مفتوح المصدر) أو 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
  • الوقت الفعلي — مسح حتى 60 إطاراً في الثانية باستخدام CameraX و AVFoundation
  • على الجهاز — جميع العمليات محلياً، بدون إنترنت

ما هو Barcode Scanning: المبادئ والتنسيقات

Barcode Scanning هي عملية التعرف البصري على الباركود باستخدام الكاميرا. تلتقط الخوارزمية صورة، وتجد الرمز (التحديد)، وتفك تشفيره (استخراج البيانات) وتعيد قيمة نصية. تمسح SDKs الحديثة الرموز بأي اتجاه وحجم وإضاءة — يحتاج المستخدم فقط إلى توجيه الكاميرا.

تنسيقات الباركود تنقسم إلى مجموعتين: 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 ولكنه أكثر Compactness. يُستخدم في الصناعة (وضع علامات على القطع)، والتذاكر الإلكترونية (IATA BCBP)، والعينات الطبية. يمكن لـ Data Matrix احتواء ما يصل إلى 2335 حرفاً ويُطبع على أسطح صغيرة جداً — حتى 2x2 مم. على عكس QR، لا يحتوي Data Matrix على أنماط تحديد (مربعات في الزوايا) ويتطلب معايرة كاميرا أكثر دقة.

التنسيقالنوعالبيانات القصوىالتطبيق
EAN-131D13 رقماًمنتجات التجزئة
QR Code2D4296 حرفاًروابط، مدفوعات، تذاكر
Data Matrix2D2335 حرفاًالصناعة، الطب
PDF4172D2710 حرفاًوثائق، بطاقات صعود
Code 1281D80 حرفاًاللوجستية، النقل

QR Code هو أكثر التنسيقات ثنائية الأبعاد شيوعاً في التطبيقات المحمولة. يحتوي على 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: التكامل والإعداد

ML Kit Barcode Scanning هو SDK الرئيسي لتطبيقات Android. يجد ML Kit تلقائياً جميع الرموز في الصورة (على عكس ZXing الذي يتطلب أن يكون الرمز في المنتصف). تعيد API كائن Barcode مع rawValue (المحتوى النصي)، format (نوع الرمز)، boundingBox و cornerPoints (4 نقاط زوايا الرمز). يدعم MLKit المسح الفردي (single-scan) والمسح المستمر (continuous-scan).

الوضع متعدد الرموز — يمكن لـ ML Kit اكتشاف رموز متعددة في صورة واحدة. فعّله عبر BarcodeScannerOptions.Builder(). في الوضع المتعدد، يتم إرجاع قائمة Barcodes. استخدمه للمخزون (مسح دفعات المنتجات)، والتعرف على رموز QR متعددة على طاولة. الوضع متعدد الرموز معطل افتراضياً — فعّله فقط إذا لزم الأمر لأنه يبطئ المسح بنسبة 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
        }
    }

تصفية التنسيقات — تحسين إلزامي. يحدّد setBarcodeFormats() التنسيقات التي سيبحث عنها ML Kit. إذا كان التطبيق يمسح رموز QR فقط — حدد FORMAT_QR_CODE. هذا يسرّع المسح بمقدار 2–3 مرات باستبعاد خوارزميات فك تشفير التنسيقات الأخرى. لماسحات التجزئة — FORMAT_EAN_13 | FORMAT_UPC_A. للوجستيات — FORMAT_CODE_128 | FORMAT_CODE_39 | FORMAT_PDF417.

ZXing vs ML Kit: مقارنة المكتبات

ZXing (Zebra Crossing) هي مكتبة مفتوحة المصدر بلغة Java (Android) مع إصدارات لـ Swift و React Native و Flutter. كانت ZXing المعيار الفعلي للمسح قبل ظهور ML Kit. تدعم جميع التنسيقات الشائعة، وتعمل على أي جهاز (بما في ذلك Huawei بدون Google Play)، ولا تتطلب Google Play Services. العيوب: أبطأ 2–3 مرات من ML Kit، لا تجد الرموز على أطراف الإطار، لا يوجد وضع متعدد الرموز.

ML Kit vs ZXing — يتفوق ML Kit في السرعة والدقة وتجربة المستخدم. يكتشف ML Kit الرمز حتى لو كان يشغل 10% من الإطار وفي الزاوية. يتطلب ZXing أن يشغل الرمز 50–80% من الإطار وأن يكون في المنتصف. يستخدم ML Kit شبكة عصبية (MobileNetV2-SSD) لتحديد موقع الرمز، بينما يستخدم ZXing التثبيت التقليدي والبحث عن أنماط التحديد. وفقاً لـ Google (2025)، يحقق ML Kit دقة 98.5% مقابل 92% لـ ZXing.

الخاصيةML KitZXing
الدقة98.5%92%
السرعة15–30 مللي ثانية50–150 مللي ثانية
متعدد الرموزنعملا
Google Playمطلوبغير مطلوب
رمز في الزاويةيكتشفلا يكتشف

متى تختار ZXing: إذا كان التطبيق يجب أن يعمل على أجهزة Huawei (بدون Google Play Services)، أو على Android Go (ذاكرة محدودة)، أو إذا كانت هناك حاجة لتشغيل كامل بدون اتصال بالإنترنت دون Play Services. في جميع الحالات الأخرى — ML Kit أسرع وأكثر دقة وأسهل في التكامل ويوفر تجربة مستخدم أفضل بفضل تعدد الرموز والكشف على الأطراف.

kotlin
// 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: الماسح الضوئي الأصلي على 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 مللي ثانية مع استهلاك طاقة ضئيل.

مزايا AVFoundation: عدم وجود تبعيات، معالجة تلقائية لاتجاه الكاميرا، دعم مدمج للوضع الفاتح/الداكن، العمل في الخلفية (مع background modes). يضبط AVFoundation تلقائياً التركيز البؤري والتعريض للمسح — يحتاج المطور فقط إلى الاشتراك في مفوض captureOutput. العيب: إعدادات أقل من ML Kit — لا يمكن تفعيل الوضع متعدد الرموز أو تصفية التنسيقات.

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 تحكماً أكبر — يمكنك تكوين التنسيقات، وتفعيل الوضع متعدد الرموز، وتصفية الرموز حسب الثقة. AVFoundation أسرع على الأجهزة القديمة (نفقات عامة أقل)، لكنه لا يدعم Data Matrix و Aztec و PDF417 على iOS < 15. لـ iOS 15+ يفضل ML Kit. لـ iOS 12–14 استخدم AVFoundation + الرجوع إلى ML Kit للتنسيقات غير المدعومة.

Scandit: حل تجاري للمؤسسات

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% في الإضاءة الضعيفة.

kotlin
// 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 سم) استخدم الوضع الكلي (macro) للكاميرا إذا كان متاحاً.

التقريب التلقائي وتراكب المحدد — تحسينات تجربة المستخدم. يقوم التقريب التلقائي بتكبير الرمز عند اكتشافه (كما في كاميرا Google Lens). يُنفَّذ عبر تحليل boundingBox للرمز وتغيير حجم المعاينة. تراكب المحدد هو إطار رسومي يوضح أين توجّه الكاميرا. لتجربة مستخدم أفضل، أظهر boundingBox للرمز الموجود وميّزه بالأخضر عند فك التشفير بنجاح.

kotlin
// 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 مللي ثانية.

الأسئلة الشائعة

ما أفضل SDK لمسح الباركود على Android؟

ML Kit Barcode Scanning هو أفضل خيار لـ Android: مجاني، دقة 98.5%، متعدد الرموز، كشف في أي جزء من الإطار. إذا كان التطبيق يجب أن يعمل على أجهزة Huawei بدون Google Play — استخدم ZXing (مفتوح المصدر، دقة أقل). للخدمات اللوجستية المؤسسية — Scandit (مدفوع، دقة 99.5%, SparkScan). لقارئ QR بسيط، 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)، فعّل التركيز البؤري التلقائي المستمر، حدد التنسيقات المطلوبة فقط (setBarcodeFormats)، استخدم وضع الأداء FAST. لـ ML Kit حدد فقط التنسيقات الضرورية — استبعاد التنسيقات الإضافية يسرع المسح 2–3 مرات. لـ ZXing — استخدم HybridBinarizer بدلاً من GlobalHistogramBinarizer (أسرع بنسبة 20%). لـ AVFoundation — حدد metadataObjectTypes.

هل يعمل مسح الباركود بدون إنترنت؟

نعم، جميع SDKs المحلية لـ Barcode Scanning (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.

الخلاصة

  • Barcode Scanning — كشف وفك تشفير الرموز 1D/2D بكاميرا الهاتف الذكي
  • ML Kit — دقة 98.5%، متعدد الرموز، كشف في أي جزء من الإطار، مجاني
  • ZXing — مفتوح المصدر، متوافق مع أي جهاز، دقة 92%
  • AVFoundation — ماسح iOS أصلي، مدمج في النظام (iOS 7+)
  • Scandit — SDK مؤسسي (99.5%)، SparkScan, MatrixScan، من 400 دولار/شهر
  • التحسين — دقة 480p، تركيز بؤري تلقائي، تحديد التنسيقات، ردود فعل لمسية
  • جميع التنسيقات — EAN, UPC, QR, Data Matrix, PDF417, Aztec, Code 128

سنقوم بتطوير تطبيق جوال جاهز

تقدم IT Sectr تطبيقات iOS وAndroid للشركات الناشئة والشركات منذ عام 2017. سوف نقدم لك النصح ونقترح أفضل حل.

مناقشة المشروع

اقرأ أيضًا