الكشف عن الأغراض object detection باستخدام مكتبة ImageAI في بايثون

ماهي عمليّة الكشف عن الأغراض object detection 

هي تقنيّة من تقنيّات الرؤية الحاسوبيّة التي تسمح لنا بتحديد نوع وموقع الأشياء في صورة أو فيديو. يمكن لهذه التقنيّة عدّ مجموع الأشياء في مشهد معين وتحديد مواقعها بدقة. 

يُخلط في بعض الأحيان بين الكشف عن الأغراض و تصنيف الصور image classification لذلك سوف أوضّح الفرق بين هاتين العمليتين بشكل مختصر. 

في تصنيف الصور يتم تصنيف صورة معينة ضمن أصناف مجدولة مسبقاً. حيث تمثل الصورة دخل العملية، ويمثل الخرج اسم العنصر الموجود في الصورة. فمثلاً إذا كان الدخل صورة تحتوي على قطة سيكون الخرج كلمة ” قطة ” وإذا كان الدخل صورة تحتوي على قطتين سوف يكون الخرج أيضاً ” قطة “. من ذلك يمكننا أن نستنتج أن عمليَة تصنيف الصور رغم أهميّتها فهي محدودة بالنتائج التي تعطينا إيَاها. عكس ذلك في عملية  الكشف عن الأغراض حيث يتم تحديد كل عنصر من العناصر المكتشفة ضمن إطار، إضافة إلى ذلك يتم تحديد موقع هذا العنصر في المشهد المُعطى. من هذا نستنتج أن التعرف على الأغراض هي عملية أعقد من تصنيف الصور وتعطينا معلومات أكثر عن الصورة وبالتالي يمكننا الاستفادة منها بشكل أكبر.

أهمية تقنية الكشف عن الأغراض وتطبيقاتها 

تتمثل أهميّة الكشف عن الأغراض بقدرة الخوارزميَة المطبّقة على تحديد نوع وموقع جسم معين في صورة أو فيديو والسرعة المطلوبة للقيام بذلك وكذلك كمية الأغراض التي يمكن لهذه الخوارزمية كشفها. أهميّة ذلك نراها عند تطبيق الكشف عن الأغراض عمليّاً. هنا سوف أتحدث عن بعض من أهم حالات استخدام للكشف عن الأغراض.

السيارات ذاتية القيادة Self-driving cars 

يعد الكشف عن الأغراض في الزمن الحقيقي real-time من أهم مفاتيح نجاح أنظمة القيادة الذكية. هذه الأنظمة تحتاج أن تعرف وتحدد مواقع الأجسام المحيطة بها والتعرّف أيضاً على إشارات المرور، ذلك كلّه لتتمكن من السير بأمان وفعاليّة.

كشف الحالات الشاذّة anomaly detection 

يمكن استخدام الكشف عن الأغراض في المجال الزراعي. إذ يمكن لنموذج كشف الأغراض أن يكشف عن تهديدات ممكنة للمحصول الزراعي لا يمكن للعين البشرية متابعتها في الحالة العادية. كما يمكن استخدامها في المجال الطبي لكشف الشذوذات ضمن الصور الطبيَة أو مثلاً العناية في البشرة من خلال تحديد وكشف أماكن حب الشباب. 

الجميل في ذلك أن هذه التقنيات تمكننا من الحصول فوراً على معلومات أو تحديد أمراض معينة لايمكن في الحالة العادية إلا للاختصاصيين من الكشف عنها وأصبحت الآن في متناول اليد بعد القليل من التدريب.

يمكن تطبيق الكشف عن الأغراض أيضاً في فيديوات المراقبة وعدَ الحشود والتي لها فوائد في التنظيم والأمن.

كيفية عمل الكشف عن الأغراض باستخدام خوارزميات تعلم الآلة machine learning

سوف نركز في هذا المقال على مقاربات الكشف عن الأغراض باستخدام التعلّم العميق والتي تمثل حالة العلم الراهنة. يوجد حالياً معماريات مختلفة Architectures للكشف عن الأغراض مثل شبكة الطّيّ العصبونية المناطقية R-CNN ، شبكة الطّيّ العصبونية المناطقية السريعة Fast R-CNN، شبكة الطّيّ العصبونية المناطقية الأسرع Faster R-CNN،  شبكة يولو YOLO وهي اختصار للجملة you only look once أي أنت تنظر مرة واحدة فقط و كذلك  كاشف الخطوة الواحدة SSD.

