البحث الدلالي عن الصور باستخدام OpenAI CLIP وMeta FAISS
مقدمة
يرشدك هذا الدليل إلى بناء محرك للبحث الدلالي عن الصور باستخدام OpenAI CLIP وMeta FAISS وFlask. من خلال دمج تضمينات CLIP القوية للغة المرئية مع بحث FAISS الفعال عن أقرب الجيران، يمكنك إنشاء واجهة ويب كاملة الوظائف حيث يمكنك استرجاع الصور ذات الصلة باستخدام استعلامات اللغة الطبيعية.
Watch: How Similarity Search Works | Visual Search Using OpenAI CLIP, META FAISS and Ultralytics Package 🎉
معاينة مرئية للبحث الدلالي عن الصور

كيف يعمل
- يستخدم CLIP مشفر رؤية (على سبيل المثال، ResNet أو ViT) للصور ومشفر نصوص (قائم على Transformer) للغة لإسقاط كليهما في نفس مساحة التضمين متعدد الوسائط. هذا يسمح بالمقارنة المباشرة بين النص والصور باستخدام تشابه جيب التمام.
- يبني FAISS (Facebook AI Similarity Search) فهرسًا لتضمينات الصور ويمكّن من استرجاع سريع وقابل للتوسع لأقرب المتجهات لاستعلام معين.
- يوفر Flask واجهة ويب بسيطة لإرسال استعلامات اللغة الطبيعية وعرض الصور المطابقة دلالياً من الفهرس.
تدعم هذه البنية البحث بدون تدريب (zero-shot)، مما يعني أنك لا تحتاج إلى تسميات أو فئات، فقط بيانات الصور ومطالبة (prompt) جيدة.
تحذير مسار الصورة
إذا كنت تستخدم صورك الخاصة، تأكد من توفير مسار مطلق لدليل الصور. خلاف ذلك، قد لا تظهر الصور على صفحة الويب بسبب قيود خدمة الملفات في 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فئة VisualAISearch
تقوم هذه الفئة بجميع عمليات الخلفية:
- تحميل أو بناء فهرس FAISS من الصور المحلية.
- استخراج التضمينات للصور والنصوص باستخدام CLIP.
- إجراء بحث عن التشابه باستخدام تشابه جيب التمام.
تحذير مسار الصورة
إذا كنت تستخدم صورك الخاصة، تأكد من توفير مسار مطلق لدليل الصور. خلاف ذلك، قد لا تظهر الصور على صفحة الويب بسبب قيود خدمة الملفات في Flask.
from ultralytics import solutions
searcher = solutions.VisualAISearch(
# data = "path/to/img/directory" # Optional, build search engine with your own images
device="cuda" # 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معاملات VisualAISearch
يوضح الجدول أدناه المعاملات المتاحة لـ VisualAISearch:
| المعامل | النوع | الافتراضي | الوصف |
|---|---|---|---|
data | str | 'images' | مسار إلى دليل الصور المستخدم للبحث عن التشابه. |
| المعامل | النوع | الافتراضي | الوصف |
|---|---|---|---|
device | str | None | يحدد الجهاز للاستنتاج (على سبيل المثال، cpu، أو cuda:0 أو 0). يسمح للمستخدمين بالاختيار بين CPU، أو GPU محدد، أو أجهزة حوسبة أخرى لتنفيذ النموذج. |
مزايا البحث الدلالي عن الصور باستخدام CLIP وFAISS
يوفر بناء نظام البحث الدلالي عن الصور الخاص بك باستخدام CLIP وFAISS العديد من المزايا المقنعة:
-
قدرات Zero-Shot: لا تحتاج إلى تدريب النموذج على مجموعة بياناتك المحددة. يتيح لك تعلم CLIP بدون تدريب مسبق إجراء استعلامات بحث على أي مجموعة بيانات صور باستخدام لغة طبيعية حرة، مما يوفر الوقت والموارد.
-
فهم يشبه الإنسان: على عكس محركات البحث القائمة على الكلمات المفتاحية، يفهم CLIP السياق الدلالي. يمكنه استرجاع الصور بناءً على استعلامات مجردة أو عاطفية أو علائقية مثل "طفل سعيد في الطبيعة" أو "أفق مدينة مستقبلية في الليل".

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

-
تطبيقات عبر المجالات: سواء كنت تبني أرشيف صور شخصي، أو أداة إلهام إبداعي، أو محرك بحث عن المنتجات، أو حتى نظام توصية فني، فإن هذه الحزمة تتكيف مع مجالات متنوعة بأقل قدر من التعديل.
الأسئلة الشائعة
كيف يفهم CLIP كلاً من الصور والنصوص؟
CLIP (التدريب المسبق التبايني للغة والصور) هو نموذج طورته OpenAI يتعلم ربط المعلومات المرئية واللغوية. يتم تدريبه على مجموعة بيانات ضخمة من الصور المقترنة بتعليقات باللغة الطبيعية. يسمح هذا التدريب له برسم خرائط لكل من الصور والنصوص في مساحة تضمين مشتركة، بحيث يمكنك مقارنتها مباشرة باستخدام تشابه المتجهات.
لماذا يعتبر CLIP قوياً جداً لمهام الذكاء الاصطناعي؟
ما يجعل CLIP متميزاً هو قدرته على التعميم. بدلاً من تدريبه فقط على تسميات أو مهام محددة، فإنه يتعلم من اللغة الطبيعية نفسها. هذا يسمح له بالتعامل مع استعلامات مرنة مثل "رجل يركب جت سكي" أو "مشهد حلم سريالي"، مما يجعله مفيداً لكل شيء بدءاً من التصنيف إلى البحث الدلالي الإبداعي، دون الحاجة إلى إعادة تدريب.
ما الذي يفعله FAISS بالضبط في هذا المشروع (البحث الدلالي)؟
FAISS (Facebook AI Similarity Search) هي مجموعة أدوات تساعدك على البحث عبر المتجهات عالية الأبعاد بكفاءة عالية. بمجرد أن يقوم CLIP بتحويل صورك إلى تضمينات، يجعل FAISS العثور على أقرب المطابقات لاستعلام نصي سريعاً وسهلاً، وهو مثالي لاسترجاع الصور في الوقت الفعلي.
لماذا نستخدم حزمة Ultralytics Python إذا كان CLIP وFAISS من OpenAI وMeta؟
بينما تم تطوير CLIP وFAISS بواسطة OpenAI وMeta على التوالي، فإن حزمة Ultralytics Python تبسط دمجها في خط أنابيب بحث دلالي كامل عن الصور في سير عمل مكون من سطرين يعمل مباشرة:
from ultralytics import solutions
searcher = solutions.VisualAISearch(
# data = "path/to/img/directory" # Optional, build search engine with your own images
device="cuda" # 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يتعامل هذا التنفيذ عالي المستوى مع:
- توليد تضمينات الصور والنصوص القائمة على CLIP.
- إنشاء وإدارة فهرس FAISS.
- البحث الدلالي الفعال باستخدام تشابه جيب التمام.
- تحميل الصور المستند إلى الدليل والتصور.
هل يمكنني تخصيص الواجهة الأمامية لهذا التطبيق؟
نعم. يستخدم الإعداد الحالي Flask مع واجهة أمامية أساسية بتنسيق HTML، ولكن يمكنك استبدالها بـ HTML الخاص بك أو بناء واجهة مستخدم أكثر ديناميكية باستخدام React أو Vue أو أي إطار عمل آخر للواجهة الأمامية. يمكن لـ Flask أن يعمل كواجهة برمجة تطبيقات خلفية لواجهتك المخصصة.
هل من الممكن البحث عبر مقاطع الفيديو بدلاً من الصور الثابتة؟
ليس بشكل مباشر. الحل البديل البسيط هو استخراج إطارات فردية من مقاطع الفيديو الخاصة بك (على سبيل المثال، إطار واحد كل ثانية)، ومعاملتها كصور مستقلة، وتغذيتها في النظام. بهذه الطريقة، يمكن لمحرك البحث فهرسة اللحظات المرئية من مقاطع الفيديو الخاصة بك دلالياً.