ضع إعلانك هنا
📁 أحدث الأخبار

كيف تبني تطبيق ذكاء اصطناعي لتصنيف الصور باستخدام CLIP و Python | مشروع عملي خطوة بخطوة

 

AI Image Classification Application

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

في هذا المقال، أشاركك تجربتي في بناء تطبيق ذكاء اصطناعي بسيط وفعّال باستخدام لغة Python، يقوم بتصنيف الصور تلقائيًا عبر واجهة رسومية أنيقة، مدعومًا بنموذج CLIP الثوري من شركة OpenAI.

هذا المشروع لا يحتاج إلى خبرة سابقة في الذكاء الاصطناعي أو التعلم العميق. فقط القليل من الشغف، وستجد نفسك تبني أداة ذكية تنظم صورك بأناقة – تمامًا كما تفعل التطبيقات الاحترافية.

إذا كنت مطورًا تبحث عن مشروع عملي في الذكاء الاصطناعي، أو صانع محتوى يريد فهم قوة النماذج اللغوية البصرية، أو حتى مجرد فضولي ... فهذه المقالة لك.

ما هو نموذج CLIP؟ ولماذا اخترته؟

CLIP هو اختصار لـ Contrastive Language–Image Pre-Training، وهو نموذج ثوري من تطوير شركة OpenAI، تم تدريبه على ملايين الصور والنصوص المرتبطة بها من الإنترنت. الفكرة ببساطة؟ CLIP يستطيع أن "يفهم" الصورة والنص في نفس الوقت، ويقارن بينهما ليحدد مدى تطابق الصورة مع أوصاف مكتوبة.

بعكس النماذج التقليدية مثل ResNet50 التي تقتصر على فئات محددة (مثل كلب، قطة، سيارة...)، يتمتع CLIP بقدرة هائلة على التعميم. يمكنه أن يميّز بين صورة "بيتزا" و"كباب"، أو يفرّق بين "شخص يبتسم" و"شخص يقفز" فقط بناءً على وصف نصي بسيط!

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

والأجمل؟ يمكنك وصف أي فئة تريدها بالنص (حتى بالعربية لو أردت ترجمتها)، وسيعمل النموذج على مطابقة الصورة مع الوصف المناسب.

نظرة على التطبيق: واجهة رسومية بسيطة، وذكاء في الخلفية

التطبيق الذي بنيته يتميز بواجهة رسومية (GUI) أنيقة وسهلة الاستخدام، مبنية باستخدام مكتبة Tkinter المدمجة مع لغة البرمجة Python. لا حاجة لكتابة أوامر سطرية معقدة أو تعديل ملفات يدويًا — كل شيء يتم بنقرات بسيطة.

ماذا يفعل التطبيق بالتحديد؟

1️⃣ تختار مجلد الصور الذي يحتوي على صورك (المراد تصنيفها).

2️⃣ تختار مجلد الوجهة (مكان حفظ الصور المصنفة).

3️⃣ تضغط زر "بدء تصنيف الصور".

4️⃣ يقوم التطبيق تلقائيًا بقراءة كل صورة، وتحليل محتواها باستخدام نموذج CLIP.

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

Image classification application using CLIP model

الواجهة تَعرض أيضًا شريط تقدم بصري، وسجل نصي حي لكل عملية تصنيف، مما يمنح المستخدم تجربة تفاعلية وشفافة.

الأدوات والتقنيات المستخدمة في بناء التطبيق

رغم بساطته من الخارج، يعتمد هذا التطبيق على مجموعة من أقوى مكتبات الذكاء الاصطناعي ومعالجة الصور في Python. كل مكتبة تم اختيارها بعناية لتؤدي دورًا محددًا بدقة ومرونة.

الأدوات الأساسية:

المكتبةالوظيفة
Python 3.8 أو أعلىاللغة الأساسية للتطبيق
Tkinterلبناء الواجهة الرسومية GUI للتطبيق
Pillowلقراءة الصور وتعديل حجمها وتحويل صيغها
Torchمحرك PyTorch لتشغيل نموذج CLIP
Transformersلتحميل نموذج CLIP ومعالجة النصوص والصور بطريقة متوافقة مع Hugging Face

لماذا هذه الأدوات تحديدًا؟

🟢 Tkinter: لأنها مدمجة مع Python، سهلة، ولا تحتاج تثبيت إضافي.

🟢 Pillow: مكتبة خفيفة لمعالجة الصور ولا غنى عنها في أي مشروع يتعامل مع صور.