يمكن تمييز تحدَيين رئيسين لمعظم الخوارزميات المستخدمة. أولاً نحتاج لتقسيم الصورة إلى أقسام بحيث يحتوي كل قسم على شكل من الأشكال التي نريد التعرف عليها. لتحقيق هذا الغرض تم تطوير العديد من المقاربات التي تتفاوت فيما بينها في الفعالية والسرعة. من خلالها تدخل الصورة في مشفِّر encoder والذي يمرّر الصورة من خلال العديد من الطبقات والقوالب والتي بدورها تقوم باستخراج المزايا الاحصائية لجدولة وتحديد موقع الاجسام. يؤخذ الخرج ويوضع في فاك التشفير decoder الذي يتنبأ بالاطارات الممكنة لكل جسم. التحدي الثاني يتمثل في تصنيف هذا الجزء من الصورة. لهذا الغرض تُدخل هذه الأجزاء من الصورة في شبكة طيّ عصبونيّة Convolution Neural Network CNN مدرّبة مسبقاً وستتحول العملية إلى تصنيف الصور. هناك الكثير من التفاصيل التي أغفلنا عنها حالياً حيث أنها ليست موضوع مقالنا. 

تطبيق الكشف عن الأغراض من خلال مكتبة تطبيقات الذكاء الاصطناعي في الرؤية الحاسوبية ImageAI  

مكتبة تطبيقات الذكاء الاصطناعي في الرؤية الحاسوبية ImageAI

هي مكتبة مدمجة في لغة البرمجة بايثون python لتشجيع المطورين والطلاب لكتابة تطبيقات في مجال التعلّم العميق وخصوصاً الرؤية الحاسوبية من خلال بضع أسطر من الكود. هذه المكتبة تقدَم لنا مجموعة من الأصناف classes والدَوال functions سهلة الاستخدام لأداء عملية الكشف عن الأغراض.  يمكن لهذه الأصناف من أن تقوم بالكشف عن الأغراض في فيديو أو صورة وكذلك عرض تحليل للنتائج ويمكن أن تُدمج في أي برنامج بايثون في تطبيق على صفحة إنترنت أو نظام تشغيل Windows/Linux/MacOS. تدعم هذه المكتبة نماذج مثل يولو Yolo و ريتنا-نت RetinaNEt، من خلالها يمكن أن تكشف ما يقارب من 80 شكل مختلف.

تطبيق عملي لهذه العملية على صورة 

لتنفيذ عملية التعرف على الأغراض باستخدام مكتبة تطبيقات الذكاء الاصطناعي في الرؤية الحاسوبية imageai على منصة كولاب CoLab علينا أولاً تنفيذ الخطوات التالية. 

تنفيذ الأمر pip install imageai –upgrade من أجل تنصيب مكتبة imageai على منصة كولاب Colab.  نحتاج أيضاً في الحالة العادية لتنصيب مكتبات أخرى مثل مكتبة تنسور فلو للتعلم العميق من غوغل Tensorflow و كيراس Keras و المكتبة المفتوحة للرؤية الحاسوبية OpenCv ، لكنها منصّبة مسبقاً على منصة كولاب. 

تحميل شبكة ريتنا-نت من خلال هذا الرابط التالي  ثم رفعها على منصة كولاب. 

نرفع الصورة التي نريد أن ننفذ عليها الشيفرة البرمجية إلى بيئة العمل في منصة كولاب

نكتب الشيفرة البرمجية الكود في الأسفل في منصة كولاب

from imageai.Detection import ObjectDetection
import os

execution_path = os.getcwd()

detector = ObjectDetection()
detector.setModelTypeAsRetinaNet()
detector.setModelPath( os.path.join(execution_path , "resnet50_coco_best_v2.0.1.h5"))
detector.loadModel()
detections = detector.detectObjectsFromImage(input_image=os.path.join(execution_path, "Dog&Cat.jpg"), 
                                           output_image_path=os.path.join(execution_path , "imagenew.jpg"))

for eachObject in detections:
    print(eachObject["name"] , " : " , eachObject["percentage_probability"] )

دعونا نشرح هنا ما قمنا به في الشيفرة البرمجية أعلاه. 

في السطر الأول قمنا باستيراد الصنف ObjectDetction class من مكتبة تطبيقات الذكاء الاصطناعي في الرؤية الحاسوبية imageai. 

في السطر الثاني قمنا باستيراد الصنف os في بايثون. في السطر 4 نعرَِف متغير execution-path لتعريف المسار path إلى ملف بايثون الموجود حالياً على منصة كولاب والذي ارفقنا إليه النموذج ريتنا-نت RetinaNet والصورة المراد كشفها. 

