جدول المحتويات:

مشاريع OpenCV الأساسية: 5 خطوات
مشاريع OpenCV الأساسية: 5 خطوات

فيديو: مشاريع OpenCV الأساسية: 5 خطوات

فيديو: مشاريع OpenCV الأساسية: 5 خطوات
فيديو: بايثون والذكاء الاصطناعي تطبيق عملي وانشاء مشاريع كاملة | python openCV AI course 2024, شهر نوفمبر
Anonim
مشاريع OpenCV الأساسية
مشاريع OpenCV الأساسية

في هذا المشروع ، نستكشف بعض وظائف OpenCV الأساسية من خلال 4 مشاريع بسيطة تتضمن بث فيديو مباشر. هذه هي التعرف على الوجه ، وإزالة الخلفية ، والعرض المرئي الخاص للحواف ، وتطبيق تأثير ضبابي على دفق الفيديو المباشر. كان هدفي الرئيسي من تجربة هذه المشاريع هو ببساطة جعل قدمي مبللة بواجهة OpenCV ، حيث أخطط للتعمق أكثر في مجال رؤية الكمبيوتر

اللوازم

  • كمبيوتر يعمل ببايثون
  • افتح مكتبة السيرة الذاتية ، ومكتبة Numpy ، ومكتبة tkinter ، ومكتبة sys
  • الكاميرا لتوصيلها بالكمبيوتر (إذا كان الكمبيوتر لا يحتوي على واحدة بالفعل)
  • ملف Python الخاص بالبرنامج (مضمن في هذه التعليمات)
  • ملف haarcascade xml (مضمن في هذه التعليمات)

الخطوة 1: وظيفة FaceDetect

وظيفة كشف الوجه
وظيفة كشف الوجه
وظيفة كشف الوجه
وظيفة كشف الوجه

تعرض هذه الوظيفة فيديو الكاميرا الخاصة بك مع مربعات خضراء على أي وجوه تلتقطها. في الكود ، نستخدم وظيفة cv2. VideoCapture () لتخزين الفيديو الذي نلتقطه في كائن يسمى "التقاط". CAPTURE_INDEX هو رقم تم تعيينه بواسطة الكمبيوتر الخاص بك والذي يتوافق مع فهرس الكاميرا في قائمة إدخال الفيديو بالكمبيوتر. إذا لم يكن لديك كاميرا خارجية متصلة بجهاز الكمبيوتر الخاص بك ، فيجب أن يعمل 0 أو 1.

يتم تهيئة الكائن face_cascade باستخدام وظيفة cascadeClassifier وملف "haarcascade_frontalface_default.xml" الموجود في OpenCV github. نستخدم هذا الكائن لتخزين الوجوه المكتشفة في قائمة "الوجوه" كمدخل رباعي الاتجاهات يحمل إحداثي x و y و العرض والارتفاع. ثم نرسم مستطيلًا يحيط بالوجه تمامًا باستخدام دالة cv2.rectangle

من هذا الفيديو ، يلتقط OpenCV العديد من الصور في حلقة while الخاصة بنا باستخدام capture.read () وتخزين الصورة في إطار أطلقنا عليه اسم "img". ثم يتم تفسير كل صورة وتعديلها كما نرغب. بالنسبة إلى faceDetect ، نجعل الصورة رمادية باستخدام وظيفة cvtColor التي تحول أي صورة معطاة في المعلمة الأولى إلى نوع معين من لون الصورة المحدد في المعلمة الثانية. يمكن العثور على قائمة القيم المقبولة للمعامل الثاني على الإنترنت. ثم نعرض الصورة في نافذة تسمى "Detecting the face" باستخدام وظيفة imshow () التي تأخذ سلسلة لاسم النافذة وإطار الصورة المراد عرضها.

أخيرًا ، ننتظر حتى يقوم المستخدم بإدخال المفتاح q باستخدام وظيفة cv2.waitKey (). يتم استخدام قناع 0xFF كاصطلاح لأجهزة الكمبيوتر ذات 64 بت. بعد أن ينهي المستخدم دفق الفيديو ، تحرر وظيفة faceDetect كائن الالتقاط ثم تدمر أي نوافذ أخرى مفتوحة تحت واجهة OpenCV. تتبع جميع الوظائف الأخرى هيكل تصميم مماثل.

الخطوة 2: BackgroundRemove وظيفة

وظيفة إزالة الخلفية
وظيفة إزالة الخلفية
وظيفة إزالة الخلفية
وظيفة إزالة الخلفية

