Meet YOLO26: next-gen vision AI.

Link to this sectionكيفية بناء بحث دلالي عن الصور باستخدام OpenAI CLIP و Meta FAISS#

يرشدك هذا الدليل خلال بناء محرك بحث دلالي عن الصور (semantic image search) باستخدام OpenAI CLIP و Meta FAISS و Flask. من خلال الجمع بين تضمينات الرؤية واللغة الخاصة بـ CLIP والبحث الفعال عن أقرب جار في FAISS، يمكنك إنشاء واجهة ويب تسترجع الصور ذات الصلة بناءً على استعلامات اللغة الطبيعية، دون الحاجة إلى تصنيفات أو فئات.



Watch: How Similarity Search Works | Visual Search Using OpenAI CLIP, META FAISS and Ultralytics Package 🎉

نظرة عامة على صفحة ويب Flask مع نتائج البحث الدلالي

تغلف حزمة Python من Ultralytics هذا المسار بأكمله داخل فئتين، مما يتيح لك تشغيل تطبيق بحث فعال أو تنفيذ استعلامات برمجياً في بضعة أسطر. يغطي هذا الدليل سبب فائدة البحث الدلالي، وكيفية عمله، وتشغيل تطبيق الويب، والبحث برمجياً، وتهيئة المعلمات.

Link to this sectionلماذا نستخدم البحث الدلالي عن الصور؟#

يوفر بناء نظام بحث دلالي عن الصور خاص بك باستخدام CLIP و FAISS العديد من المزايا المقنعة:

  • إمكانيات التعلم بدون أمثلة (Zero-shot): لا تحتاج إلى التدريب على مجموعة البيانات الخاصة بك. يتيح لك التعلم بدون أمثلة الخاص بـ CLIP الاستعلام عن أي مجموعة صور بلغة طبيعية حرة، مما يوفر الوقت والموارد.
  • فهم يشبه الإنسان: على عكس البحث بالكلمات المفتاحية، يفهم CLIP السياق الدلالي ويسترجع الصور من استعلامات مجردة أو عاطفية أو متعلقة، مثل "طفل سعيد في الطبيعة" أو "أفق مدينة مستقبلية في الليل".
  • لا توجد تسميات أو بيانات وصفية: يحتاج هذا النهج فقط إلى صور أولية. ينشئ CLIP متجهات (embeddings) دون أي تعليق توضيحي يدوي.
  • بحث مرن وقابل للتوسع: يقدم FAISS بحثاً سريعاً عن أقرب الجيران حتى على مجموعات البيانات الكبيرة، مع استجابة في الوقت الفعلي عبر آلاف أو ملايين المتجهات.
  • تطبيقات عبر مجالات متعددة: سواء كنت تبني أرشيف صور شخصياً، أو أداة إلهام إبداعي، أو محرك بحث عن منتجات، أو نظام توصية فني، فإن نفس المجموعة التقنية تتكيف مع الحد الأدنى من التعديلات.

Link to this sectionكيف يعمل البحث الدلالي عن الصور#

يجمع هذا المسار بين ثلاثة مكونات، كل منها يتعامل مع مرحلة واحدة من تحويل الصور والنصوص إلى نتائج مرتبة:

  • يستخدم CLIP مشفراً مرئياً (مثل ResNet أو ViT) للصور ومشفراً نصياً (يعتمد على Transformer) للغة لإسقاط كليهما في نفس مساحة المتجهات متعددة الوسائط. هذا يسمح بالمقارنة المباشرة بين النص والصور باستخدام تشابه جيب التمام (cosine similarity).
  • يقوم FAISS (Facebook AI Similarity Search) ببناء فهرس لمتجهات الصور ويتيح استرجاعاً سريعاً وقابلاً للتوسع لأقرب المتجهات إلى استعلام معين.
  • توفر Flask واجهة ويب بسيطة لتقديم استعلامات اللغة الطبيعية وعرض الصور المتطابقة دلالياً من الفهرس.

سير عمل استرجاع الصور بواسطة OpenAI CLIP

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

سير عمل بناء متجهات البحث الخاصة بـ Meta FAISS

Link to this sectionتشغيل تطبيق الويب للبحث الدلالي#

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

تحذير مسار الصورة

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

from ultralytics import solutions

app = solutions.SearchApp(
    # data = "path/to/img/directory" # Optional, build search engine with your own images
    device="cpu"  # configure the device for processing, e.g., "cpu" or "cuda"
)

app.run(debug=False)  # You can also use `debug=True` argument for testing

Link to this sectionالبحث عن الصور برمجياً#

تقوم فئة VisualAISearch بتنفيذ جميع عمليات الخلفية دون طبقة الويب:

  • تحميل أو بناء فهرس FAISS من الصور المحلية.
  • استخراج تضمينات الصور والنصوص باستخدام CLIP.
  • إجراء بحث عن التشابه باستخدام تشابه جيب التمام.