في السطر6 عرَفنا متغيَر detector الذي يمثَِل الصنف ObjectDetction. في السطر الذي يليه عرّفنا المسار إلى النموذج الذي رفعناه. في السطر 8 يتم رفع النموذج إلى البرنامج. بعد ذلك نأتي إلى الدالة الأهم في الصنف وهي detectObjectsFromImage والتي من خلالها نعرف صورة الدخل التي نريد كشف الأغراض فيها ونعرف صورة الخرج. كما يمكن تحديد بعض الخصائص الأخرى مثل استخراج الأغراض ووضعها في صور منفصلة كل ذلك موجود في توثيق المكتبة على الرابط في الأسفل. طبعاً كل هذه الدوال خاصة بمكتبة تطبيقات الذكاء الاصطناعي في الرؤية الحاسوبية imageai وقد كتبها مطورون لتسهيل التعامل مع هذه التقنيات والحصول على نتائج بأقل مجهود. في الحالة العادية يحتاج الشخص للتعامل مع مكتبات أكثر تعقيداً.   

بعد تنفيذ الكود على صورة فيها قطة وكلب ستظهر لدينا النتائج التالية.

صورة لقطة وكلب قبل الكشف
صورة لقطة وكلب بعد تطبيق الكشف عن الأغراض. يظهر كل عنصر في إطار خاص به مرفقاً إليه في الأعلى اسم العنصر مع درجة دقة الكشف.

ستظهر لدينا أيضاً هذه النتائج والتي تعبر عن دقة الكشف: 

cat  : 99.27995800971985

dog  : 95.54893374443054

تطبيق عملي لهذه العملية على فيديو 

لتطبيق الكشف على الأغراض على فيديو سوف نتّبع تقريبا نفس الخطوات. علينا فقط أن نستخدم صنف مختلف عن الأول الذي استخدمناه على الصور وهو VideoObjectDetection. قمت أيضاً باستخدام نموذج Model آخر وهو Yolov3 يمكن تنزيله من خلال هذا الرابط التالي.

عليك فقط عزيزي القارئ أن تكتب الكود التالي على منصة كولاب ثم رفع النموذج يولو نسخة 3  Yolov3 والفيديو المراد كشفه إلى بيئة عمل منصة كولاب.

from imageai.Detection import VideoObjectDetection
import os

execution_path = os.getcwd()

detector = VideoObjectDetection()
detector.setModelTypeAsYOLOv3()
detector.setModelPath( os.path.join(execution_path , "yolo.h5"))
detector.loadModel()

video_path = detector.detectObjectsFromVideo(input_file_path=os.path.join(execution_path, "traffic.mp4"), 
                                output_file_path=os.path.join(execution_path, "traffic_detected"), frames_per_second=20, 
log_progress=True)
print(video_path)

للكشف عن الأغراض في فيديو استخدمنا فئة ودوال مختلفة لكن في المجمل تم استخدام نفس الأسلوب المتبع عند الكشف عن صورة. ماعليك عزيزي القارئ إلا أن تغير اسم الفيديو في السطر 8 ثم ستحصل على الخرج المطلوب وبأقل جهد. وهنا مثال على تطبيق الكشف عن الأغراض على فيديو:

ملخص

من خلال هذا المقال تعرّفنا على واحد من أهم تطبيقات الذكاء الاصطناعي. تحدَثنا عن بعض من أهم الاستخدامات الحاليَة والتطبيقات العملية للكشف عن الأغراض. ورأينا من خلال لمحة سريعة الخطوط العريضة لكيفية عمل الكشف عن الأغراض. لأخذ نظرة أعمق عن الخوارزميات المستخدمة حالياً في الكشف عن الأغراض سوف أَضع بعض الروابط في الأسفل. أخيراً رأينا سويَاً كيف يمكن تطبيق الكشف عن الأغراض على الصور والفيديوات من خلال مكتبة تطبيقات الذكاء الاصطناعي في الرؤية الحاسوبية imageai ببضع أسطر من الكود.

المراجع

الكاتب

  • عمّار حماده

    طالب بكالوريوس في هندسة الميكاترونكس وتقنية المعلومات ومهتم في مجالات الروبوتكس والذكاء الاصطناعي

0 Shares:
3 تعليقات
  1. لقد قمت بتطبيق جميع الخطوات في التطبيق العملي علي الصورة ولكن يوجد error في السطر رقم 9 من كود هذا التطبيق
    ارجو الرد لانني لا استطيع حله

    1. شكراً على تعليقك. هل يمكتك وضع الخطأ الذي ظهر عندك هنا في التعليقات لكي أبحث حلا للمشكلة؟

  2. السلام عليكم ورحمة الله وبركاته
    كيف استطيع ان اجعله عندما يكشف عن الأغراض ينطق باسمها عبر دارة صوت ، مثلا في الفيديو الوارد كشف عن وجود سيارة وكتب اسمها ، كيف استطيع ان اجعله ينطق ويقول بصوت مسموع سيارة ؟

اترك تعليقاً

لن يتم نشر عنوان بريدك الإلكتروني. الحقول الإلزامية مشار إليها بـ *

You May Also Like