تحاول هذه الوظيفة إزالة جزء الخلفية من الفيديو الخاص بنا وترك الصورة الأمامية فقط. قد لا تعمل على بعض الكاميرات ، لأنها تستخدم وظيفة ضبط الإضاءة التي يتم تنشيطها عند دخول كائنات / بؤر مختلفة إلى الإطار. إذا لم تعمل وظيفة BackgroundRove الخاصة بك ، فلا تقلق - فقد تكون الكاميرا فقط!

لاستخدام هذه الوظيفة ، ابتعد عن إطار الكاميرا واضغط على مفتاح "d" لالتقاط صورة الخلفية. من المهم عدم وجود كائنات متحركة في الخلفية التي ترغب في التقاطها. بعد ذلك ، يمكننا الرجوع إلى إطار الكاميرا. إذا نجحت الوظيفة ، يجب أن يرى المستخدم نفسه فقط في دفق الفيديو الخاص بالوظيفة. أي ضوضاء / نقاط سوداء في الصورة الأمامية قد تكون نتيجة لضبط إضاءة الكاميرا. لالتقاط خلفية أخرى ، اضغط على مفتاح "r" لإعادة التهيئة ، ثم اضغط على "d" مرة أخرى.

من بعض المهام الرئيسية لهذه الوظيفة استخدام "العلم" المنطقي الذي يتم رفعه في اللحظة التي يضغط فيها المستخدم على الزر d. هذا يلتقط الخلفية ويسمح لنا بإزالتها من الفيديو الذي يتم بثه بواسطة الوظيفة. نهدف إلى تخزين صورة الخلفية في ref_img حتى نتمكن من تمييزها عن الصورة الأمامية التي تلتقط أي كائن متحرك. نستخدم الدالة cv2.subtract () لطرح صورة الأرض الأمامية من صورة الخلفية والعكس صحيح ، ثم نقوم بإلغاء أي اختلافات صغيرة في الصورتين بعد ذلك مباشرة. الخلفية معتمة.

يتم إجراء fgmask باستخدام الفرق بين هاتين الصورتين ثم يتم تطبيقه على دفق فيديو الوظائف باستخدام وظيفة OpenCV cv2.bitwise_and ().

الخطوة 3: وظيفة VideoEdges

وظيفة VideoEdges
وظيفة VideoEdges
وظيفة VideoEdges
وظيفة VideoEdges

تقوم هذه الوظيفة بإرجاع دفق الفيديو المباشر الخاص بنا ، ولكن يتم عرض الحواف القابلة للاكتشاف باللون الأبيض بينما يتم تعتيم كل شيء آخر. ما يميز هذه الوظيفة عن الوظائف الأخرى هو تحويل الفيديو الأصلي الخاص بنا من تنسيق RBG إلى تنسيق HSV ، والذي يرمز إلى تدرج الألوان والتشبع والاختلاف - وهي طريقة مختلفة لمعالجة الضوء واللون من الفيديو. باستخدام هذه الطريقة ، يمكننا بسهولة التمييز بين الخطوط العريضة في الفيديو من خلال تطبيق مرشح (أحمر_ منخفض إلى أحمر_ مرتفع).

يستخدم Canny Edge Detection لاكتشاف الحواف في الصورة. يقبل صورة ذات مقياس رمادي كمدخل ويستخدم خوارزمية متعددة المراحل.

الخطوة 4: وظيفة VideoBlur

وظيفة VideoBlur
وظيفة VideoBlur
وظيفة VideoBlur
وظيفة VideoBlur

تُستخدم هذه الوظيفة لإضافة تأثير ضبابي إلى دفق الفيديو الخاص بنا. تستدعي الوظيفة البسيطة وظيفة GaussianBlur cv2 على إطارنا. يمكن العثور على مزيد من المعلومات حول وظيفة gaussianBlur هنا:

opencv-python-tutroals.readthedocs.io/en/l…

الخطوة 5: التحسينات

الوظيفة الأكثر حساسية في هذا المشروع هي وظيفة إزالة الخلفية ، لأنها تتطلب استخدام كاميرا لا تحتوي على وظيفة ضبط الإضاءة. قد تكون هناك مجموعة أفضل من الوظائف داخل مكتبة OpenCV يمكنها حساب تعديل الإضاءة هذا وإزالة الخلفية بسلاسة (على غرار الشاشة الخضراء).

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

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

موصى به: