التعلم العميق وأستخداماته في الرؤية الحاسوبية - الجزء الأول
Deep Learning For Computer Vision-Part1
نظرة عامة حول الرؤية الحاسوبية
الفرق بين معالجة الصور والرؤية الحاسوبية:
أنواع المهام التي تنجز في الرؤية الحاسوبية (Tasks in Computer Vision):
تطبيقات عملية بإستخدام مكتبة (OpenCV)
عرض صورة (Display an Image).
شرح الكود:
السطر رقم (1) لأجل إستدعاء المكتبة (openCV).
السطر رقم (3) لإستدعاء الدالة (imread) والتي تقوم بقراءة بيانات الصورة الموجودة في الملف (img_one.jpg) ووضع هذه البيانات في المتغير (img).
السطر رقم (4) لإستدعاء الدالة (imshow) والتي تقوم بإنشاء نافذة لعرض الصورة حيث نمرر لها معاملين (2 arguments) هما إسم النافذة المراد إنشاءها (My Image) والثاني هو إسم المتغير الذي يحوي بيانات الصورة والذي هو (img).
السطر رقم (5) لأجل أن تستمر النافذة بالظهور عند تنفيذ الكود.
السطر رقم (6) لتدمير النافذة بعد إنتهاء عرض الصورة أي بمجرد أن نضغط على أي زر.
ملاحظة: يجب وضع ملف الصورة (img_one.jpg) داخل الفولدر الخاص بالمشروع.
شرح الكود:
السطر رقم (4) لإستدعاء الدالة (cvtColor) والتي تقوم بتحويل بيانات الصورة الموجودة في المتغير (img)
إلى بيانات تدرج رمادي (Grayscale) وتقوم بوضع هذه البيانات في متغير جديد هو (gray), وتحتاج هذه الدالة إلى معاملين (2 arguments) هم بيانات الصورة الملونة (أي المتغير img) وكذلك نوع التحويل المراد إجراؤه, حيث إستخدمنا العبارة (cv2.COLOR_BGR2GRAY).
وعند التنفيذ نحصل على الصورة التالية:
التطبيق الثالث:
إجراء عملية (Thresholding) على الصورة أي جعلها أبيض وأسود فقط.
شرح الكود:
السطر رقم (3): لإستدعاء الدالة (imread) والتي تقوم بقراءة بيانات الصورة الموجودة في الملف (img_one.jpg) ووضع هذه البيانات في المتغير (img), وقدد مررنا هنا الرقم (0) لهذه الدالة لكي تقوم أيضاً بتحويل الصورة إلى تدرج رمادي (Grayscale).
السطر رقم (5) هنا يتم إستدعاء الدالة (threshold()) حيث يجب إعطاءها أربعة معاملات : المتغير الذي يحوي إشارة الصورة (img) والتي يجب أن تكون غير ملونة (grayscale image) وكذلك العتبة (thresholding), وكذلك القيمة القصوى فوق العتبة, وأخيراً المعامل الرابع الذي هو نوع عملية التعتيب (Thresholding Style).
وعند التنفيذ نحصل على :
التطبيق الرابع:
الكشف عن الحواف في الصورة (Edge detection).
شرح الكود:
السطر رقم (5) لإستدعاء الدالة (Canny()) وهذه الدالة تمثل الخوارزمية نوع (Canny) والتي تقوم بإكتشاف الحواف الموجودة في الصورة. هذه الدالة تحتاج إلى ثلاثة معاملات, حيث إنً المعامل الأول هو بيانات الصورة المراد العمل عليها, وهنا إستخدمنا المتغير (img) والذي يحمل بيانات الصورة, المعاملان الثاني والثالث يمثلان عتبتان صغرى وكبرى (minVal & maxVal) يستخدمان لأجل تحسين الأداء بالتخلص من النتائج الغير مرغوبة.
وعند التنفيذ نحصل على الصورة الآتية:
التطبيق الخامس:
تحويل الصورة إلى أخرى سالبة (Convert the image to negative).
شرح الكود:
السطر رقم (5) للقيام بعملية طرح مصفوفة من الرقم (255), وحيث أنَّ الصورة قد تحولت بياناتها إلى مصفوفة بواسطة الأمر في السطر الرابع وهذه المصفوفة تتكون من صفوف وأعمدة حسب عدد البكسلات المكونة للإرتفاع وعدد البكسلات المكونة للعرض وكل بكسل من هذه البكسلات له قيمة عددية تتراوح مابين الصفر و (255), حيث أن الصفر يمثل حالة إنطفاء تام للبكسل والرقم (255) يمثل حالة إنارة تامة للبكسل, فإذا قمنا بهذه العملية الرياضية وهي طرح قيمة كل بكسل من هذه البكسلات من الرقم (255) فتكون القيمة الجديدة لكل بكسل هي معاكسة للقيمة الأصلية (أي أن الصفر يصبح (255) والعكس بالعكس).
وبعد تنفيذ الكود نحصل على مايلي:
التطبيق السادس:
جعل الصورة غير واضحة المعالم (Image Blurring)
وهي عملية إزالة التفاصيل الدقيقة للصورة من أجل أغراض متعددة, فتارةً تستخدم هذه العملية للتخلص من الضوضاء المصاحبة للصورة (noise) , وتستخدم أيضاً لإخفاء بعض التفاصيل في الصورة لضرورات معينة.
شرح الكود:
السطر رقم (4) لإستدعاء الدالة (blur) والتي تقوم بإجراء عملية ال (blurring) على الصورة, حيث نمرر لها معاملين هما بيانات الصورة وكذلك حجم الفلتر (kernel) الذي يطبق على الصورة بعملية رياضية تدعى عملية الإلتفاف (Convolution). وبعد تنفيذ الكود نحصل على مايأتي:
التطبيق السابع:
إكتشاف وجه الإنسان (Face Detection).
نقوم بتحميل باقة (OpenCV), وبعد فك الضغط نذهب الى الفولدر (build), ثم إلى الفولدر (etc), ثم إلى الفولدر (haarcascades), ثم نقوم بنسخ الملف (haarcascade_frontalface_default.xml) ولصقه داخل الفولدر الخاص بالمشروع.
شرح الكود:
السطر رقم (4) إستدعاء الدالة (CascadeClassifier()) التي تقوم بتحميل الملف الخاص بالخوارزمية نوع (xml) ووضع بياناته في متغير إسمه (haar_cascade_face).
السطر رقم (6) إستدعاء الدالة (detectMultiScale()) والتي تقوم بإكتشاف وجه الإنسان (أو وجوه متعددة إذا كانت الصورة تحتوي على أكثر من شخص) وتقوم بتحديد مواقع هذه الوجوه (إحداثياتها) على شكل مستطيلات, فيتم تحديد قيم (x, y) والتي تمثل رأس المستطيل في الجهة اليسرى العلوية وكذلك تحدد عرض المستطيل (width (w)) وكذلك ارتفاع المستطيل (height (h)), يتم تخزين هذه القيم على شكل قائمة (list) في متغير إسمه (faces_rects). هذه الدالة تحتاج ثلاثة معاملات هي:
1- بيانات صورة على هيئة تدرج رمادي (grayscale).
2- معامل معالجة الفروقات في الصور من حيث بعدها وقربها من الكاميرا (scaleFactor) والقيمة
الإفتراضية له هنا هي (1.2), ومن الممكن إختيار أي قيمة أخرى مناسبة.
3- المعامل (minNeighbors) والذي يحدد عدد المستطيلات المجاورة لكل مستطيل يمثل وجه إنسان.
السطر رقم (9) بما أنً الصورة التي إستخدمناها فيها شخص واحد (وجه واحد) فإنً القائمة (faces_rects) تحتوي على بيانات مستطيل واحد, لذلك إستخدمنا أربعة متغيرات لحفظ بيانات المستطيل وهي (x, y, w, h) والتي نحصل عليها في الدليل (index 0) من القائمة (list).
السطر رقم (10) إستدعاء الدالة (rectangle()) والتي تقوم برسم مستطيل واحد كما في تطبيقنا أو مجموعة مستطيلات حسب عدد الوجوه المكتشفة في الصورة أو في الفيديو, هذه الدالة تحتاج إلى خمسة معاملات هي:
1- الصورة الأصلية المراد رسم المستطيل (أو المستطيلات) التي تحدد الوجه (أو الوجوه) عليها.
2- إحداثيات رأس المستطيل من الجهة اليسرى من الأعلى (x, y).
3- إحداثيات رأس المستطيل من الجهة اليمنى من الأسفل (x + w, y + h).
4- اللون الذي يرسم به المستطيل وهنا إستخدمنا اللون الأخضر حيث أعطينا اللون الأخضر (G = 255).
5- المعامل الخامس يمثل سمك الخط الذي يرسم به المستطيل.
الرسم التالي يوضح كيفية رسم المستطيل:
وعند تنفيذ الكود نحصل على الصورة الآتية :
التطبيق الثامن:
إخفاء بعض تفاصيل الصورة كالوجه مثلاً (Hide some image details such as face).
في هذا التطبيق نقوم بتطبيق تقنية ال (blurring) على جزء محدد من الصورة وليكن الوجه وكما موضح الكود في الشكل التالي:
شرح الكود:
السطر رقم (12) إنتخاب جزء من الصورة الأصلية وهذا الجزء هو مساحة الوجه والذي تم إكتشافه في الخطوتين السابقتين عن هذا السطر (أي السطران (8) و (11)). حيث أنَّ (y:y+h) تعني أن الإرتفاع المنتخب يبدأ من (y) وينتهي عند (y+h) وكذلك (x:x+w).
السطر رقم (13) بعد قمنا بإنتخاب مساحة الوجه, نقوم الآن بتطبيق عملية ال (Blurring) على هذه المساحة فقط.
السطر رقم (14) بعد إجراء عملية ال (Blurring) على مساحة الوجه, نقوم بجعل هذه المساحة تحل مكان مساحة الوجه الأصلية في الصورة, حيث إننا نحدد أولاً مكان هذه المساحة في الصورة الأصلية ثم نقوم بملأها بالمساحة الجديدة بعد عملية ال (Blurring).
وعند تنفيذ الكود نحصل على مايلي:
تعليقات
إرسال تعليق