فهرست مطالب:

پروژه های اساسی OpenCV: 5 مرحله
پروژه های اساسی OpenCV: 5 مرحله

تصویری: پروژه های اساسی OpenCV: 5 مرحله

تصویری: پروژه های اساسی OpenCV: 5 مرحله
تصویری: وقت پایتون - تشخیص چهره در پایتون و کار کردن با کتاب‌خانه های OpenCV و Face Recognition 2024, نوامبر
Anonim
پروژه های اساسی OpenCV
پروژه های اساسی OpenCV

در این پروژه ، برخی از قابلیت های اساسی OpenCV را از طریق 4 پروژه ساده که شامل جریان مستقیم ویدئو می شوند ، بررسی می کنیم. اینها تشخیص چهره ، حذف پس زمینه ، نمایش بصری ویژه لبه ها و اعمال جلوه ای تار در جریان ویدئوی زنده است. هدف اصلی من از امتحان این پروژه ها این بود که به سادگی پایم را با رابط OpenCV خیس کنم ، زیرا قصد دارم در زمینه بینایی کامپیوتر عمیق تر عمل کنم.

تدارکات

  • رایانه ای که پایتون را اجرا می کند
  • باز کردن کتابخانه CV ، کتابخانه Numpy ، کتابخانه tkinter ، کتابخانه sys
  • دوربین برای اتصال به کامپیوتر (در صورتی که رایانه قبلاً شامل آن نشده باشد)
  • فایل پایتون برنامه (شامل این دستورالعمل)
  • فایل xml haarcascade (شامل این دستورالعمل)

مرحله 1: عملکرد FaceDetect

عملکرد FaceDetect
عملکرد FaceDetect
عملکرد FaceDetect
عملکرد FaceDetect

این عملکرد ویدئوی دوربین شما را با مربع های سبز رنگ در هر صورتی که بر می دارد نشان می دهد. در کد ، ما از تابع cv2. VideoCapture () برای ذخیره ویدئویی که در حال ضبط شدن هستیم در یک شی به نام "capture" استفاده می کنیم. CAPTURE_INDEX عددی است که توسط رایانه شما تنظیم شده است و با فهرست دوربین شما در لیست ورودی ویدیوی رایانه مطابقت دارد. اگر دوربین خارجی به کامپیوتر وصل نیستید ، 0 یا 1 باید کار کند.

آبجکت face_cascade با استفاده از تابع cascadeClassifier و فایل "haarcascade_frontalface_default.xml" موجود در github OpenCV راه اندازی می شود. ما از این شی برای ذخیره چهره های شناسایی شده در لیست "چهره ها" به عنوان ورودی چهار ضلعی استفاده می کنیم که صورت x مختصات ، y مختصات ، عرض و ارتفاع را در بر می گیرد. سپس یک مستطیل ترسیم می کنیم که با استفاده از تابع cv2.rectangle صورت را کاملا در بر می گیرد

از این ویدئو ، OpenCV با استفاده از capture.read () و ذخیره تصویر در قاب ما "img" ، بسیاری از تصاویر را در حلقه while ما ضبط می کند. سپس هر تصویر به دلخواه ما تفسیر و اصلاح می شود. برای faceDetect ، ما با استفاده از تابع cvtColor تصویر را خاکستری می کنیم که هر تصویری را که در پارامتر اول داده می شود به نوع خاصی از رنگ تصویر مشخص شده در پارامتر دوم تبدیل می کند. لیست مقادیر قابل قبول برای پارامتر دوم را می توان بصورت آنلاین یافت. سپس با استفاده از تابع imshow () که برای نام پنجره و قاب تصویر نمایش داده می شود ، تصویر را در پنجره ای با نام "تشخیص چهره" نمایش می دهیم.

