تشخیص حالت فرد از روی تصویر

تغییرات پروژه از تاریخ 1393/02/06 تا تاریخ 1393/03/05
![تشخیص حالت](http://www.eecs.qmul.ac.uk/~ioannisp/HumanMotionAnalysis/expressions.jpg)

#مقدمه
تشخیص حالت چهره از مهمترین چالش های پردازش تصویر محسوب می گردد  و امروزه این موضوع کاربردهای فراوانی پیدا کرده است . از نمونه این کاربرد های ارتباط انسان با کامپیوتر است که با استفاده از روشهای تشخیص حالت میتوان یک ارتباط به اصطلاح قلبی میان انسان و کامپیوتر ایجاد کرد .به عنوان مثال ربات هایی ساخت که با خوشحالی شما خوشحال و با ناراحتی شما ناراحت شوند . از جمله کاربردهای دیگر این بحث در طراحی انیمیشن و فیلم های کارتونی است به این صورت که اگر یک شخصیت کارتونی حرکات صورت خود را برای نمایش یک حالت از چهره ی یک  انسان الهام بگیرد نمایش حالت مورد نظر بسیار حقیقی تر بوده و طراحی نیز ساده تر میگردد . 
تشخیص حالات مختلف  از روی ویژگی های صورت به خصوص ویژگی های مربوط به چشم ُ دهان و ابرو ها انجام میگیرد و با استفاده از قوانینی که جهت تمییز حالات مختلف از یکدیگر تعریف میشود میتوان حالت چهره را با دقت خوبی مشخص کرد .
در این پروژه سعی میشود تا با پردازش تصویر متحرک و بدست آوردن الگویی از تغییرات نقاط صورت به حالت نهایی چهره دست یافت . کاملا قابل تصور است که تشخیص حالت چهره از روی تصویر متحرک که در واقع نشان دهنده ی تغییر حالت چهره از معمولی به یکی از حالات گفته شده در زیر است از دقت بالا تری نسبت به تشخیص چهره از روی تصویری صامت و ثابت خواهد بود .

#کار های مرتبط
شش حالت اصلی چهر ه که اغلب برای تشخیص در نظر گرفته میشوند عبارتند از : خوشحالی ‌ْ ناراحتی ْ خشم ْ تعجب ْ ترس و تنفر .   
 تعیین حالات چهره با توجه به تغییراتی است که در نقاط مختلف صورت رخ میدهد  . این نقاط را واحد های فعال یا AU می نامند .جهت تشخیص حالت میبایست  ابتدا با انجام یک سری  پیش پردازش ها ناحیه مورد پردازش را روی صورت مشخص نمود سپس چند نقطه مشخصه در صورت تعین کرد و سپس  با انجام پردازش های لازم روی تصویر و نرمال سازی اندازه ها این نقاط را در اولین فریم و همچنین فریم های بعدی تعیین نمود . با تعقیب نقاط مشخصه در فریم ها یک بردار ویژگی برای هر یک از نقاط مشخصه به دست می آید و با کمک این بردار ها میتوان به حالت چهره دست یافت .
در شکل زیر 21 نقطه به عنوان نقاط مشخصه در نظر گرفته شده اند .


![تصویر نقاط مشخصه](http://gigpars.com/upload/y00g_untitled.png)


‫برای حذف اثر فاصلۀ دوربین نسبت به‬‫شخص ‪ ،‬کمیتی بنام ‪ BASE‬که در واقع فاصلۀ بین انتهای‬‫ داخلی چشم ها می باشد‪ ،‬در نظر گرفته شده و تمام مقادیر‬
‫اندازه گیری شده نسبت به این کمیت نرمالیزه می شوند‪.
‬‬
$$BASE=\sqrt{(x_5-x_{10})^2+(y_5-y_{10})^2}$$

‫‪θ‬‬ نیز زاویه‫‪ BASE‬‬ نسبت به افق است که جهت حذف دوران صورت در نظر گرفته میشود .

$$\theta = \arctan{\frac{y_5-y_{10}}{x_5-x_{10}}}$$

‫برای اینکه مختصات‪ FCP‬ها در تصـاویر مختلـف نسـبت بـه‬ ‫یک مرجع ثابتی اندازه گیری شوند ، نقطه مرجع نقطه مرجع تقریبا نوک بینی میتواند فرض شود به عنوان مبدا مقایسه ی مختصات FCP‬ها در تصاویر مختلف در نظر گرفته میشود .
مختصات مبدا برابر خواهد بود با :

$$x_0 = \frac{x_5+x_{10}}{2}$$
$$y_0 = \frac{y_5+y_{10}}{2}$$

$$x_org = x_0 – BASE \times \sin \theta$$
$$y_org = y_0 – BASE \times \cos \theta$$


#تشخیص حالت های چهره با کمک شبکه عصبی RBF
شبکه عصبی RBF  در واقع  یک سیستم پردازش اطلاعات است که عملکردی شبیه شبکه عصبی بیولوژیکی دارد و می­توان آن را مدل ریاضی توسعه داده شده قسمت مادی شناخت انسان یا بیولوژی عصبی قلمداد نمود . در این مسئله پس از بدست آوردن  بردار های ویژگی  ، شبکه ای شامل 21 گره ورودی خواهیم داشت که هر یک از ورودی ها مختص به یکی از مولفه های بردار ویژگی میباشند . این شبکه همچنین شامل یک لایه مخفی و 5 گره خروجی است که هر یک نمایانگر یکی از حالات چهره هستند . لایه ی مخفی از واحد هایی ترکیب یافته که بر اساس تحریکات توابع radial basis  عمل میکنند. این واحد ها فیلد نامیده میشوند . لایه خروجی شامل گره هایی است که به بردار خروجی متصل هستند .
گره های ورودی به طور کامل با اتصلات با وزن واحد به فیلد های پذیرنده در لایه مخفی متصل اند و فیلد های پذیرنده به طور کامل با اتصالات وزن دار به واحد های خروجی متصلند .
بدین ترتیب در آزمایش هر یک از حالات ، شبکه عصبی با تصاویر موجود در پایگاه داده ی مورد استفاده آموزش دیده و میتواند توسط تعدادی تصویر دیگر از پایگاه داده مورد آزمایش قرار بگیرد . چهره های مورد آزمایش در هر مرحله در آموزش شبکه دخالت داده نمیشوند .

#کار های مرتبط
شش حالت اصلی چهر ه که اغلب برای تشخیص در نظر گرفته میشوند عبارتند از : خوشحالی ‌ْ ناراحتی ْ خشم ْ تعجب ْ ترس و تنفر .   
جهت تشخیص حالت میبایست  ابتدا با انجام یک سری  پیش پردازش ها ناحیه مورد پردازش را روی صورت مشخص نمود  یعنی مربعی که در آن دقیقا صورت قرار داشته باشد و باقی قسمت های تصویر حذف شوند . در مرحله بعد میبایست یک سری ویژگی از تصویر صورت استخراج شود . سپس هر حالت چهره  به وسیله ی یک دسته بند دسته بندی شود .
داده ها که شامل تصویر ها از حالات مختلف میباشد را به دو قسمت آموزش و آزمایش تقسیم مینماییم و با قسمت آموزش دسته بندی ها را یاد گرفته با قسمت آزمایش تست برنامه را انجام میدهیم .

![تصویر مراحل ](http://8pic.ir/images/04362501606406817307.png)


در شکل زیر 21 نقطه به عنوان نقاط مشخصه در نظر گرفته شده اند .

![تصویر نقاط مشخصه](http://gigpars.com/upload/y00g_untitled.png)

در مرحله پیش پردازش تصویر های چهره نرمال سازی می شوند و اگر نیاز بود ‪ ،‬برای افزایش کارائی تشخیص سیستم‬ بهبود می یابند‪ .‬برخی یا تمام مراحل پیش – پردازش زیر ممکن است در یک سیستم‬ ‫تشخیص چهره پیاده سازی شوند ‪:‬‬
‫‪ .1‬نرمال سازی اندازه ی تصویر‪ .‬این کار معمولا انجام می شود تا اندازه ی تصویر گرفته شده به یک اندازه تصویر پیش فرض مانند ‪ 128*128‬تغییر کند‬ ،‬این اندازه ی تصویر همان اندازه ی تصویری است که سیستم تشخیص چهره‬ ‫با آن کار می کند‪.‬‬
برای حذف اثر فاصلۀ دوربین نسبت به‬‫شخص ‪ ،‬کمیتی بنام ‪ BASE‬که در واقع فاصلۀ بین انتهای‬‫ داخلی چشم ها می باشد‪ ،‬در نظر گرفته شده و تمام مقادیر‬
‫اندازه گیری شده نسبت به این کمیت نرمالیزه می شوند‪.
‬‬
$$BASE=\sqrt{(x_5-x_{10})^2+(y_5-y_{10})^2}$$

برای اینکه مختصات‪ AU‬ها در تصـاویر مختلـف نسـبت بـه‬ ‫یک مرجع ثابتی اندازه گیری شوند ، نقطه مرجع تقریبا نوک بینی میتواند فرض شود به عنوان مبدا مقایسه ی مختصات AU ها در تصاویر مختلف در نظر گرفته میشود .
مختصات مبدا برابر خواهد بود با :

$$x_0 = \frac{x_5+x_{10}}{2}$$
$$y_0 = \frac{y_5+y_{10}}{2}$$

$$x_{org} = x_0 – BASE \times \sin \theta$$
$$y_{org} = y_0 – BASE \times \cos \theta$$

‫‪ .2‬یکسان سازی هیستوگرام‪ .‬این معمولا بر روی تصاویر خیلی تاریک یا‬ خیلی روشن برای بهبود کیفیت تصویر و بهبود کارآئی تشخیص چهره انجام‬ ‫می شود که گستره ی ‪ contrast‬تصویر را اصلاح می کند که به عنوان نتیجه  ،‬برخی ویژگیهای مهم چهره آشکارتر می شوند‪.‬‬
‫‫‪ .3‬فیلترینگ میانه‪ .‬برای تصاویر دارای نویز ‪ ،‬به خصوص تصاویری که از‬ طریق دوربین عکاسی و یا ‪ frame grabber‬گرفته شده است ‪ ،‬فیلترینگ‬
‫میانه می تواند تصویر را بدون از دست رفتن اطلاعات تمیز کند‪.‬‬  .4‬فیلترینگ بالا گذر‪ .‬استخراج کننده های ویژگی ای که مبتنی بر روی‬ کلیات چهره هستند‪ ،‬ممکن است از تصویری که لبه یابی روی آن صورت‬ گرفته است نتیجه ی بهتری بدهند‪ .‬فیلترینگ بالا گذر بر روی جزئیاتی مانند‬ لبه ها تاکید دارند که در نتیجه کارآئی تشخیص لبه را افزایش می دهد‪
.‬‬
‫‪θ‬‬ نیز زاویه‫‪ BASE‬‬ نسبت به افق است که جهت حذف دوران صورت در نظر گرفته میشود .

$$\theta = \arctan{\frac{y_5-y_{10}}{x_5-x_{10}}}$$

بدین ترتیب مختصات جدید هر یک از AU‬ها نسبت به مبدا بدست آمده به صورت زیر محاسبه میگردد:
$$x_a = x_b – x_{org}$$
$$y_a = y_b - y_{org}$$

‫ پس از انجام پیش – پردازش ( اگر لازم بود )‬تصویر‬ چهره ی نرمال شده به منظور پیدا کردن ویژگیهای کلیدی ای که قرار است برای دسته‬ بندی از آنها استفاده شود ‪ ،‬به ماژول استخراج ویژگی فرستاده می شود‪ .‬به عبارت‬ در مرحله feature extraction میبایست ویژگی های تصویر را با استفاده از کتابخانه های موجود  استخراج نمود . اینکار درواقع خطا های ابعادی تصویر ورودی را کاهش میدهد و  ویژگی هایی قابل پردازش از تصویر ارائه میکند .

‫ماژول دسته بندی‪ .‬در این ماژول ‪ ،‬با کمک یک دسته بند الگو ‪ ،‬ویژگیهای‬ استخراج شده از تصویر چهره با آنهایی که در کتابخانه ی چهره ( یا پایگاه داده ی‬
‫چهره ) ذخیره شده اند مقایسه می شود‪ .‬پس از انجام این مقایسه ‪ ،‬تصویر چهره به عنوان «شناخته شده » و « نا شناس » دسته بندی می شود‪.‬‬

#مراجع
+ خانمحمدی، سهراب، علی آقاگلزاده، و میرهادی سیدعربی، 1381، تشخیص حالتهای چهره براساس نقاط مشخصه صورت با استفاده از شبکه عصبی RBF و منطق فازی، دومین کنفرانس ماشین بینایی و پردازش تصویر، تهران، دانشگاه خواجه نصیرالدین طوسی
+ M. Rosenblum , Y. Yacoob and L. Davis ,"Human Expression Recognition from Motion using a Radial Basis Function Network Architecture," IEEE Trans. on Neural Networks ,vol.7,No.5,september 1996.
+ Claude C. Chibelushi, Fabrice Bourel   Facial Expression Recognition :A Brief Tutorial Overview  
+ Facial Expression Recognition : Neeta Sarode et. al. / (IJCSE) International Journal on Computer Science and Engineering Vol. 02, No. 05, 2010, 1552-1557 

#پیوند های مفید
 
+ [شناسایی چهره](http://www.myheritage.ir/%D8%AA%DA%A9%D9%86%D9%88%D9%84%D9%88%DA%98%DB%8C-%D8%AA%D8%B4%D8%AE%DB%8C%D8%B5-%D8%B5%D9%88%D8%B1%D8%AA)
+ [نرم افزار چهره خوان](http://www.noldus.com/human-behavior-research/products/facereader)

+ [کتابخانه ی openCV](https://opencv-python-tutroals.readthedocs.org/en/latest/py_tutorials/py_tutorials.html)
+ [Histogram of Oriented Gradients](http://scikit-image.org/docs/dev/auto_examples/plot_hog.html#example-plot-hog-py)