Ultralytics YOLO27:
Get Started

كيفية إنشاء بحث دلالي عن الصور باستخدام OpenAI CLIP#

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



شاهد: كيف يعمل البحث عن التشابه | البحث المرئي باستخدام OpenAI CLIP وحزمة Ultralytics 🎉

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

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

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

  • قدرات التعلّم دون تدريب مسبق: لا تحتاج إلى التدريب على مجموعة بياناتك. يتيح التعلّم دون تدريب مسبق في CLIP الاستعلام عن أي مجموعة صور باستخدام لغة طبيعية حرة الصياغة، ما يوفر الوقت والموارد.
  • فهم شبيه بالفهم البشري: بخلاف البحث بالكلمات المفتاحية، يفهم CLIP السياق الدلالي ويسترجع الصور استنادًا إلى استعلامات مجردة أو عاطفية أو علائقية، مثل «طفل سعيد في الطبيعة» أو «أفق مدينة مستقبلية ليلًا».
  • لا حاجة إلى تسميات أو بيانات وصفية: لا يتطلب هذا النهج سوى الصور الخام. وينشئ CLIP التضمينات دون أي شرح يدوي.
  • بحث خفيف ودقيق: يقيّم ضرب مصفوفي واحد بعد التطبيع في NumPy ترتيب كل صورة وفقًا لتشابه جيب التمام، ويوفر نتائج دقيقة واستجابة فورية لآلاف التضمينات، دون الحاجة إلى تثبيت تبعية بحث إضافية أو إدارتها.
  • تطبيقات متعددة المجالات: سواء أكنت تنشئ أرشيفًا شخصيًا للصور، أو أداة للإلهام الإبداعي، أو محرك بحث عن المنتجات، أو نظامًا للتوصية بالأعمال الفنية، فإن مجموعة الأدوات نفسها تتكيف مع الحد الأدنى من التعديلات.

آلية عمل البحث الدلالي عن الصور#

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

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

سير عمل استرجاع الصور باستخدام OpenAI Clip

بما أن الصور والنصوص يتمثلان في مساحة المتجهات نفسها، فإن الاسترجاع يتم دون تدريب مسبق: لا تحتاج إلى تسميات أو فئات، بل إلى بيانات الصور وموجّه جيد فحسب.

تشغيل تطبيق الويب للبحث الدلالي#

تُشغّل الفئة SearchApp واجهة Flask كاملة. عند التشغيل للمرة الأولى، تنزّل مجموعة صور نموذجية، وتنشئ فهرس التضمينات، وتعرض صفحة يمكنك فيها كتابة استعلام ومشاهدة النتائج المرتبة.

تحذير بشأن مسار الصور

إذا كنت تستخدم صورك الخاصة، فتأكد من توفير مسار مطلق إلى دليل الصور. وإلا فقد لا تظهر الصور على صفحة الويب بسبب قيود 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:

المعاملالنوعالافتراضيالوصف
datastr'images'مسار دليل الصور المطلوب فهرسته والبحث فيه.
devicestr'cpu'الجهاز المستخدم لاستدلال CLIP (مثل cpu وcuda و0).
إدارة بياناتك في السحابة

للبحث في مجموعات الصور على نطاق الإنتاج دون إدارة الملفات المحلية، يمكنك تنظيم صورك وإصدار نسخ منها في منصة Ultralytics قبل فهرستها باستخدام 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 خلفية لواجهتك المخصصة.

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

التعليقات