تشخیص دست از روی فریم های متوالی دوربین - هفت خط کد انجمن پرسش و پاسخ برنامه نویسی

تشخیص دست از روی فریم های متوالی دوربین

+1 امتیاز
سلام خسته نباشید .

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

ممنون میشم مراحلی که باید انجام بدم رو بهم توضیح بدین .

با تشکر.
سوال شده دی 25, 1392  بوسیله ی ریحانه (امتیاز 13)   1 1 3
دوباره تگ گذاری شد بهمن 22, 1392 بوسیله ی BlueBlade

2 پاسخ

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

در این مرجله چون شما ار فریم های متوالی استفاده می کنید همانطوری که دوستان عرض کردند بایستی از روش های استخراج پشت زمینه استفاده کنید در این روش از هر فریم های متوالی میانگین گرفته میشه این میانگین بعد از  چندین فریم میانگین گیری یک متوسط میانگینی از پست زمینه برای شما ایجاد می کنه اما این روش ایراداتی هم داره زمانیکه شما دست خودتون را ثابت نگه می دارید خود دست شما هم بعد چندین فریم به پست زمینه اضافه میشه که البته به میزان آستانه بستگی داره که شما برای الگوریتم در نظر گرفتید البته از این روش می تونید برای افزایش سرعت اجرایی کمک بگیرید ولی نباید در ناحیه پیشنهادی توسط این الگوریتم قطعیت بدید یکی از بهترین کارهایی که میشه انجام داد شما بیاید در اولین فریم دست را جستجو کنید و در فریم های بعدی به انواع روش ها موقعیت جاری دست را درگیری کنید تا زمانیکه آبجکت شما defrom یا در پشت مانعی قرار بگیره یا از کادر خارج شه شما به کار خودتون ادامه بدید. یکی از روش ها جهت شناسایی دست استفاده روش آموزش adaboost cascade هستش که این کلاسفیر از haar-like feature به عنوان ویژگی استفاده می کنه که این روش جز بهترین روش های جستجو آبجکت هستش شما می تونید از زوایای مختلفی که دست ممکنه در صحنه ظاهر شه به الگوریتم آموزش بدید و سپس در مرحله اجرای برنامه از کلاسیفیر آموزش دیده استفاده کنید یکی از مراحل پیش پردازشی که می تونه به شما کمک کنه فیلتر کردن فضای رنگی هستش تصویر خود را به فضای HSV تبدیل کرده چون در این فضای رنگی می تونید به راحتی با استفاده از saturation و hue رنگ پوست را مشخص کنید البته فضای رنگ پوست غیره خطی بوده و برای دقت بالاتر می تونید رنگ پوست را با یک کلاسیفیر ساده به سیستم آموزش بدید

پس در این مرحله شما ماسکی دارید که بایستی adaboost در آن به دنبال اولین فریم بگرده پس از آن با استفاده از روش MeanShift یا CAMShift در واقع در فریم های بعدی به دنبال توزیع رنگ مورد نظر در همسایگی نقطه مورد نظر می گرده پس از بدست آوردن ماسک دست می تونید با distance transform مرکز دست یا کف دست یا ناحیه که بیشترین چگالی را داره را جستجو کنید پس از می تونید در حوالی ناحیه قسمت چگال دست به دنبال انگشتان بگردید که با استفاده از conex hull نواحی convex یعنی نوک انگشتان را پیدا کنید و با استفاده convecydefect می تونید نواحی defect یا همان نواحی مابین انگشنان را پیدا کنید برای این مورد بهتره که که blob تهیه شده در مراحل قبل کانتور تهیه کنید.

موفق باشید
پاسخ داده شده دی 27, 1392 بوسیله ی مصطفی ساتکی (امتیاز 21,998)   24 34 75
انتخاب شد دی 27, 1392 بوسیله ی Bad Programmer
+2 امتیاز

با توجه به این که گفتین فریم های متوالی:

میتونین از تفاضل فریم جاری و فریم پس زمینه استفاده کنین. البته در این روش باید دوربین ثابت باشه.

تفاضل به این معنیه که پیکسل های یک فریم رو از پیکسل های یک فریم دیگه کم کنین(قدر مطلق).

اگه این مقدار از یک حدی بیشتر بود میتونین اون پیکسل رو 1 و اگه کم بود 0 در نظر بگیرین. حالا یک تصویر دودویی دارین که پیکسل های روشن تغییرات دو فریم رو مشخص میکنه.

کاری که میتونین بکنین اینه که اول از چند فریم اول که فقط شامل پس زمینه هست و دست توی کادر نیست میانگین بگیرین و بعد که دست وارد کادر شد تفاضل رو بین فریم جاری و اون میانگینه انجام بدین.

البته این روش مشکلات خیلی زیادی داره و میشه گفت که آماتورترین روشه smiley

پاسخ داده شده دی 25, 1392 بوسیله ی Bad Programmer (امتیاز 250)   2 3 11
ویرایش شده دی 25, 1392 بوسیله ی Bad Programmer
...