🟢 PyTorch + Transformers: الثنائي الذهبي للتعامل مع نماذج التعلم العميق الحديثة بسهولة، دون الحاجة لإعادة تدريب النموذج.

كل هذه الأدوات مجانية ومفتوحة المصدر، ويمكن تثبيتها في خطوة واحدة باستخدام الأمر pip.

كيفية تثبيت وتشغيل التطبيق

هذا القسم يرشدك خطوة بخطوة لتثبيت البيئة اللازمة وتشغيل تطبيق تصنيف الصور على جهازك المحلي. لا تحتاج إلى خبرة مسبقة — فقط اتبع التعليمات!

1️⃣ تثبيت Python

🟢 إذا لم يكن Python مثبتًا لديك، قم بتحميله من 🔗 الموقع الرسمي:

🟢 يُفضل استخدام الإصدار Python 3.8 أو أحدث.

2️⃣ إنشاء بيئة عمل افتراضية (اختياري ولكن موصى به)

python -m venv env

ثم فعّل البيئة:

🟢 على Windows:

env\Scripts\activate

🟢 على Linux/macOS:

source env/bin/activate

3️⃣ تثبيت المتطلبات

استخدم الأمر التالي لتثبيت الحزم الضرورية:

   p   pip install -r requirements.txt

أو يمكنك تثبيت الحزم يدويًا:

  pip install torch transformers Pillow

4️⃣ تشغيل التطبيق

تأكد أنك داخل مجلد المشروع، ثم شغّل البرنامج:

  python image_classifier.py

ستظهر لك واجهة رسومية تحتوي على:

🟢 زر اختيار مجلد الصور المصدر

🟢 زر اختيار مجلد الوجهة

🟢 زر بدء التصنيف

🟢 شريط تقدم + سجل الأحداث

Image classification application using CLIP model

ملاحظات مهمة:

🟢 عند التشغيل الأول، سيتم تحميل نموذج CLIP تلقائيًا (حوالي 600 ميجابايت).

🟢 لا حاجة لإعادة التحميل لاحقًا — يتم تخزين النموذج محليًا.

🟢 التطبيق يدعم صيغ الصور التالية: JPG, JPEG, PNG, BMP, GIF.

🟢 إذا كان جهازك يحتوي على بطاقة رسوميات (GPU) من نوع NVIDIA وتدعم CUDA، فإن أداء النموذج سيكون أسرع بكثير.  

🟢 أما على المعالج (CPU)، فالتطبيق يعمل بشكل طبيعي ولكن بزمن أطول عند معالجة عدد كبير من الصور.

كيف يستعمل المستخدم العادي التطبيق؟

صُمم هذا التطبيق ليكون بسيطًا حتى للمستخدم غير التقني، وهذه خطوات الاستخدام كما سيقوم بها أي مستخدم نهائي:

خطوات الاستخدام العملي:

1️⃣ تشغيل التطبيق:

   🟢 بعد التثبيت، يقوم المستخدم بفتح الملف `image_classifier.py`، فتظهر له نافذة رسومية.

2️⃣ **اختيار مجلد الصور المصدر**:

   🟢 ينقر على زر "استعراض" بجانب "مجلد الصور المصدر"، ويختار المجلد الذي يحتوي على الصور العشوائية.

3️⃣ **اختيار مجلد الوجهة**:

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

4️⃣ **بدء التصنيف**:

   🟢 ينقر على "بدء تصنيف الصور".

   🟢 يظهر شريط تقدم، ويتم تصنيف كل صورة ونقلها إلى المجلد المناسب.

5️⃣ **نتائج مرئية وفورية**:

   🟢 تظهر جميع الصور مصنفة داخل مجلدات بأسماء عربية واضحة مثل: `طعام`، `أشخاص`، `حيوانات`...

   🟢 يمكن للمستخدم مراجعة السجل في الواجهة لمعرفة كيف تم تصنيف كل صورة.

المستخدم لا يحتاج إلى معرفة برمجية — كل شيء يتم بالنقر والاختيار.  

وهذا يجعل التطبيق مثاليًا لهواة الصور، المصورين، أو حتى للاستخدام العائلي.

Image classification application using CLIP model

شرح بناء التطبيق خطوة بخطوة

في هذا القسم، سنستعرض الأجزاء الأساسية في الكود البرمجي الذي يشغل تطبيق تصنيف الصور باستخدام CLIP. سأتحدث عن كل خطوة باختصار ثم أُرفق الكتلة البرمجية الخاصة بها.

