ایر پیانو با استفاده از OpenCV و پایتون

پیانو
پیانو
منتشر‌شده در: towardsdatascienceبه تاریخ ۱۲ ژوئن ۲۰۲۱
لینک منبع Air Piano using OpenCV and Python

الهامات من برای ساخت یک «ایر پیانو»

اخیرا به دیدن پسر خاله‌ام رفته بودم و او مدتی بود که سعی می‌کرد پیانو یاد بگیرد. با این حال، به دلیل این بیماری همه‌گیر، معلم او نتوانست به خانه بیاید و آن‌ها از طریق جلسات زوم تمرین می‌کردند. در آن زمان بود که من به این فکر افتادم که یک پیانو مجازی بسازم که هم معلم او و هم او بتوانند از آن برای یادگیری موسیقی استفاده کنند. وقتی به این موضوع فکر کردم، به این فکر کردم که چرا از صفحه‌کلید فراتر نروم؟ بیایید سعی کنیم از هوای رقیق موسیقی بسازیم؟ اجازه دهید ذهن خلاق ما جریان پیدا کند و چنین تعاملی ایجاد کند که به فرد اجازه دهد فقط با حرکت دادن دست‌ها در هوا، پیانو بزند؟ در آن زمان بود که تصمیم گرفتم یک «ایر پیانو» بسازم.

شرح فنی پروژه:

ایر پیانو پروژه‌ای است که در محل تلاقی دید کامپیوتر و تعامل انسان و کامپیوتر ساخته شده‌است. برای ساخت ایر پیانو، من از زبان پایتون و یک کتابخانه تخصصی به نام OpenCV استفاده کرده‌ام. این یک دید کامپیوتری منبع باز و کتابخانه نرم‌افزار یادگیری ماشینی است.

کتابخانه مهم دیگری که به ما کمک می‌کند تا این پروژه را تکمیل کنیم کتابخانه pyAutoGUI است. رابط کاربری پایتون به اسکریپت‌های پایتون شما اجازه می‌دهد تا موس و صفحه‌کلید را کنترل کنند تا تعاملات را با دیگر برنامه‌ها به صورت خودکار انجام دهند. رابط کاربری خودکار چندین ویژگی دارد: حرکت دادن موس و کلیک کردن یا تایپ کردن در پنجره‌های برنامه‌های دیگر، گرفتن عکس از صفحه نمایش، و غیره.

حالا بیایید جریان پروژه را درک کنیم:

  • مرحله اول ضبط ورودی جریان ویدئویی کاربر است.
  • پس از خواندن فریم به فریم داده ورودی، اکنون باید مقیاس BGR را به مقیاس HSV تبدیل کنیم تا بتوانیم با رنگ‌ها بهتر کار کنیم.

چرا ما به فضای رنگHSV تبدیل می‌کنیم؟ پاسخ ساده این است که برخلاف RGB، HSV، لوما یا شدت تصویر را از کروما یا اطلاعات رنگ جدا می‌کند. در دید کامپیوتری، شما اغلب به دلایل مختلف، مانند مقاومت در برابر تغییرات نورپردازی، یا حذف سایه‌ها، می‌خواهید مولفه‌های رنگ را از شدت جدا کنید.

  • دست با استفاده از ماسک رنگی سیاه که با استفاده از مقیاس HSV ایجاد کردیم، تشخیص داده می‌شود. برای این منظور، من تصمیم گرفتم یک جفت دستکش مشکی بپوشم چون تشخیص رنگ پوست نسبتا سخت‌تر بود و پروژه را از تعمیم محروم می‌کرد.
  • پس از آنکه دست شناسایی شد، کانتورها یعنی مرز دست خود را می‌یابیم. سپس یک بدنه محدب رسم می‌کنیم تا چند ضلعی محدب اطراف را پیدا کنیم. از این چند ضلعی، ما نوک انگشتان را با استفاده از تابع نقص تحدب استخراج می‌کنیم.

بدنه محدب(Convex Hull) چیست؟ بدنه محدب، چند ضلعی محدب n-وجهی که به طور کامل یک شی را محدود می‌کند.

نقص‌های آزار دهنده چه هستند؟ هر گونه انحراف از کانتور از بدنه محدب آن به عنوان نقص تحدب شناخته می‌شود.

تعمیم‌یافته
تعمیم‌یافته
  • یک فیلتر نیز وجود دارد که فقط با استفاده از فاصله بین نقاط، یعنی نوک انگشت و مفصل، فقط نوک انگشتان را می‌گیرد، در حالی که برای رسیدن به همان حالت نیز می‌توانید از زاویه بین انگشتان استفاده کنید.
  • ما می‌توانیم امکانات بیشتری را به این پروژه اضافه کنیم و از آخرین پیشرفت‌های هنری (مانند کتابخانه مدیا aPipe) برای این پروژه جالب‌تر استفاده کنیم.
  • قسمت آخر شامل استفاده از کتابخانه PyAutoGUI است که به شما امکان می‌دهد بسته به مختصات حرکات دست (به طور دقیق نوک انگشتان)، عملکرد صفحه کلید را انجام دهید. حالا وقتی این برنامه اجرا می‌شود، موقعیت نوک انگشتان را در کادر ردیابی می‌کند و به طور خودکار کلیدهای ذکر شده را روی صفحه‌کلید فشار می‌دهد. برای انجام این کار، ما پنجره دیگری را با این لینک باز خواهیم کرد: https://www.onlinepianist.com/virtual-piano. این پیانوی مجازی است که ما با استفاده از نوک انگشتانمان آن را کنترل خواهیم کرد.

نتیجه نهایی مثل این بود:

این توصیف دقیق فنی پروژه«Air Piano» بود، و من امیدوارم که شما چیزهای زیادی از این طریق یاد گرفته باشید. به Github سر بزنید و کد کامل را بررسی کنید تا درک بهتری به دست آورید. موارد زیر منابعی هستند که من از آن‌ها یاد گرفتم و به من کمک کردند تا این پروژه را با موفقیت بسازم -

  1. تشخیص نوک انگشت Finger-tip detection
  2. بدنه محدب Convex Hull
  3. نقص‌های محدب Convexity Defects
  4. تشخیص دست Hand Detection

مسیر آینده و موارد استفاده:

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

این متن با استفاده از ربات ترجمه مقاله دیتاساینس ترجمه شده و به صورت محدود مورد بازبینی انسانی قرار گرفته است.در نتیجه می‌تواند دارای برخی اشکالات ترجمه باشد.
مقالات لینک‌شده در این متن می‌توانند به صورت رایگان با استفاده از مقاله‌خوان ترجمیار به فارسی مطالعه شوند.