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

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

نظرًا إلى أن الصور والنصوص يقعان في مساحة المتجهات نفسها، فإن الاسترجاع يتم دون تدريب مسبق: لا تحتاج إلى تسميات أو فئات، بل إلى بيانات الصور ومطالبة جيدة فقط.
تشغيل تطبيق الويب للبحث الدلالي#
تُشغّل الفئة SearchApp واجهة Flask الكاملة. عند التشغيل للمرة الأولى، تنزّل مجموعة صور نموذجية، وتنشئ فهرس التضمينات، وتقدم صفحة يمكنك فيها كتابة استعلام وعرض النتائج المرتبة.
تحذير بشأن مسار الصور
إذا كنت تستخدم صورك الخاصة، فتأكد من توفير مسار مطلق إلى دليل الصور. وإلا فقد لا تظهر الصور على صفحة الويب بسبب قيود Flask على تقديم الملفات.
from ultralytics import solutions
app = solutions.SearchApp(
data="images", # replace with a path to build the 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 جميع عمليات الواجهة الخلفية من دون طبقة الويب:
- تحميل فهرس التضمينات من الصور المحلية أو إنشاؤه.
- استخراج التضمينات الخاصة بالصور والنصوص باستخدام CLIP.
- تنفيذ البحث عن التشابه باستخدام التشابه الجيبي.
استدعِ أداة البحث باستخدام استعلام باللغة الطبيعية لتحصل على قائمة بأسماء ملفات الصور المطابقة مرتبة حسب التشابه:
from ultralytics import solutions
searcher = solutions.VisualAISearch(
data="images", # replace with a path to build the 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تكوين معلمات VisualAISearch#
يوضح الجدول أدناه المعلمات المتاحة لـ VisualAISearch:
| الوسيطة | النوع | الافتراضي | الوصف |
|---|---|---|---|
data | str | 'images' | المسار إلى دليل الصور المطلوب فهرسته والبحث فيه. |
device | str | 'cpu' | الجهاز المستخدم لاستدلال CLIP (مثل cpu وcuda و0). |
للبحث في مجموعات الصور على نطاق الإنتاج من دون إدارة الملفات المحلية، يمكنك تنظيم صورك وإصداراتها في منصة Ultralytics قبل فهرستها باستخدام CLIP.
الخلاصة#
باستخدام CLIP وحزمة Ultralytics Python، يمكنك إنشاء محرك بحث دلالي عن الصور دون تدريب مسبق في بضعة أسطر فقط، سواء كتطبيق ويب Flask أو كواجهة خلفية للبحث البرمجي. من هنا، وجّه data إلى دليل الصور الخاص بك لفهرسته، ثم استكشف حلول Ultralytics الأخرى للبناء فوق سير عمل الرؤية الحاسوبية لديك.
الأسئلة الشائعة#
إن CLIP (التدريب التبايني على اللغة والصور (Contrastive Language Image Pretraining)) هو نموذج طورته OpenAI ليتعلم الربط بين المعلومات المرئية واللغوية. وقد دُرّب على مجموعة بيانات ضخمة من الصور المقترنة بتعليقات توضيحية باللغة الطبيعية. يتيح له هذا التدريب تعيين كل من الصور والنصوص إلى مساحة تضمين مشتركة، بحيث يمكنك مقارنتها مباشرة باستخدام تشابه المتجهات.
ما يميز CLIP هو قدرته على التعميم. فبدلًا من تدريبه لمجرد تسميات أو مهام محددة، يتعلم من اللغة الطبيعية نفسها. ويتيح له ذلك التعامل مع استعلامات مرنة مثل "رجل يركب دراجة مائية" أو "مشهد أحلام سريالي"، مما يجعله مفيدًا لكل شيء بدءًا من التصنيف ووصولًا إلى البحث الدلالي الإبداعي، من دون إعادة التدريب.
بعد أن يحوّل CLIP صورك إلى تضمينات، تطبّعها حزمة Ultralytics باستخدام معيار L2 وتخزنها في مصفوفة NumPy واحدة. يُرتب الاستعلام باستخدام عملية ضرب مصفوفات واحدة تحسب التشابه الجيبي بين تضمين الاستعلام وكل تضمين صورة، ثم ترتب الدرجات. هذا البحث بالقوة الغاشمة دقيق وسريع لمجموعات الصور المعتادة، من دون تبعية إضافية لقاعدة بيانات متجهات لتثبيتها أو إدارتها.
رغم أن OpenAI تطور CLIP، فإن حزمة Ultralytics Python تغلّف إنشاء التضمينات وفهرستها والبحث عن التشابه الجيبي في خط أنابيب كامل للبحث الدلالي عن الصور، خلف بضعة أسطر من التعليمات البرمجية تعمل مباشرة:
from ultralytics import solutions searcher = solutions.VisualAISearch( data="images", # replace with a path to build the 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.
- إنشاء فهرس التضمينات وإدارته.
- بحث دلالي فعال باستخدام التشابه الجيبي.
- تحميل الصور المستند إلى الدليل وتصويرها.
نعم. يستخدم الإعداد الحالي Flask مع واجهة أمامية أساسية بلغة HTML، ولكن يمكنك استبدالها بواجهة HTML الخاصة بك أو إنشاء واجهة مستخدم أكثر ديناميكية باستخدام React أو Vue أو إطار عمل آخر للواجهة الأمامية. ويمكن أن تعمل Flask كواجهة API خلفية لواجهتك المخصصة.
ليس مباشرةً. يتمثل الحل البديل البسيط في استخراج إطارات فردية من مقاطع الفيديو (مثل إطار واحد كل ثانية)، والتعامل معها كصور مستقلة، وإدخالها إلى النظام. وبهذه الطريقة، يمكن لمحرك البحث فهرسة اللحظات المرئية في مقاطع الفيديو دلاليًا.