1️⃣ استيراد المكتبات

نبدأ باستيراد المكتبات الضرورية للتعامل مع الصور، الواجهة الرسومية، ونموذج CLIP.

import os import shutil import tkinter as tk from tkinter import filedialog, messagebox, ttk import threading import numpy as np from PIL import Image import torch from transformers import CLIPProcessor, CLIPModel

 2️⃣ تحميل نموذج CLIP

يتم تحميل النموذج والمعالج (processor) من Hugging Face مباشرة:

self.model = CLIPModel.from_pretrained("openai/clip-vit-base-patch32") self.processor = CLIPProcessor.from_pretrained("openai/clip-vit-base-patch32")

🟢 يتم التحميل تلقائيًا أول مرة فقط.

🟢 النموذج يُخزن محليًا ويُعاد استخدامه في المرات القادمة.

3️⃣ إعداد الواجهة الرسومية بـ Tkinter

هنا نبني العناصر الأساسية: نافذة، أزرار، إدخال المسارات، شريط تقدم...

self.root.title("تطبيق تصنيف الصور") self.source_entry = tk.Entry(...) self.dest_entry = tk.Entry(...) self.start_button = tk.Button(..., command=self.start_classification)

🟢 يمكن تخصيص التصميم بسهولة وتغيير الألوان أو النصوص.

4️⃣ عملية التصنيف باستخدام CLIP

يتم تحويل كل صورة إلى تمثيل رقمي، ثم مقارنتها بجمل نصية تمثل الفئات.

image = Image.open(image_path).convert("RGB").resize((224, 224)) text_inputs = list(self.categories.values()) inputs = self.processor(text=text_inputs, images=image, return_tensors="pt", padding=True) outputs = self.model(**inputs) probs = outputs.logits_per_image.softmax(dim=1).squeeze() category = list(self.categories.keys())[torch.argmax(probs).item()]

🟢 كل صورة تُقارن بجميع الفئات دفعة واحدة.

🟢 يتم اختيار أعلى احتمال لتحديد الفئة الأنسب.

5️⃣ نقل الصورة إلى المجلد المناسب

بعد معرفة الفئة، يتم نسخ الصورة إلى المجلد الذي يحمل اسم الفئة (بالعربية):

shutil.copy2(image_path, os.path.join(dest_dir, category, filename))

🟢 يتم إنشاء المجلدات تلقائيًا إن لم تكن موجودة.

6️⃣ التفاعل مع المستخدم: التقدم، الحالة، السجل

يتم عرض التقدم، حالة التصنيف الحالية، وتحديث سجل الأحداث بشكل مباشر:

self.progress_var.set(...) self.update_status(f"تم تصنيف: {filename}") self.log_message(f"{filename} => {category} ({prob:.2%})")

والنتيجة؟

تطبيق رسومي بسيط بواجهة عربية، وذكاء اصطناعي عالمي خلف الكواليس!

التحديات التي واجهتني أثناء تطوير التطبيق (وكيف تجاوزتها)

لا يوجد مشروع برمجي يخلو من التحديات، وهذا التطبيق لم يكن استثناءً. خلال رحلة التطوير، واجهت بعض العقبات التي تطلبت حلولًا عملية وقرارات مدروسة. إليك أبرزها:

1️⃣ أداء ضعيف عند استخدام نموذج ResNet50

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

الحل: بعد بحث وتجربة، قررت الانتقال إلى نموذج CLIP لأنه قادر على مقارنة الصورة مع وصف نصي، مما حسّن الدقة بشكل كبير، ورفع أداء التطبيق إلى ما يزيد عن 97% نجاح.

2️⃣ تحميل النموذج في كل مرة؟ مزعج وبطيء!

عند تشغيل التطبيق أول مرة، يستغرق النموذج بعض الوقت للتحميل (~600 ميجا)، وكنت أتساءل: هل سيتكرر هذا في كل مرة؟

الحل: اكتشفت أن مكتبة `transformers` تخزن النموذج محليًا في `.cache`، ولا تحتاج إلى تحميله مجددًا لاحقًا — وهذا جعل التشغيل أسرع بكثير بعد التهيئة الأولى.

3️⃣ بطء الأداء على المعالج (CPU)

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

الحل: أضفت شريط تقدم مرئي + سجل حي لتقليل شعور الانتظار، كما شرحت في المقال أن الأداء يتحسن على الأجهزة التي تدعم CUDA في بطاقة الرسوميات.

