بناء مشروعك الأول في الرؤية الحاسوبية باستخدام TensorFlow و OpenCV

هل تريد بناء أول مشروع في الرؤية الحاسوبية لكنك لا تعرف من أين تبدأ؟ في هذا الدليل العملي، ستتعلم خطوة بخطوة كيفية الجمع بين TensorFlow و OpenCV لإنشاء تطبيق تعلم آلي قادر على رؤية الصور وتحليلها، مع أمثلة تطبيقية في التجارة الإلكترونية والتعليم عن بعد. سنشرح الأدوات والمكتبات اللازمة، ونتجنب المصطلحات المعقدة، ونركز على كود حقيقي يمكنك تجربته فوراً.

لماذا الجمع بين TensorFlow و OpenCV؟

الرؤية الحاسوبية تحتاج إلى معالجة الصور (OpenCV) ونماذج التعلم العميق (TensorFlow) معاً. OpenCV يتولى قراءة الصور، تغيير حجمها، وإزالة الضوضاء. أما TensorFlow فيبني الشبكات العصبية التي تتعرف على الأنماط.

  • TensorFlow: مكتبة مفتوحة المصدر من Google لبناء وتدريب نماذج التعلم العميق.
  • OpenCV: مكتبة معالجة الصور والفيديو في الوقت الحقيقي، تدعم أكثر من 2500 خوارزمية.
  • التكامل بينهما: تحويل الصورة من OpenCV (تنسيق BGR) إلى تنسيق TensorFlow (RGB) ثم تمريرها للنموذج.

“من دون OpenCV، ستظل الصور مجرد أرقام غير مفهومة للنموذج. ومن دون TensorFlow، لن تتعلم الآلة رؤية أي شيء.” — مقتبس من مجتمع مطوري الذكاء الاصطناعي

الأدوات التي ستحتاجها

قبل بدء المشروع، تأكد من تثبيت المكتبات التالية باستخدام pip:

  • tensorflow==2.16 (أو أحدث للإصدارات المستقرة)
  • opencv-python>=4.9
  • numpy للتعامل مع المصفوفات
  • matplotlib لعرض الصور (اختياري)
  • بيئة افتراضية (venv) لعزل التبعيات.

إذا كنت تستخدم Google Colab، فكل المكتبات مثبتة مسبقاً باستثناء OpenCV قد تحتاج تثبيته بـ !pip install opencv-python.

الخطوة الأولى: تحميل ومعالجة الصور باستخدام OpenCV

المعالجة المسبقة للصور هي نصف النجاح. لنتعرف على كيفية تحميل صورة من ملف وتحويلها لتناسب نموذج TensorFlow.

قراءة الصورة وتحويل الألوان

OpenCV يقرأ الصور بتنسيق BGR (أزرق-أخضر-أحمر)، بينما تدربت معظم نماذج TensorFlow على تنسيق RGB. لذا يجب التحويل:

  • قراءة الصورة: img = cv2.imread('photo.jpg')
  • تحويل الألوان: img_rgb = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
  • تغيير الحجم: img_resized = cv2.resize(img_rgb, (224, 224)) (حجم الإدخال الافتراضي لنموذج MobileNet).

تطبيع القيم

نماذج التعلم العميق تتوقع قيماً بين 0 و1 أو بين -1 و1. يمكنك تحويل البكسل من 0-255 إلى 0-1 بالقسمة على 255:

  • img_normalized = img_resized / 255.0
  • أو استخدام tf.keras.applications.mobilenet.preprocess_input للتطبيع المخصص.

مثال عملي: تحميل 100 صورة دفعة واحدة

في مشاريع التجارة الإلكترونية، قد تحتاج إلى معالجة آلاف الصور. استخدم cv2.imread في حلقة مع Pathlib لتنظيم المجلدات.

الخطوة الثانية: بناء نموذج TensorFlow للتصنيف

سنستخدم نموذجاً جاهزاً (نقل التعلم) بدلاً من بناء شبكة من الصفر، فهو أسرع وأدق للمبتدئين.

تحميل النموذج الأساسي (MobileNetV2)

هذا النموذج مدرب على مجموعة ImageNet التي تحتوي على 1000 فئة. يمكنك استخدامه للتصنيف العام، أو إضافة طبقات مخصصة لتصنيف منتجات متجرك.

  • base_model = tf.keras.applications.MobileNetV2(weights='imagenet', include_top=False, input_shape=(224,224,3))
  • base_model.trainable = False (لتجميد الأوزان وتجنب إعادة التدريب).
  • global_average_layer = tf.keras.layers.GlobalAveragePooling2D()
  • prediction_layer = tf.keras.layers.Dense(10, activation='softmax') (إذا كان لديك 10 فئات).

تجميع النموذج وتدريبه

