Link to this sectionكيفية بناء بحث دلالي عن الصور باستخدام OpenAI CLIP#
يرشدك هذا الدليل خلال بناء محرك بحث دلالي عن الصور باستخدام OpenAI CLIP وFlask. من خلال الجمع بين تضمينات الرؤية واللغة الخاصة بـ CLIP والبحث السريع عن تشابه جيب التمام المدعوم بواسطة NumPy، يمكنك بناء واجهة ويب تسترجع الصور ذات الصلة من استعلامات اللغة الطبيعية، دون الحاجة إلى تسميات أو فئات.
Watch: How Similarity Search Works | Visual Search Using OpenAI CLIP and the Ultralytics Package 🎉

تغلف حزمة Python من Ultralytics هذا المسار بأكمله داخل فئتين، مما يتيح لك تشغيل تطبيق بحث فعال أو تنفيذ استعلامات برمجياً في بضعة أسطر. يغطي هذا الدليل سبب فائدة البحث الدلالي، وكيفية عمله، وتشغيل تطبيق الويب، والبحث برمجياً، وتهيئة المعلمات.
Link to this sectionلماذا نستخدم البحث الدلالي عن الصور؟#
يوفر بناء نظام البحث الدلالي الخاص بك عن الصور باستخدام CLIP العديد من المزايا المقنعة:
- إمكانيات التعلم بدون أمثلة (Zero-shot): لا تحتاج إلى التدريب على مجموعة البيانات الخاصة بك. يتيح لك التعلم بدون أمثلة الخاص بـ CLIP الاستعلام عن أي مجموعة صور بلغة طبيعية حرة، مما يوفر الوقت والموارد.
- فهم يشبه الإنسان: على عكس البحث بالكلمات المفتاحية، يفهم CLIP السياق الدلالي ويسترجع الصور من استعلامات مجردة أو عاطفية أو متعلقة، مثل "طفل سعيد في الطبيعة" أو "أفق مدينة مستقبلية في الليل".
- لا توجد تسميات أو بيانات وصفية: يحتاج هذا النهج فقط إلى صور أولية. ينشئ CLIP متجهات (embeddings) دون أي تعليق توضيحي يدوي.
- بحث خفيف ودقيق: عملية ضرب مصفوفة واحدة مُطبعة في NumPy ترتب كل صورة حسب تشابه جيب التمام، مما يعطي نتائج دقيقة باستجابة فورية عبر آلاف التضمينات دون الحاجة إلى تثبيت أو إدارة تبعية بحث إضافية.
- تطبيقات عبر مجالات متعددة: سواء كنت تبني أرشيف صور شخصياً، أو أداة إلهام إبداعي، أو محرك بحث عن منتجات، أو نظام توصية فني، فإن نفس المجموعة التقنية تتكيف مع الحد الأدنى من التعديلات.
Link to this sectionكيف يعمل البحث الدلالي عن الصور#
يجمع هذا المسار بين ثلاثة مكونات، كل منها يتعامل مع مرحلة واحدة من تحويل الصور والنصوص إلى نتائج مرتبة:
- يستخدم CLIP مشفراً مرئياً (مثل ResNet أو ViT) للصور ومشفراً نصياً (يعتمد على Transformer) للغة لإسقاط كليهما في نفس مساحة المتجهات متعددة الوسائط. هذا يسمح بالمقارنة المباشرة بين النص والصور باستخدام تشابه جيب التمام (cosine similarity).
- يقوم NumPy بتخزين تضمينات الصور كمصفوفة واحدة ويرتبها مقابل تضمين الاستعلام بعملية ضرب مصفوفة واحدة، مما يعيد أقرب المتجهات حسب تشابه جيب التمام دون أي تبعية فهرسة إضافية.
- توفر Flask واجهة ويب بسيطة لتقديم استعلامات اللغة الطبيعية وعرض الصور المتطابقة دلالياً من الفهرس.

