جدول المحتويات:
- اللوازم
- الخطوة 1: وظيفة FaceDetect
- الخطوة 2: BackgroundRemove وظيفة
- الخطوة 3: وظيفة VideoEdges
- الخطوة 4: وظيفة VideoBlur
- الخطوة 5: التحسينات
فيديو: مشاريع OpenCV الأساسية: 5 خطوات
2024 مؤلف: John Day | [email protected]. آخر تعديل: 2024-01-30 07:37
في هذا المشروع ، نستكشف بعض وظائف 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
تقوم هذه الوظيفة بإرجاع دفق الفيديو المباشر الخاص بنا ، ولكن يتم عرض الحواف القابلة للاكتشاف باللون الأبيض بينما يتم تعتيم كل شيء آخر. ما يميز هذه الوظيفة عن الوظائف الأخرى هو تحويل الفيديو الأصلي الخاص بنا من تنسيق RBG إلى تنسيق HSV ، والذي يرمز إلى تدرج الألوان والتشبع والاختلاف - وهي طريقة مختلفة لمعالجة الضوء واللون من الفيديو. باستخدام هذه الطريقة ، يمكننا بسهولة التمييز بين الخطوط العريضة في الفيديو من خلال تطبيق مرشح (أحمر_ منخفض إلى أحمر_ مرتفع).
يستخدم Canny Edge Detection لاكتشاف الحواف في الصورة. يقبل صورة ذات مقياس رمادي كمدخل ويستخدم خوارزمية متعددة المراحل.
الخطوة 4: وظيفة VideoBlur
تُستخدم هذه الوظيفة لإضافة تأثير ضبابي إلى دفق الفيديو الخاص بنا. تستدعي الوظيفة البسيطة وظيفة GaussianBlur cv2 على إطارنا. يمكن العثور على مزيد من المعلومات حول وظيفة gaussianBlur هنا:
opencv-python-tutroals.readthedocs.io/en/l…
الخطوة 5: التحسينات
الوظيفة الأكثر حساسية في هذا المشروع هي وظيفة إزالة الخلفية ، لأنها تتطلب استخدام كاميرا لا تحتوي على وظيفة ضبط الإضاءة. قد تكون هناك مجموعة أفضل من الوظائف داخل مكتبة OpenCV يمكنها حساب تعديل الإضاءة هذا وإزالة الخلفية بسلاسة (على غرار الشاشة الخضراء).
يمكننا أيضًا استخدام وظائف اكتشاف الوجه الأخرى التي قد تنتج كائنات ذات وظائف أكثر بخلاف مجرد إرجاع الإحداثيات (س ، ص). ربما لن يكون تنفيذ برنامج التعرف على الوجوه مع القدرة على تذكر الوجوه صعبًا للغاية.
يمكن إجراء المزيد من التخصيص في وظيفة التمويه عبر التحكم البديهي من قبل المستخدم. على سبيل المثال ، قد يرغب المستخدم في ضبط شدة تأثير التعتيم أو تحديد منطقة معينة داخل الإطار للتعتيم.
موصى به:
كيفية جعل RADAR باستخدام Arduino لمشروع العلوم أفضل مشاريع اردوينو: 5 خطوات
كيفية جعل RADAR باستخدام Arduino لمشروع العلوم أفضل مشاريع Arduino: مرحبًا يا أصدقاء ، في هذه التعليمات ، سأوضح لك كيفية إنشاء نظام رادار مذهل باستخدام اردوينو نانو ، هذا المشروع مثالي للمشاريع العلمية ويمكنك بسهولة القيام بذلك باستثمارات وفرص أقل إذا كان الفوز بالجائزة أمرًا رائعًا
تلقي إشعارات البريد الإلكتروني من مشاريع إنترنت الأشياء الخاصة بك: 6 خطوات
تلقي إخطارات عبر البريد الإلكتروني من مشاريع إنترنت الأشياء الخاصة بك: إشعارات البريد الإلكتروني الخاصة بالبرنامج التي تربط مشاريع إنترنت الأشياء الخاصة بك بـ Adafruit IO و IFTTT لقد قمت بنشر بعض مشاريع إنترنت الأشياء. أتمنى أن تكون قد رأيتهم ، إذا لم تكن قد دعوتك إلى ملفي الشخصي والتحقق منها ، فقد أردت تلقي بعض الإشعارات عند متغير
مشاريع أفضل باستخدام ثنائي الفينيل متعدد الكلور: 6 خطوات
مشاريع أفضل باستخدام ثنائي الفينيل متعدد الكلور: إذا قضيت وقتًا في العمل مع مشاريع الإلكترونيات ، فأنت تعرف كم يمكن أن يكون الأمر ممتعًا ومثيرًا. ليس هناك ما هو أكثر بهجة من رؤية دائرتك تنبض بالحياة أمام عينيك. يصبح الأمر أكثر إثارة عندما يتحول مشروعك إلى
مؤقتات اردوينو: 8 مشاريع: 10 خطوات (بالصور)
مؤقتات Arduino: 8 مشاريع: يمكن لـ Arduino Uno أو Nano إنشاء إشارات رقمية دقيقة على ستة دبابيس مخصصة باستخدام أجهزة ضبط الوقت الثلاثة المدمجة. إنها لا تتطلب سوى أوامر قليلة للإعداد ولا تستخدم دورات وحدة المعالجة المركزية للتشغيل! قد يكون استخدام أجهزة ضبط الوقت أمرًا مخيفًا إذا بدأت من
خمسة مشاريع صغيرة أنيقة: 6 خطوات
خمسة مشاريع صغيرة أنيقة: يجب أن أحب الدوائر التي تومض وتصدر ضوضاء عندما تعرض الإلكترونيات للشباب. هذه الدوائر الخمس التي يستغرق بناؤها بضع دقائق فقط ، يسهل تعديلها من أجل تغيير سرعات الوميض أو في الأوقات. الدائرة الأولى