پیدا کردن چهره انسان

تغییرات پروژه از ابتدا تا تاریخ 1394/08/30
مسئله تشخیص چهره یکی از قدیمی‌ترین مسائل بینایی کامپیوتری بوده است که اکنون یکی از مسائل حل شده در بینایی کامپیوتری به حساب می‌آید. محصولات تجاری مختلفی مثل دوربین‌های عکاسی، نرم‌افزارهای مدیریت عکس و شبکه‌های اجتماعی وجود دارند که از این سیستم استفاده می‌کنند.

در تشخیص چهره، شما عکسی را دریافت می‌کنید و در این عکس باید محدوده‌ی چهره‌های انسان که می‌بینید را توسط یک مستطیل مشخص کنید:

![چهره‌های پیدا شده در تصویر مشخص شده‌اند](https://camo.githubusercontent.com/5acdd273605297c553d9d2571a3f029f19a15aa2/687474703a2f2f75706c6f61642e77696b696d656469612e6f72672f77696b6970656469612f636f6d6d6f6e732f652f65662f466163655f646574656374696f6e2e6a7067)

# مقدمه
تشخیص چهره[^face detection] و شناسایی چهره[^face recegnization]  دو مبحث جدا هستند. در واقع برای شناسایی چهره، نیازمند به تشخیص چهره هستیم.
با توجه به اینکه انسان امروزی برای انجام کارهای خود نیازمند به شناسایی چهره است پس مبحث تشخیص چهره به یکی از مباحث مورد علاقه محققین تبدیل شده است.
این مبحث علاوه بر نیاز در شناسایی چهره ، در تمام جاهایی که  آنالیز چهره صورت میگیرد نیز مورد نیاز است.[1]

##تعریف مساله
تشخیص چهره یکی از مهمترین مراحل تشخیص هویت می باشد .اکثر الگوریتم های شناسایی چهره ، با فرض دانستن مکان چهره تصویر جلو میروند.[2]
هدف تشخیص چهره ، پیدا کردن تمام چهره ها بدون توجه به مکان ، اندازه ، چرخش ، روشنایی ، حالت چهره و ... است.اگر این اهدف محقق شوند شناسایی چهره به بهترین شکل ممکن قابل انجام خواهد بود. 
روش های مختلفی برای رسیدن به اهدف تشخیص چهره وجود دارد و به دلیل پیچیدگی این مساله هر کدام از این روش ها فقط در زمینه های خاصی دقت کافی دارند و در بقیه زمینه ها ضعیف عمل میکنند. به عنوان مثال روشی که در آن مستقل از اندازه و چرخش چهره باشد حالت چهره باعث خطا در عملیات تشخیص می شود.[1]

ما میتوانیم روش های موجود برای عملیات تشخیص چهره را به دو دسته تقسیم کنیم[1]

1. روش های مبتنی بر عکس[^image based]
2. روش های مبتنی بر ویژگی های چهره[^feature based]

### روش های مبتنی بر عکس
در این روش ما یک مجموعه[^data set] از عکس های مختلف چهره را طبقه بندی[^classifier] میکنیم و برای تشخیص چهره جدید از این طبقه بندی استفاده میکنیم. به عبارتی دیگر در این روش ما باید مثال هایی از چهره و مثال هایی از غیر چهره به مجموعه عکس های طبقه بندی شده بدهیم و باید از روی این عکس ها عمل یادگیری ماشین [^machine learning]انجام شود. [3]

هدف اگوریتم ها و روش ها  در تشخیص چهره ، داشتن سرعت بالا و دقت زیاد است و اکثر محققین از روش های یادگیری برای تشخیص چهره استفاده می کنند چون در برنامه های دنیای واقعی دارای زمان اجرا کمتر و اعتماد بالاتر می باشند.[4]

### روش های مبتنی بر ویژگی های چهره
در این روش از ویژگی های خاصی که در چهره انسان وجود دارد استفاده میکنیم و عملیات تشخیص چهره را انجام میدهیم به عنوان مثال هر چهره ای ، داری دو فرو رفتگی (چشم ها) است و چیزی شبیه به (^ ابرو ) روی این فرو رفتگی ها قرار دارد و ....[1]

## کاربرد ها
مهم تربن کاربرد تشخیص چهره همان شناسایی چهره است که مبحث شناسایی چهره خود دارای کاربردهای فراوانی از جمله:
+ شناسایی مجرمین
+ تایید هویت دارنده کارت های شناسایی ، گواهینامه ، گذرنامه و کارت های اعتباری
+  کنترل نامحسوس و ایجاد امنیت در بانک ها ، فروشگاه ها ، فرودگاه ها و ...
+ کنترل ساعت ورود و خروج کارمند های شرکت
+ درب هایی که فقط با چهره انسان باز می شوند
+  تعیین جنسیت و سن و حالت چهره افراد

##  چالش های پیش رو 
یکی از چالش های جدی که این مبحث با آن رو به رو است رسیدن به تمام اهداف تشخیص چهره می باشد. هنوز الگوریتمی ارایه نشده است که تمامی معیار های یک الگوریتم خوب را داشته باشد. هر الگوریتمی با بهتر کردن یک یا چند میعار ، معیار های دیگر را خراب میکند.
می توان به صورت موردی هم به چالش های پیش رو نگاه کرد:[5]
1.امکان ثابت نبودن بعضی از عناصر چهره مثل مو , عینک , ریش و ... می تواند فرآیند تشخیص را با مشکل مواجه کند.
2.یکسان نبودن نور در محیط های مختلف یکی از مهم ترین مشکلات تشخیص است.
3.تفاوت اندازه تصاویر ضبط شده و همچنین متفاوت بودن نسبت چهره به کل اندازه تصویر یکی از چالش های قبل از پردازش است.
4.متفاوت بودن زاویه چهره در تصاویر گرد آوری شده یکی از چالش های اجتناب ناپذیر است.
![تفاوت زاویه چهره در تصاویر مختلف](http://upload7.ir/imgs/2014-11/37629542209988154676.png).
5.فراهم کردن یک مجموعه داده مناسب می تواند زمان نسبتا زیادی را از ما بگیرد.

# کارهای مرتبط

+ این مقاله روش های تشخیص چهره مانند: Feature based - Template based - Knowledge based -Appearance based را بررسی میکند.[6]
+ این مقاله به بررسی روش تحت شبکه های عصبی پرداخته است  دراین روش که مبتنی بر عکس است ، عکس را به تکه های مختلف تقسیم میکند و به دنبال چهره در آنها می گردد و در هر کدام از این تکه ها میتواند از شبکه های عصبی متفاوتی استفاده کند.[7]
+ در روش مبتنی بر عکس از دو مجوعه faceing , none facing استفاده می شود و چون مجوعه none facing خیلی بزرگ است و به دست آوردن این مجموعه تقریبا غیر ممکن است در این مقاله سعی بر روش  SVM [^ Support Vector Machines] است که با یک مجموعه کار میکند.[8]
+ این مقاله با استفاده از تکنیک عکس مجتمع[^Integral Image] باعث تسریع در عملیات تشخیص چهره شده است و دقت تشخیص را نیز بالا برده است.[9]


# آزمایش‌ها

# کارهای آینده

# مراجع
[1]Talele, K. T., and Sunil Kadam. "Face detection and geometric face normalization." TENCON 2009-2009 IEEE Region 10 Conference. IEEE, 2009.‏
[2] Hsu, Rein-Lien, Mohamed Abdel-Mottaleb, and Anil K. Jain. "Face detection in color images."Pattern Analysis and Machine Intelligence, IEEE Transactions on 24.5 (2002):696-706.‏
[3]Lang, Liying, and Weiwei Gu. "Study of face detection algorithm for real-time face detection system." Electronic Commerce and Security, 2009. ISECS'09. Second International Symposium on. Vol. 2. IEEE, 2009.‏
[4]Zakaria, Zulhadi, and Shahrel Suandi. "Face detection using combination of Neural Network and Adaboost." TENCON 2011-2011 IEEE Region 10 Conference. IEEE, 2011.‏
[5]محمد آگاه " احراز هویت بر اساس چهره" 2014
[6]Sharifara, Ali, et al. "A general review of human face detection including a study of neural networks and Haar feature-based cascade classifier in face detection." _Biometrics and Security Technologies (ISBAST), 2014 International Symposium on_. IEEE, 2014.‏
[7]Rowley, Henry, Shumeet Baluja, and Takeo Kanade. "Neural network-based face detection." _Pattern Analysis and Machine Intelligence, IEEE Transactions on_ 20.1 (1998): 23-38.‏
[8]Jin, Hongliang, Qingshan Liu, and Hanqing Lu. "Face detection using one-class-based support vectors." _Automatic Face and Gesture Recognition, 2004. Proceedings. Sixth IEEE International Conference on_. IEEE, 2004.‏
[9]Viola, Paul, and Michael J. Jones. "Robust real-time face detection."_International journal of computer vision_ 57.2 (2004): 137-154.‏

**پیوندهای مفید**
+ [کتابخانه اپن‌سی‌وی](http://opencv.org/)
+ [تشخیص چهره انسان در اپن‌سی‌وی](http://docs.opencv.org/trunk/doc/py_tutorials/py_objdetect/py_face_detection/py_face_detection.html)
+ [اپن‌سی‌وی در پایتون](http://docs.opencv.org/trunk/doc/py_tutorials/py_tutorials.html)
+ [نصب اپن‌سی‌وی در ابونتو](https://help.ubuntu.com/community/OpenCV)
+ [شناسایی اجسام در تصاویر با اپن‌سی‌وی](http://note.sonots.com/SciSoftware/haartraining.html)
+ [مهم‌ترین مقاله در این زمینه](https://www.cs.cmu.edu/~efros/courses/LBMV07/Papers/viola-cvpr-01.pdf)
+ [بینایی کامپیوتری در جاوااسکریپت](http://inspirit.github.io/jsfeat/)
+ [تشخیص چهره در جاوااسکریپت ۱](http://inspirit.github.io/jsfeat/#haar)
+ [تشخیص چهره در جاوااسکریپت ۲](http://inspirit.github.io/jsfeat/#bbf)