استخدم المترجم (optimizer) Adam ومعدل تعلم صغير مثل 0.001:

  • model.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy'])
  • قم بتدريب النموذج على بياناتك باستخدام model.fit(train_data, epochs=10).

“نقل التعلم يسمح لك ببناء نموذج دقيق باستخدام 100 صورة فقط بدلاً من مليون صورة.” — درس في دورة TensorFlow المتقدمة

الخطوة الثالثة: دمج OpenCV مع TensorFlow في حلقة حية

الآن سنكتب كوداً يأخذ فيديو من الكاميرا (أو ملف فيديو) ويصنف كل إطار في الوقت الحقيقي. هذا مثالي للدراسة عن بعد (مراقبة حضور الطلاب) أو لأتمتة التصميمات (فحص المنتجات).

الكود الأساسي للفيديو المباشر

  • افتح الكاميرا: cap = cv2.VideoCapture(0)
  • في حلقة لا نهائية: اقرأ الإطار، حوله إلى RGB، غيّر حجمه، طبّع القيم، ثم مرره للنموذج.
  • predictions = model.predict(np.expand_dims(img_input, axis=0))
  • اعرض الفئة المتوقعة على الإطار باستخدام cv2.putText().
  • اضغط زر ‘q’ للخروج.

مثال تطبيقي: تصنيف الفاكهة في الوقت الحقيقي

تخيل مشروعاً لفرز التفاح والبرتقال آلياً في سوبر ماركت. يمكنك تدريب النموذج على 50 صورة لكل فئة، ثم استخدام الكود أعلاه لتصنيف كل فاكهة تظهر أمام الكاميرا.

جدول مقارنة: OpenCV vs. TensorFlow في الرؤية الحاسوبية

المهمة OpenCV TensorFlow
قراءة الصورة/الفيديو ممتاز ضعيف (يتطلب تحويل)
تغيير الحجم والدوران سريع جداً بطيء نسبياً
التعرف على الوجوه نعم (Haar Cascades) نعم (نماذج عميقة)
تصنيف الصور لا الأفضل
الكشف عن الأشياء أساسي متقدم (YOLO, SSD)
السرعة في الوقت الحقيقي عالية متوسطة (تعتمد على النموذج)

تطبيقات عملية في التجارة الإلكترونية والتعليم

الرؤية الحاسوبية ليست مجرد لعبة أكاديمية، بل لها استخدامات مربحة وعملية.

في التجارة الإلكترونية

  • البحث بالصورة: ارفع صورة منتج، ويبحث النظام عن منتجات مماثلة في المخزون. استخدم OpenCV لاستخراج الميزات وتصنيفها بـ TensorFlow.
  • فحص الجودة: صور المنتجات في المستودع تمر عبر نموذج يكتشف الخدوش أو التشوهات.
  • توصيات مخصصة: حلل صور الملابس التي ينظر إليها الزبون واقترح إكسسوارات مناسبة.

في الدراسة عن بعد

  • مراقبة الانتباه: كاميرا الكمبيوتر تكتشف ما إذا كان الطالب ينظر إلى الشاشة أم لا.
  • ترجمة الإشارات: تعلم لغة الإشارة عبر تصنيف حركات اليد بالفيديو المباشر.
  • تصحيح التمارين: امسح ورقة الإجابة ضوئياً باستخدام OpenCV، ثم تعرف على الإجابات الصحيحة عبر نموذج OCR.

في أدوات أتمتة التصميمات

يمكنك بناء أداة تلتقط شعار الشركة من صورة، وتغير ألوانه تلقائياً لتتناسب مع هوية العلامة التجارية الجديدة. هذا يتطلب كشف الحواف (OpenCV) ثم إعادة تلوينها (TensorFlow GAN).

نصائح لتحسين أداء المشروع

لجعل مشروعك الأول سريعاً وفعالاً، اتبع هذه التوصيات.

  • استخدم GPU: إذا كان لديك بطاقة رسوميات NVIDIA، ثبّت tensorflow-gpu لتسريع التدريب 10x.
  • قلل حجم الصورة: 224×224 بكسل كافية للتصنيف. صور أكبر تبطئ المعالجة دون فائدة كبيرة.
  • استخدم batch prediction: بدلاً من تصنيف كل إطار على حدة، اجمع 10 إطارات وأرسلها دفعة واحدة.
  • جرب نماذج أخف: مثل MobileNet أو EfficientNet Lite إذا كنت تعمل على هاتف أو حاسوب ضعيف.
  • احفظ النموذج المدرب: model.save('my_model.h5') لتحميله مباشرة لاحقاً دون إعادة تدريب.

مشروع نموذجي كامل: كشف الكتب في مكتبة رقمية

لنطبق كل ما تعلمناه في مشروع صغير: تطبيق يفتح كاميرا الهاتف ويكشف عن الكتب الموجودة على الرف، ثم يقرأ عنوانها باستخدام التعرف الضوئي (OCR).

  1. استخدم OpenCV لالتقاط الإطار وتحويله إلى تدرج رمادي.
  2. طبق cv2.Canny() لاستخراج الحواف.
  3. استخدم cv2.findContours() لتحديد المستطيلات (ظهور الكتب).
  4. اقص كل كتاب كصورة فرعية.
  5. مرر الصورة المقتطعة لنموذج TensorFlow المدرب على تصنيف أغلفة الكتب.
  6. إذا كان النموذج متأكداً بنسبة > 80%، اعرض اسم الكتاب على الشاشة.

هذا المشروع يمكن تطويره ليصبح نظاماً لفهرسة المكتبات المنزلية أو حتى للمكتبات العامة.

خلاصة قبل الأسئلة الشائعة

بناء أول مشروع رؤية حاسوبية باستخدام TensorFlow و OpenCV ليس معقداً كما يبدو. ابدأ بنموذج جاهز للتصنيف، أضف معالجة بسيطة للصور باستخدام OpenCV، ثم دمج الاثنين في تطبيق عملي. التركيز على مثال بسيط (مثل تصنيف الفاكهة أو كشف الكتب) سيمنحك الثقة لتوسيع المشروع ليشمل التجارة الإلكترونية، التعليم عن بعد، أو أي مجال يثير اهتمامك. تذكر أن الممارسة اليومية أهم من قراءة الشروحات النظرية. حمّل الكود، جرّبه على صورك الخاصة، وستندهش من سرعة تعلمك.

الأسئلة الشائعة (FAQ)

1. ما الفرق بين OpenCV و TensorFlow في الرؤية الحاسوبية؟

OpenCV مسؤول عن معالجة الصورة نفسها (تغيير الحجم، التصفية، كشف الحواف)، بينما TensorFlow مسؤول عن التعلم والتصنيف والتنبؤ من الصورة.

2. هل يمكن استخدام TensorFlow بدون OpenCV؟

نعم، لكنك ستحتاج لمكتبة أخرى لقراءة الصور (مثل PIL أو tf.io). لكن OpenCV أسرع وأغنى بالميزات للمعالجة المسبقة.

3. ما هو أفضل نموذج TensorFlow للمبتدئين في الرؤية الحاسوبية؟

MobileNetV2 أو EfficientNetB0، لأنهما خفيفان وسريعان مع دقة جيدة، ويمكن تشغيلهما على حاسوب عادي.

4. كيف أحول صورة OpenCV إلى تنسيق TensorFlow؟

استخدم cv2.cvtColor(img, cv2.COLOR_BGR2RGB) ثم tf.image.resize(img, [224,224]) وأخيراً tf.keras.preprocessing.image.img_to_array(img).

5. كم عدد الصور الذي أحتاجه لتدريب نموذج جديد؟

إذا استخدمت نقل التعلم، 100-200 صورة لكل فئة كافية للحصول على نتائج مقبولة. أما إذا بنيت شبكة من الصفر، فستحتاج آلاف الصور.

6. هل يعمل هذا المشروع على Raspberry Pi؟

نعم، لكن اختر نموذجاً خفيفاً مثل MobileNet، وقم بتحويله إلى TensorFlow Lite باستخدام tf.lite.TFLiteConverter لزيادة السرعة.

7. ما هي أفضل طريقة لتحسين دقة النموذج؟

استخدم زيادة البيانات (Data Augmentation) مثل التدوير العشوائي والتقليب الأفقي. أيضاً، استخدم طبقة Dropout لمنع الإفراط في التعلم.

8. هل يمكن استخدام هذا المشروع في التعرف على الوجوه؟

نعم، لكنك ستحتاج لبيانات وجوه متعددة لكل شخص، واستخدام نموذج مثل FaceNet أو مكتبة face_recognition المبنية على OpenCV.

9. كيف أتعامل مع الفيديو بدلاً من الصور الثابتة؟

استخدم حلقة مع cv2.VideoCapture واقرأ كل إطار (frame) على حدة. يمكنك تخطي بعض الإطارات لتخفيف الحمل (مثل معالجة كل 5 إطارات فقط).

10. ما هي أخطاء البداية الشائعة في الرؤية الحاسوبية؟

أكثرها شيوعاً: نسيان تحويل BGR إلى RGB (صور مقلوبة الألوان)، عدم تسوية القيم (نتائج خاطئة)، واستخدام صور بدقة عالية جداً (يبطئ التدريب بلا فائدة).


شكراً! تقييمات: 5/5 (2 أصوات)
النقاشات

لا توجد تعليقات بعد

أضف تعليقك

اكتب تعليقك

لن يتم نشر عنوان بريدك الإلكتروني. الحقول الإلزامية مشار إليها بـ *

العناوين