نظرة عامة على المشروع
هذا الكود عبارة عن برنامج مكتوب بلغة البايثون يستخدم مكتبة OpenCV لإنشاء ماسح ضوئي للباركود (Barcode) ورموز الاستجابة السريعة (QR Code) في الوقت الفعلي باستخدام كاميرا الويب. يقوم البرنامج بالتقاط الفيديو من الكاميرا، ومعالجة كل إطار من الفيديو لمحاولة كشف وقراءة أي باركود أو رمز استجابة سريعة يظهر أمام الكاميرا، ثم يقوم برسم مربع أخضر حول الرمز الذي تم التعرف عليه وعرض القيمة التي يحتويها في الطرفية (Terminal).
آلية عمل الكود بالتفصيل
ينقسم الكود إلى جزأين رئيسيين:
دالة barcode(frame): هذه هي الدالة الأساسية التي تقوم بمعالجة الصور. تستقبل إطاراً واحداً (صورة) من الفيديو كمدخل وتقوم بالخطوات التالية لتحسين الصورة وتسهيل عملية قراءة الرموز:
الكشف عن الحواف (Edge Detection): يتم تطبيق مرشح (Kernel) مخصص للكشف عن الحواف العمودية في الصورة.
زيادة حدة الصورة (Sharpening): بعد الكشف عن الحواف، يتم تطبيق مرشح آخر لجعل الصورة أكثر حدة ووضوحاً.
تحويل الصورة إلى تدرج الرمادي (Grayscale): يتم تحويل الصورة من ملونة إلى تدرج الرمادي لتبسيط عملية المعالجة.
تقليل الضوضاء (Gaussian Blur): يتم تطبيق تمويه ضبابي خفيف لتقليل أي تشويش في الصورة قد يؤثر على دقة القراءة.
العتبة التكيفية (Adaptive Thresholding): تُستخدم هذه التقنية لفصل الأجزاء الفاتحة عن الداكنة في الصورة بشكل أفضل، مما يبرز الباركود والرموز بشكل واضح.
معادلة الهيستوجرام التكيفية محدودة التباين (CLAHE): تُستخدم هذه التقنية المتقدمة لتحسين تباين الصورة بشكل كبير، مما يجعلها الخطوة الأخيرة في تحسين جودة الصورة قبل محاولة القراءة.
كشف وفك تشفير الرموز:
رموز QR: يستخدم cv2.QRCodeDetector() لمحاولة العثور على رمز QR في الإطار الأصلي (قبل المعالجة). إذا تم العثور على رمز، تتم طباعة قيمته ورسم مربع حوله.
الباركود: يستخدم cv2.barcode_BarcodeDetector() للبحث عن أنواع مختلفة من الباركود. إذا تم العثور على أي باركود، تتم طباعة قيمته ورسم مربع حوله.
الإخراج: تعود الدالة بالإطار الأصلي بعد أن تم إضافة المربعات الخضراء حول الرموز المكتشفة.
الحلقة الرئيسية (Main Loop): هذا الجزء من الكود هو المسؤول عن تشغيل البرنامج بشكل مستمر:
فتح الكاميرا: يبدأ الكود بمحاولة الوصول إلى كاميرا الويب الافتراضية (VideoCapture(0)).
قراءة الإطارات: يقوم بقراءة الفيديو إطاراً تلو الآخر داخل حلقة while True.
استدعاء دالة المعالجة: لكل إطار يتم التقاطه، يتم إرساله إلى دالة barcode() لمعالجته.
عرض الفيديو: يتم عرض الإطار المُعالج (الذي يحتوي على المربعات الخضراء) في نافذة بعنوان "Barcode and QR Code Scanner".
شرط الخروج: تستمر الحلقة في العمل حتى يقوم المستخدم بالضغط على مفتاح 'a'، وعندها يتوقف البرنامج ويغلق جميع النوافذ.
باختصار، يقوم الكود بتحسين الصورة الملتقطة من الكاميرا عبر سلسلة من المرشحات والتقنيات لتسهيل اكتشاف وقراءة الباركود ورموز QR، ثم يعرض النتيجة للمستخدم.