بما أن كلاً من الصور والنص ينتهي بهما المطاف في نفس مساحة المتجهات، فإن الاسترجاع يتم بدون أمثلة (zero-shot): لست بحاجة إلى تسميات أو فئات، فقط بيانات الصور ومطالبة جيدة.
Link to this sectionتشغيل تطبيق الويب للبحث الدلالي#
تقوم فئة SearchApp بتشغيل واجهة Flask الكاملة. عند التشغيل الأول، تقوم بتنزيل مجموعة صور نموذجية، وبناء فهرس التضمين، وتقديم صفحة حيث يمكنك كتابة استعلام وعرض النتائج المصنفة.
تحذير مسار الصورة
إذا كنت تستخدم صورك الخاصة، فتأكد من توفير مسار مطلق لدليل الصور. وإلا، فقد لا تظهر الصور على صفحة الويب بسبب قيود خدمة الملفات في 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 testingLink to this sectionالبحث عن الصور برمجياً#
تقوم فئة VisualAISearch بتنفيذ جميع عمليات الخلفية دون طبقة الويب:
- تحميل أو بناء فهرس تضمين من الصور المحلية.
- استخراج تضمينات الصور والنصوص باستخدام 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.2680Link to this sectionتهيئة معلمات VisualAISearch#
يوضح الجدول أدناه المعلمات المتاحة لـ VisualAISearch:
| الوسيط | النوع | الافتراضي | الوصف |
|---|---|---|---|
data | str | 'images' | المسار إلى دليل الصور المستخدم للبحث عن التشابه. |
| الوسيط | النوع | الافتراضي | الوصف |
|---|---|---|---|
device | str | None | يحدد الجهاز للاستدلال (على سبيل المثال، cpu أو cuda:0 أو 0). يسمح للمستخدمين بالاختيار بين وحدة المعالجة المركزية، أو وحدة معالجة رسومات محددة، أو أجهزة حوسبة أخرى لتنفيذ النموذج. |
للبحث في مجموعات الصور على نطاق الإنتاج دون إدارة الملفات المحلية، يمكنك تنظيم وإصدار صورك في منصة Ultralytics قبل فهرستها باستخدام CLIP.
Link to this sectionالخلاصة#
باستخدام CLIP وحزمة Ultralytics Python، يمكنك إعداد محرك بحث دلالي للصور بدون تدريب مسبق (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كيف يتم ترتيب الصور مقابل استعلام نصي؟#
بمجرد أن تقوم CLIP بتحويل صورك إلى تضمينات، تقوم حزمة Ultralytics بتطبيعها (L2-normalizes) وتخزينها في مصفوفة NumPy واحدة. يتم ترتيب الاستعلام بعملية ضرب مصفوفة واحدة تحسب تشابه جيب التمام بين تضمين الاستعلام وكل تضمين صورة، ثم تقوم بفرز النتائج. هذا البحث بالقوة الغاشمة دقيق وسريع لمجموعات الصور النموذجية، مع عدم وجود تبعية لقاعدة بيانات متجهات إضافية لتثبيتها أو إدارتها.
Link to this sectionWhy use the Ultralytics Python package if CLIP is from OpenAI?#
على الرغم من أن CLIP تم تطويرها بواسطة OpenAI، إلا أن حزمة Ultralytics Python تجمع بين توليد التضمين، والفهرسة، والبحث عن تشابه جيب التمام في خط أنابيب بحث دلالي كامل للصور خلف بضعة أسطر من التعليمات البرمجية التي تعمل مباشرة:
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.
- إنشاء وإدارة فهرس التضمين.
- البحث الدلالي الفعال باستخدام تشابه جيب التمام.
- تحميل الصور المستند إلى الدليل والتحقق المرئي.
Link to this sectionهل يمكنني تخصيص الواجهة الأمامية لهذا التطبيق؟#
نعم. يستخدم الإعداد الحالي Flask مع واجهة HTML أساسية، ولكن يمكنك استبدالها بـ HTML الخاص بك أو بناء واجهة مستخدم أكثر ديناميكية باستخدام React أو Vue أو أي إطار عمل آخر للواجهة الأمامية. يمكن لـ Flask العمل كـ REST API للخلفية لواجهتك المخصصة.
Link to this sectionهل من الممكن البحث عبر مقاطع الفيديو بدلاً من الصور الثابتة؟#
ليس بشكل مباشر. الحل البديل البسيط هو استخراج إطارات فردية من مقاطع الفيديو الخاصة بك (على سبيل المثال، إطار واحد كل ثانية)، ومعاملتها كصور مستقلة، وتغذيتها في النظام. بهذه الطريقة، يمكن لمحرك البحث فهرسة اللحظات المرئية من مقاطع الفيديو الخاصة بك دلالياً.