4️⃣ دعم اللغة العربية في التصنيفات

الفئات التي أردت استخدامها كانت باللغة العربية، بينما نموذج CLIP يعمل باللغة الإنجليزية. كنت قلقًا من تأثير ذلك على دقة التصنيف.

الحل: استخدمت أوصاف إنجليزية للفئات داخليًا (مثل: `"a photo of a person"`)، وربطتها بتسميات عربية تظهر للمستخدم. بهذه الطريقة، حافظت على دقة النموذج مع واجهة عربية مريحة.

والنتيجة؟

تطبيق خفيف، سهل، ويعمل بكفاءة عالية — حتى على أجهزة متوسطة.

رأيي في نموذج CLIP وتجربتي معه بعد المشروع

 بعد تجربة تطبيق حقيقي باستخدام نموذج CLIP، أستطيع القول بثقة أن هذا النموذج من OpenAI يُمثل نقلة نوعية في فهم الصور مقارنة بالنماذج التقليدية مثل ResNet أو VGG. إليك أهم الانطباعات التي خرجت بها:

🟢 الدقة:

نموذج CLIP فاجأني بدقته العالية في تصنيف الصور، خاصة عند استخدام أوصاف نصية واقعية مثل: `"a photo of a person"` أو `"a photo of food"`  

حتى مع الصور التي تحتوي على عناصر متعددة، كان قادرًا على اختيار التصنيف الأقرب.

🟢 الفهم السياقي:

النموذج لا يعتمد فقط على الشكل، بل على معنى الصورة — وهذه نقطة قوية جدًا مقارنة بالنماذج التي تتعرف فقط على الكائنات دون سياق.

🟢 المرونة:

بدل أن أكون مقيدًا بـ 1000 فئة ثابتة كما في ImageNet، استطعت تخصيص الفئات بكلماتي الخاصة، وربطها بتصنيفات عربية تناسب هدفي.

🟢 الأداء:

على الأجهزة العادية بدون GPU، الأداء مقبول لكنه أبطأ عند التعامل مع عدد كبير من الصور.  

أما على الأجهزة التي تدعم CUDA وبطاقات NVIDIA، فالأداء يتحسن بشكل كبير.

خلاصة التجربة:

إذا كنت تبحث عن نموذج ذكي لفهم الصور وتخصيص الفئات بدون تدريب مسبق، فإن CLIP هو أحد أفضل الخيارات المتاحة اليوم — خاصة للمشاريع السريعة والتجريبية أو حتى للمنتجات الأولية (MVP).

الخاتمة: جربه بنفسك!

بعد هذه الرحلة في بناء تطبيق تصنيف الصور باستخدام نموذج CLIP، أستطيع أن أقول إن الذكاء الاصطناعي لم يعد حكرًا على الشركات العملاقة أو المختبرات المتخصصة. بإمكانك، كمطور أو هاوٍ، أن تبني أدوات ذكية حقيقية تساعدك في حياتك اليومية أو تفتح لك أبوابًا لمشاريع أكبر.

هل أنت جاهز لتجربته بنفسك؟

- الكود مفتوح المصدر، والتطبيق بسيط ومباشر.

- يمكنك التعديل عليه، تخصيص الفئات، أو حتى ربطه بتطبيق ويب أو قاعدة بيانات!

- كل ما تحتاجه هو Python وبعض الشغف.

🔗 روابط مهمة:

- 📂 رابط تحميل المشروع من متجري أو GitHub

- 🎥 شاهد فيديو الشرح على قناتي: الفيديو في مرحلة التصوير

- 💬 هل لديك أفكار تطوير أو أسئلة؟ شاركني بها في التعليقات

وختامًا، إذا أعجبك هذا الشرح، لا تنس مشاركة المقال مع من يهتم بالذكاء الاصطناعي أو التصوير أو البرمجة.  

ولا تنس الاشتراك في مدونتي وقناتي باليوتيوب لمزيد من المشاريع التقنية المفيدة والبسيطة.

شكرًا لقراءتك ... والآن دورك لتصنع شيئًا ذكيًا!


مصطفى أمان
مصطفى أمان
صانع محتوى تعليمي تقني على مدونتي وعلى قناة اليوتيوب. وهدفي من هذا المحتوى هو محو الأمية المتعلقة بمجال تكنولوجيا المعلومات حتى نبدأ من حيث انتهى الأخرين.
تعليقات



    /*إشعار رسالة الكوكيز*/