كيفية إنشاء بحث دلالي عن الصور باستخدام OpenAI CLIP#
يشرح هذا الدليل خطوات إنشاء محرك بحث دلالي عن الصور باستخدام OpenAI CLIP وFlask. ومن خلال الجمع بين التضمينات المرئية واللغوية في CLIP والبحث السريع عن التشابه الجيبي باستخدام NumPy، يمكنك إنشاء واجهة ويب تسترجع الصور ذات الصلة استنادًا إلى استعلامات باللغة الطبيعية، من دون الحاجة إلى تسميات أو فئات.
شاهد: كيف يعمل البحث عن التشابه | البحث المرئي باستخدام OpenAI CLIP وحزمة Ultralytics 🎉

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

بما أن الصور والنصوص يتمثلان في مساحة المتجهات نفسها، فإن الاسترجاع يتم دون تدريب مسبق: لا تحتاج إلى تسميات أو فئات، بل إلى بيانات الصور وموجّه جيد فحسب.
تشغيل تطبيق الويب للبحث الدلالي#
تُشغّل الفئة SearchApp واجهة Flask كاملة. عند التشغيل للمرة الأولى، تنزّل مجموعة صور نموذجية، وتنشئ فهرس التضمينات، وتعرض صفحة يمكنك فيها كتابة استعلام ومشاهدة النتائج المرتبة.
from ultralytics import solutions
app = solutions.SearchApp(
data="images", # استبدله بمسار لإنشاء محرك البحث باستخدام صورك الخاصة
device="cpu", # هيّئ الجهاز للمعالجة، مثل "cpu" أو "cuda"
)
app.run(debug=False) # يمكنك أيضًا استخدام الوسيط `debug=True` للاختبارالبحث في الصور برمجيًا#
تنفّذ الفئة VisualAISearch جميع عمليات الواجهة الخلفية من دون طبقة الويب:
- ينشئ فهرسًا للتضمينات من الصور المحلية عند كل بدء تشغيل.
- يستخرج تضمينات الصور والنصوص باستخدام CLIP.
- تنفيذ البحث عن التشابه باستخدام تشابه جيب التمام.
استدعِ أداة البحث مع استعلام باللغة الطبيعية للحصول على قائمة بأسماء ملفات الصور المطابقة مرتبة حسب التشابه:
from ultralytics import solutions
searcher = solutions.VisualAISearch(
data="images", # استبدله بمسار لإنشاء محرك البحث باستخدام صورك الخاصة
device="cpu", # هيّئ الجهاز للمعالجة، مثل "cpu" أو "cuda"
)
results = searcher("a dog sitting on a bench")
# # النتائج المرتبة:
# - 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 Platform قبل فهرستها باستخدام CLIP.
الخلاصة#
باستخدام CLIP وحزمة Ultralytics Python، يمكنك إعداد محرك بحث دلالي عن الصور يعمل دون تدريب مسبق، في بضعة أسطر فقط، سواء كتطبيق ويب باستخدام Flask أو كواجهة خلفية للبحث البرمجي. من هنا، وجّه data إلى دليل الصور الخاص بك لفهرسته، ثم استكشف حلول Ultralytics الأخرى لتطوير مسارات عمل الرؤية الحاسوبية لديك.
الأسئلة الشائعة#
CLIP (التدريب المسبق التبايني للغة والصورة) نموذج طورته OpenAI ويتعلم الربط بين المعلومات المرئية واللغوية. دُرّب النموذج على مجموعة بيانات ضخمة من الصور المقترنة بتعليقات باللغة الطبيعية. ويتيح له هذا التدريب تحويل الصور والنصوص إلى فضاء تضمينات مشترك، بحيث يمكنك مقارنتها مباشرةً باستخدام تشابه المتجهات.
ما يميز CLIP هو قدرته على التعميم. فبدلًا من تدريبه على تسميات أو مهام محددة فقط، يتعلم من اللغة الطبيعية نفسها. ويتيح ذلك له التعامل مع استعلامات مرنة مثل «رجل يقود دراجة مائية» أو «مشهد حلم سريالي»، ما يجعله مفيدًا لكل شيء بدءًا من التصنيف ووصولًا إلى البحث الدلالي الإبداعي، دون إعادة تدريب.
بعد أن يحوّل CLIP صورك إلى تضمينات، تطبّع حزمة Ultralytics قيمها باستخدام معيار L2 وتخزنها في مصفوفة NumPy واحدة. ويُرتّب الاستعلام بعملية ضرب مصفوفات واحدة تحسب التشابه الجيبي بين تضمين الاستعلام وتضمين كل صورة، ثم ترتّب الدرجات. وهذا البحث بالقوة الغاشمة دقيق وسريع لمجموعات الصور المعتادة، ولا يتطلب تثبيت تبعية إضافية لقواعد بيانات المتجهات أو إدارتها.
مع أن OpenAI طورت CLIP، فإن حزمة Ultralytics لـ Python تجمع إنشاء التضمينات والفهرسة والبحث بالتشابه الجيبي في مسار متكامل للبحث الدلالي عن الصور، باستخدام بضعة أسطر من الشيفرة:
from ultralytics import solutions searcher = solutions.VisualAISearch( data="images", # استبدله بمسار لإنشاء محرك البحث باستخدام صورك الخاصة device="cpu", # هيّئ الجهاز للمعالجة، مثل "cpu" أو "cuda" ) results = searcher("a dog sitting on a bench")يتولى هذا التطبيق عالي المستوى ما يلي:
- إنشاء تضمينات الصور والنصوص استنادًا إلى CLIP.
- إنشاء فهرس التضمينات وإدارته.
- البحث الدلالي بكفاءة باستخدام تشابه جيب التمام.
- تحميل الصور من المجلدات وعرضها مرئيًا.
نعم. يستخدم الإعداد الحالي Flask مع واجهة أمامية أساسية مكتوبة بـ HTML، لكن يمكنك استبدالها بواجهة HTML خاصة بك أو إنشاء واجهة مستخدم أكثر ديناميكية باستخدام React أو Vue أو إطار عمل آخر للواجهات الأمامية. ويمكن استخدام Flask كواجهة API خلفية لواجهتك المخصصة.
ليس مباشرةً. ومن الحلول البديلة البسيطة استخراج إطارات فردية من مقاطع الفيديو (مثل إطار واحد كل ثانية)، ومعاملتها كصور مستقلة، ثم تمريرها إلى النظام. وبهذه الطريقة، يستطيع محرك البحث فهرسة اللحظات المرئية في مقاطع الفيديو دلاليًا.