استدعِ أداة البحث باستعلام لغة طبيعية للحصول على قائمة بأسماء ملفات الصور المطابقة مرتبة حسب التشابه:

from ultralytics import solutions

searcher = solutions.VisualAISearch(
    # data = "path/to/img/directory" # Optional, build search engine with your own images
    device="cpu"  # configure the device for processing, e.g., "cpu" or "cuda"
)

results = searcher("a dog sitting on a bench")

# Ranked Results:
#     - 000000546829.jpg | Similarity: 0.3269
#     - 000000549220.jpg | Similarity: 0.2899
#     - 000000517069.jpg | Similarity: 0.2761
#     - 000000029393.jpg | Similarity: 0.2742
#     - 000000534270.jpg | Similarity: 0.2680

Link to this sectionتهيئة معلمات VisualAISearch#

يوضح الجدول أدناه المعلمات المتاحة لـ VisualAISearch:

الوسيطالنوعالافتراضيالوصف
datastr'images'المسار إلى دليل الصور المستخدم للبحث عن التشابه.
الوسيطالنوعالافتراضيالوصف
devicestrNoneيحدد الجهاز للاستدلال (على سبيل المثال، cpu أو cuda:0 أو 0). يسمح للمستخدمين بالاختيار بين وحدة المعالجة المركزية، أو وحدة معالجة رسومات محددة، أو أجهزة حوسبة أخرى لتنفيذ النموذج.
إدارة بياناتك في السحابة

للبحث في مجموعات الصور على نطاق الإنتاج دون إدارة الملفات المحلية، يمكنك تنظيم صورك وإصدارها في منصة Ultralytics قبل فهرستها باستخدام CLIP و FAISS.

Link to this sectionالخلاصة#

باستخدام CLIP و FAISS وحزمة Python من Ultralytics، يمكنك إعداد محرك بحث دلالي عن الصور يعمل بدون أمثلة (zero-shot) في بضعة أسطر فقط، سواء كتطبيق ويب Flask أو كخلفية بحث برمجية. من هنا، وجه data إلى دليل الصور الخاص بك لفهرسته، ثم استكشف حلول Ultralytics الأخرى للبناء فوق مهام سير عمل رؤية الكمبيوتر الخاصة بك.

Link to this sectionالأسئلة الشائعة#

Link to this sectionكيف يفهم CLIP كلاً من الصور والنص؟#

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

Link to this sectionلماذا يعتبر CLIP قوياً جداً لمهام الذكاء الاصطناعي؟#

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

Link to this sectionما الذي يفعله FAISS بالضبط في هذا المشروع (البحث الدلالي)؟#

FAISS (Facebook AI Similarity Search) هي مجموعة أدوات تساعدك على البحث عبر المتجهات عالية الأبعاد بكفاءة عالية. بمجرد أن يقوم CLIP بتحويل صورك إلى متجهات (embeddings)، يجعل FAISS من السهل والسريع العثور على أقرب المطابقات لاستعلام نصي، وهو مثالي لاسترجاع الصور في الوقت الفعلي.

Link to this sectionWhy use the Ultralytics Python package if CLIP and FAISS are from OpenAI and Meta?#

بينما يتم تطوير CLIP و FAISS بواسطة OpenAI و Meta على التوالي، فإن حزمة Python من Ultralytics تغلف كلاً منهما في مسار بحث دلالي كامل عن الصور خلف بضعة أسطر من التعليمات البرمجية التي تعمل ببساطة:

from ultralytics import solutions

searcher = solutions.VisualAISearch(
    # data = "path/to/img/directory" # Optional, build search engine with your own images
    device="cpu"  # configure the device for processing, e.g., "cpu" or "cuda"
)

results = searcher("a dog sitting on a bench")

يتعامل هذا التنفيذ عالي المستوى مع:

  • إنشاء متجهات الصور والنصوص المستندة إلى CLIP.
  • إنشاء فهرس FAISS وإدارته.
  • البحث الدلالي الفعال باستخدام تشابه جيب التمام.
  • تحميل الصور المستند إلى الدليل والتحقق المرئي.

Link to this sectionهل يمكنني تخصيص الواجهة الأمامية لهذا التطبيق؟#

نعم. يستخدم الإعداد الحالي Flask مع واجهة HTML أساسية، ولكن يمكنك استبدالها بـ HTML الخاص بك أو بناء واجهة مستخدم أكثر ديناميكية باستخدام React أو Vue أو أي إطار عمل آخر للواجهة الأمامية. يمكن لـ Flask العمل كـ REST API للخلفية لواجهتك المخصصة.

Link to this sectionهل من الممكن البحث عبر مقاطع الفيديو بدلاً من الصور الثابتة؟#

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

التعليقات