در نهایت منتظر می مانیم تا کاربر کلید q را با استفاده از تابع cv2.waitKey () وارد کند. ماسک 0xFF به عنوان یک رایانه برای رایانه های 64 بیتی استفاده می شود. پس از اتمام جریان ویدیویی توسط کاربر ، عملکرد faceDetect شیء ضبط را آزاد می کند و سپس پنجره های دیگر باز شده در زیر رابط OpenCV را از بین می برد. همه عملکردهای دیگر از یک ساختار طراحی مشابه پیروی می کنند.

مرحله 2: تابع BackgroundRemove

تابع BackgroundRemove
تابع BackgroundRemove
تابع BackgroundRemove
تابع BackgroundRemove

این عملکرد سعی می کند قسمت پس زمینه ویدئوی ما را حذف کرده و فقط تصویر پیش زمینه را باقی بگذارد. ممکن است در برخی از دوربین ها کار نکند ، زیرا آنها از قابلیت تنظیم نور استفاده می کنند که هنگام ورود اشیاء/ کانون های مختلف به قاب فعال می شود. اگر عملکرد backgroundRemove شما کار نمی کند ، ناراحت نشوید- فقط می تواند دوربین شما باشد!

برای استفاده از این عملکرد ، از قاب دوربین فاصله بگیرید و کلید "d" را برای گرفتن تصویر پس زمینه فشار دهید. مهم این است که هیچ اشیاء متحرکی در پس زمینه ای که می خواهید عکس بگیرید وجود نداشته باشد. سپس ، می توانیم به قاب دوربین بازگردیم. اگر عملکرد کار کرد ، کاربر فقط باید خود را در جریان ویدیوی عملکرد مشاهده کند. هر گونه نویز/لکه های سیاه در تصویر پیش زمینه ممکن است نتیجه تنظیم نور دوربین باشد. برای گرفتن پس زمینه دیگر ، کلید "r" را برای راه اندازی مجدد فشار دهید ، سپس دوباره "d" را فشار دهید.

برخی از نکات کلیدی برای این تابع استفاده از بولین "پرچم" است که به محض فشردن دکمه d توسط کاربر بالا می رود. این پس زمینه را ضبط می کند و به ما امکان می دهد آن را از ویدیویی که توسط عملکرد پخش می شود حذف کنیم. هدف ما ذخیره تصویر پس زمینه در ref_img است تا بتوانیم آن را از تصویر پیش زمینه که هرگونه جسم متحرک را ضبط می کند ، متمایز کنیم. ما از تابع cv2.subtract () برای کم کردن تصویر پیش زمینه از تصویر پس زمینه و بالعکس استفاده می کنیم ، سپس هرگونه تفاوت جزئی در دو تصویر را بلافاصله پس از آن لغو می کنیم. پس زمینه سیاه شده است.

ماسک fgmas با استفاده از تفاوت بین این دو تصویر ساخته می شود و سپس با استفاده از تابع 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/fa/l…

مرحله 5: پیشرفت ها

حساس ترین عملکرد در این پروژه عملکرد حذف پس زمینه است ، زیرا نیاز به استفاده از دوربینی دارد که قابلیت تنظیم نور را ندارد. ممکن است مجموعه بهتری از توابع در کتابخانه OpenCV وجود داشته باشد که بتواند این تنظیم نور را در نظر گرفته و پس زمینه را به آرامی حذف کند (مشابه صفحه سبز).

ما همچنین می توانیم از سایر توابع تشخیص چهره استفاده کنیم که ممکن است اجسامی با قابلیت های بیشتر به غیر از مختصات بازگشتی (x ، y) تولید کنند. شاید اجرای برنامه تشخیص چهره با قابلیت به خاطر سپردن چهره ها چندان دشوار نباشد.

عملکرد تاری را می توان با کنترل بصری توسط کاربر سفارشی سازی کرد. به عنوان مثال ، ممکن است کاربر بخواهد شدت اثر تار شدن را تنظیم کند یا ناحیه خاصی را در کادر انتخاب کند تا تار شود.

توصیه شده: