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

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

چهره‌های پیدا شده در تصویر مشخص شده‌اند

۱. مقدمه

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

۱.۱. تعریف مساله

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

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

  1. روش های مبتنی بر عکس3

  2. روش های مبتنی بر ویژگی های چهره4

۱.۱.۱. روش های مبتنی بر عکس

در این روش ما یک مجموعه5 از عکس های مختلف چهره را طبقه بندی6 میکنیم و برای تشخیص چهره جدید از این طبقه بندی استفاده میکنیم. به عبارتی دیگر در این روش ما باید مثال هایی از چهره و مثال هایی از غیر چهره به مجموعه عکس های طبقه بندی شده بدهیم و باید از روی این عکس ها عمل یادگیری ماشین 7انجام شود. [3]

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

۱.۱.۲. روش های مبتنی بر ویژگی های چهره

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

۱.۲. کاربرد ها

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

  • شناسایی مجرمین

  • تایید هویت دارنده کارت های شناسایی ، گواهینامه ، گذرنامه و کارت های اعتباری

  • کنترل نامحسوس و ایجاد امنیت در بانک ها ، فروشگاه ها ، فرودگاه ها و ...

  • کنترل ساعت ورود و خروج کارمند های شرکت

  • درب هایی که فقط با چهره انسان باز می شوند

  • تعیین جنسیت و سن و حالت چهره افراد

۱.۳. چالش های پیش رو

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

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

۲. کارهای مرتبط

  • این مقاله روش های تشخیص چهره مانند: Feature based - Template based - Knowledge based -Appearance based را بررسی میکند.[6]

  • این مقاله به بررسی روش تحت شبکه های عصبی پرداخته است دراین روش که مبتنی بر عکس است ، عکس را به تکه های مختلف تقسیم میکند و به دنبال چهره در آنها می گردد و در هر کدام از این تکه ها میتواند از شبکه های عصبی متفاوتی استفاده کند.[7]

  • در روش مبتنی بر عکس از دو مجوعه faceing , none facing استفاده می شود و چون مجوعه none facing خیلی بزرگ است و به دست آوردن این مجموعه تقریبا غیر ممکن است در این مقاله سعی بر روش SVM 8 است که با یک مجموعه کار میکند.[8]

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

۳. آزمایش‌ها

تشخیص چهره با HFB 10یک روش موثر می باشد که در آن از تکنیک های یادگیری استفاده می شود. یادگیری بر اساس دو مجموعه عکس های چهره 11و عکس های غیر چهره 12انجام می شود.[11]
یکی از کتابخانه های معروف که کار پردازش روی تصویر را انجام می دهند OpenCV می باشد باکمک این کتابخانه میتوان از الگوریتم HFB استفاده کرد.

ویژگی HFB ها به سه دسته تقسیم می شوند که شکل زیر بیانگر آن می باشد.[11]

Haar-like features

در این روش تصویر به بلاک هایی تقسیم می شود و در هر یک از این بلاک ها وجود یا عدم وجود تصویر بررسی می شود.[10]
الگوریتم تشخیص چهره در فیلم های Real Time به سرعت بالا نیاز دارد پس باید عملیات تشخیص چهره به صورت کارا باشد.[12]
برای سرعت بخشیدن به الگوریتم بالا ، فرآیند بررسی چهره بودن را به صورت مرحله به مرحله انجام می دهیم . یعنی به صورت کامل هر بلاک را بررسی نمی کنیم و در مرحله اول ممکن است بلاک مورد نظر رد شود.[10]

یکی از راه های ساده برای رد کردن بلاک، استفاده از ویژگی های ساختاری چهره(دماغ -لب -چشم و... ) است.

<center> |||| </center>

روش رد کردن بلاک

با در نظر گرفتن بلاک های 24*24 ، ما باید 6000 ویژگی را در نظر بگیریم و چهره بودن هر یک از آنها را بررسی کنیم ولی ما می دانیم که اکثر بلاک ها چهره نیستند پس به دنبال چهره نبودن یا رد بلاک می گردیم تا سرعت الگوریتم بالا برود.

برای بهتر فهمیدن فرآیند مرحله به مرحله این الگوریتم ، می توان به ویدیوی زیر دقت نمود.

<center> <iframe src="https://player.vimeo.com/video/12774628" width="500" height="476" frameborder="0" webkitallowfullscreen mozallowfullscreen allowfullscreen></iframe> </center>

یک راه دیگر برای سرعت بخشیدن به الگوریتم استفاده از تکنیک عکس مجتمع است.[9] به این صورت که به جای ذخیره کردن هر پیکسل تصویر ، مجموع پیکسل های بالا و سمت راست را ذخیره می کنیم. و با این کار محاسبات جمع در تکنیک عکس مجتمع ، کاهش می یابد.شکل های زیر نماینگر این عمل هستند.[10][11][12]

Integral Image

محاسبات به صفر رسیده است

محاسبات از 6 جمع به 4 کاهش یافته است

اگر تصویر اصلی را با i نمایش دهیم مقدار هر پیکسل در مکان (x,y) برابر با (i(x,y خواهد بود.
اگر تصویر مجتمع را با 13ii نمایش دهیم مقدار هر پیکسل در مکان (x,y) برابر با (ii(x,y خواهد بود.
پس مقدار (ii(x,y از طریق فرمول زیر به دست خواهد آمد.

فرمول محاسبه هر پیکسل

۳.۱. پیاده سازی

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

۳.۱.۱. نتیجه مناسب

۳.۱.۲. نتیجه نامناسب

۴. کارهای آینده

۵. مراجع

[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.‏
[10]Viola, Paul, and Michael Jones. "Rapid object detection using a boosted cascade of simple features." Computer Vision and Pattern Recognition, 2001. CVPR 2001. Proceedings of the 2001 IEEE Computer Society Conference on. Vol. 1. IEEE, 2001.
[11]Guennouni, Souhail, Ali Ahaitouf, and Anass MANSOURI. "A Comparative Study of Multiple Object Detection using Haar-like Feature Selection and Local Binary Patterns in Several Platforms."
[12]Commin, Harry. "Robust Real-time Extraction of Fiducial Facial Feature Points using Haar-like Features." arXiv preprint arXiv:1505.04286 (2015).

پیوندهای مفید


  1. face detection

  2. face recegnization

  3. image based

  4. feature based

  5. data set

  6. classifier

  7. machine learning

  8. Support Vector Machines

  9. Integral Image

  10. Haar feature-based

  11. positive images

  12. negative images

  13. IntegralImage

تایید شده

سلام
در کل پروژتون خوب بود فقط یک سری نکاتی که به نظرم اومد این است که :
-بخش های مقدمه، تعریف مساله و کاربردها خوب بیان شده است به عنوان مثال در بخش 1.1.1 دلیل برتری روش و مزیت ان ذکر شده است که به جا و مفید بود.
-توضیحات بخش تکنیک عکس مجتمع کافی نبود مختصرنویسی به تبیین مساله لطمه زده.

  • در بخش چالش های پیش رو به خوبی مشکلات را بیان کردید. اما ذکر نکردید که در پروژه شما چطور این چالش ها برطرف شده و در واقع چه پیش پردازش هایی انجام می شود.
    -در بخش پیاده سازی خوب بود اگه دلایل ایجاد نتیجه نامناسب و مقایسه دو نتیجه نیز بیان میشد.
    -در قسمتی اشاره کرده بودید که"از دو مجموعه عکس چهره و غیر چهره استفاده شده است که با تغییر دادن این دو مجموع می توان درصد صحت عملکرد الگوریتم را تغییر داد"
    اگر چگونگی اینکار نیز بررسی شده بود درک مطلب آسان تر و بهتر صورت میگرفت.

  • فکر میکنم بهتر باشد جای عنوان های " آزمایش " و " پیاده سازی " را با هم عوض کنید. چون در بخش پیاده سازی باید مراحل پیاده سازی توضیح داده شود و در بخش آزمایش ها، آزمایش و نتایج مربوط به آن را توضیح دهید.
    در کل خوب بود، خسته نباشید.

تایید شده

در مجموع خوب است اما ذکر چند نکته به بهتر شدن کار کمک می کند.

  • متن ساده و روان وقابل فهم است اما بعضی از مفاهیم به کار برده شده توضیح داده نشده و نیازمند پی نوشت می باشد.

  • مقدمه مختصر است .

  • ویدئو داده شده باز نمی شود.

  • عکس ها نیاز به توضیحات بیشتری دارد.

تایید شده

سلام
-بخش مطالعه ی کارهای مرتبط به خوبی انجام شده است، اما ای کاش برای هر کاری که در این قسمت به عنوان نمونه آورده اید حداقل یک پاراگراف توضیح می آوردید. به نظر کارهای مطالعه شده زیاد است اما هیچ کدام از آنها عمیق توضیح داده نشده اند.
-به نظر میرسد خواننده می بایست بخش مهمی از فرآیند مورد پیشنهاد شما را در ویدئو می دید و متوجه می شد، اما ویدئویی دیده نمی شد. انتظار می رفت قبلا در مورد باز شدن ویدئو اطمینان حاصل می کردید.
-برخی از جملات مانند (در این روش تصویر به بلاک هایی تقسیم می شود و در هر یک از این بلاک ها وجود یا عدم وجود تصویر بررسی می شود.) و یا (الگوریتم تشخیص چهره در فیلم های Real Time به سرعت بالا نیاز دارد پس باید عملیات تشخیص چهره به صورت کارا باشد) بیشتر توضیح داده می شد. مثا اینکه وجود و یا عدم وجود تصویر منظور چیست؟ مگر می شود تصویر نباشد؟ و یا اینکه چرا فکر می کنید الگوریتم شما کارا است؟