پیاده سازی اپلیکیشن موبایل با ویژگی های تشیخص چهره

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

بله، مقاله امروز در مورد فناوری تشخیص چهره است. ما می خواهیم تجربه خود را در رابطه با این فناوری و یافته هایی که بدست آورده ایم را به اشتراک بگذاریم.

چرا شناسایی چهره در حال ظهور است؟

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

  • سیستم امنیتی

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

  • امنیت کاربران

Caterpillar فناوری شناسایی چهره را برای حل مشکل رانندگان خواب آلود اعمال کرده است. یک برنامه بخصوص ارزیابی می کند که چقدر چشمان راننده خسته به نظر می رسد. از طریق تحلیل موقعیت سر و چشمان راننده، سیستم می تواند تصمیم بگیرد که راننده نیاز به هشدار بیداری دارد یا خیر.

  • تعهد کاربر

یک راه برای افزایش وفاداری مصرف کنندگان یک کافه، رستوران یا هتل ها، از طریق خوش آمد گویی شخصی با استفاده از شناسایی چهره است.

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

سازندگان نرم افزار موبایل، علاقه چشمگیر مشتریان به فناوری شناسایی چهره را نادیده نگرفته اند. در واقع ، آن ها راه های جدیدی را برای استفاده از این فناوری به روشی غیرمتعارف در نظر می گیرند.

فناوری شناسایی چهره چگونه کار می کند

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

فرایند شناسایی چهره به صورت ۵ مرحله تعریف می شود:

  1. تشخیص چهره یا ردیابی

  2. تنظیم چهره

  3. استخراج ویژگی ها

  4. مطابقت دادن ویژگی ها

  5. شناسایی چهره

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

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

تحلیل مولفه اصلی

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

ابتدا، مجموعه چهره های آموزش به عنوان ورودی به یک ماتریس داده رایج تبدیل می شود.

تبدیل تصاویر آموزش چهره به ماتریس عملیاتی
تبدیل مجموعه چهره های آموزش به یک ماتریس

با استفاده از این ماتریس ، تصویر ورودی به مجموعه ای از ضرایب خطی به نام مولفه های اصلی یا چهره های ویژه ( Eigenfaces ) تجزیه می شود.

مولفه های اصلی در هر تصویر چهره محاسبه می شوند که معمولا هر الگوریتم ۵ تا ۳۰۰ ویژگی خاص نیاز دارد. مولفه های باقیمانده تفاوت جزئی میان چهره و نویز های پس زمینه تصویر را نشان می دهند. فرآیند شناسایی در واقع شامل مقایسه مولفه های اصلی یک تصویر ناشناس با مولفه های دیگر تصاویر است.

تحلیل مولفه های اصلی روشی است به خوبی صحت خود را نشان داده است. با این حال، در مواردی که تغییر قابل توجهی در روشنایی یا حالت چهره صورت گرفته، کارایی این روش به صورت قابل توجهی کاهش می یابد. راه حل این مشکل استفاده از تفکیک خطی فیشر ( Fisherface ) است. تجربه نشان داده است که تحت شرایط نوردهی مورب یا سایه تصاویر چهره، روش فیشر هنوز کارایی ۹۵% ی را در مقایسه با روش چهره های ویژه که کارایی آن ۵۳% است ارائه می دهد.

جهره های ویژه
نمونه ای از چهره های ویژه (Eigenfaces ) بدست آمده برای مجموعه از چهره های آموزش دیده

شبکه عصبی مصنوعی

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

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

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

معماری شبکه عصبی کانولوشنی
شماتیکی از معماری شبکه عصبی کانولوشنی

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

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

پیاده سازی پروژه شناسایی چهره

مرور پروژه

برنامه ای که نیازمند پیاده سازی ویژگی تشخیص چهره باشد، می تواند یک برنامه ساده یادداشت برداری باشد. بدین صورت که این اجازه را به کاربران می دهد تا با استفاده از تشخیص چهره یک راه امن برای دستیابی، نوشتن یا ذخیره یادداشت های خود داشته باشند.

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

زمانی که برنامه اجرا می شود، موتور شناسایی چهره آغاز به کار می کند. برنامه از کاربر می خواهد تا به دوربین نگاه کند. موتور شناسایی چهره ، اطلاعات چهره دریافت شده از طریق دوربین را ارزیابی می کند. اگر اطلاعات چهره با اطلاعاتی که کاربر قبلا در پروفایل ذخیره کرده، مطابقت داشته باشد، محتوای متن رمز گشایی شده و روی صفحه نمایش، نشان داده می شود. موتور شناسایی چهره در هر n ثانیه ارزیابی اطلاعات چهره کاربر را مجددا انجام می دهد؛ اگر اطلاعات دریافت شده چهره لحظه ای هم خوانی نداشته باشد، متن مبهم می گردد. به تصویر زیر نگاه کنید.

قابلیت تشخیص چهره در اپلیکیشن
شماتیک چگونگی عملکرد این برنامه

شناسایی چهره با OPENCV

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

۳ راه برای اضافه کردن OpenCV به پروژه iOS به صورت زیر است:

  1. استفاده از CocoaPods در OpenCV
  2. یک نسخه رسمی از چارچوب OpenCV برای IOS را دریافت و به پروژه اضافه کنید.
  3. استفاده از منابع GitHub و دنبال کردن دستور العمل برای ساخت کتابخانه خود

OpenCV به اندازه کافی برای پیاده سازی دو اصل شناسایی چهره ، یعنی شناسایی ( Detection ) و تشیخص ( Recognition ) ، کارایی دارد.

شناسایی چهره

کتابخانه OpenCV ، تنظیمات آماده ی بسیاری برای تشخیص چهره و ویژگی های چهره، حتی لبخند، را دارد. تشخیص از طریق آموزش قابل انجام است. در هنگام فرایند آموزش، درخت تصمیم معمولا با استفاده از تصاویر مثبت ( تصاویر همراه با چهره ) و تصاویر اشتباه ( تصاویر بدون چهره ) بهینه سازی می شود.

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

چهره های ویژه در OpenCV

بعضی از چیز هایی که بر سیستم آموزش تاثیر می گذارد عبارتند از:

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

تشخیص چهره

۳ الگوریتم پایه برای شناسایی چهره در  OpenCV وجود دارد: چهره های ویژه ، چهره های فیشر و هیستوگرام محلی الگو های دودویی ( LBPH ). می توانید مطالعه بیشتری در این موارد در قسمت مستندات OpenCV داشته باشید. در این پروژه ما از الگوریتم LBPH استفاده می کنیم. به این دلیل که ورودی کاربر می تواند بدون نیاز به آموزش مجدد کل سیستم، به روز گردد.

چرا OpenCV بهترین انتخاب برای پروژه ما نیست

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

این دلیلی است که ما پلتفرم شناسایی چهره دیگری را انتخاب کردیم.

شناسایی چهره مرحله به مرحله با KAIROS

بازار، تنوع زیادی از ارائه دهندگان شناسایی چهره برای پاسخگویی به تمام نیازهای شما را دارد. در این میان Kairo بهترین آن ها بوده و ما تصمیم گرفتیم تا این برنامه را بررسی کنیم. ما باید گزینه ای را انتخاب می کردیم: استفاده از Kairos SDK برای برنامه های iOS یا انتخاب Kairos API تا پیاده سازی رویکرد شناسایی چهره توسط خودمان انجام شود. ما Kairos API را برای پروژه انتخاب کردیم، چرا که راه حل بسیار ارزان تری بود.

اصول تشخیص و شناسایی چهره تقریبا با اصول OpenCV یکسان است، بنابراین نیازی به تکرار اصول پایه نیست. در اینجا نحوه کار با Kairos شرح داده شده است.

  1. در طول ثبت نام اولیه اپلیکیشن، برنامه به دوربین دستگاه برای بدست آوردن تصاویر کاربر، دسترسی پیدا می کند. ما به ۹ عکس برای ذخیره کردن در دیتاست نیاز داریم.
  2. تصاویر ثبت شده توسط Kairos، در یک گالری ساخته شده دخیره می شوند. تصویر نیاز به یک شناسه ( برای مثال اسم کاربر ) دارد. همچنین گالری نیز به یک اسم برای تشخیص هویت نیاز دارد. پارامتر های استفاده شده عبارتند از: image: دسترسی عمومی URL، برای آپلود فایل یا عکس، subject_id: ابزاری برای شناسایی چهره، gallery_name: ابزاری برای شناسایی گالری.
  3. شناسایی

کتابخانه از شبکه عصبی برای یادگیری ویژگی های چهره و ایجاد قالب چهره استفاده کرد. هر بار که مجوز لازم باشد ، الگویی از تصویر را با الگو های ذخیره شده مقایسه می کند. این کتابخانه می تواند تشخیص دهد که عکس متعلق به همان شخص موجود در تصاویر ارسالی می باشد یا خیر.

  1. تفسیر نتایج

در مواردی که تصویر ورودی و الگوی ذخیره شده مطابقت دارد ، برنامه شناسه کاربر را نشان می دهد و دسترسی به برنامه را صادر می کند. برنامه نتایج را با دو پارامتر ارائه می دهد: نام و احتمال ( یا سطح اطمینان ) . آستانه تشخیص به طور پیش فرض ۸۰٪ اطمینان است. این به این معنا است که اگر سطح اطمینان زیر ۸۰٪ باشد ، API آن را به عنوان مطابقت نمی داند. به صورت اختیاری ، می توانید این پارامتر را بالاتر یا پایین تر تغییر دهید. با این حال ، آستانه ۸۰٪ مطلوب است ، زیرا اگر آن را بالاتر بگذارید ، خطر رد نادرست ممکن است رخ دهد.

  1. پاسخ به رد صلاحیت

اگر تصویر ورودی با اطلاعات ذخیره شده در مجموعه داده ها مطابقت نداشته باشد، تصویر و متن موجود در برنامه مبهم می گردد.

مشکلات و راه حل ها

مشکل اصلی که ما با آن روبرو می شویم مربوط به تخصیص حافظه است. به دلیل دسترسی مداوم به رم دستگاه برای پردازش تصویر ، دستگاه بیش از حد داغ می شود. راه حل این است که یک کتابخانه OpenGL  که توانایی مدیریت تصاویر و پردازش چند رشته ای را دارد، به آن متصل کنیم متصل شود که به طور مستقیم به CPU دسترسی پیدا می کند.

 ما همچنان باید مشکل شناسایی تصاویر حل کنیم، چرا که زمانی که روشنایی نور خورشید در پشت کاربر باشد، دوربین دستگاه به اصطلاح کور می گردد.

چه چیزی از این پروژه یاد گرفتیم

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

مورد ۱: کتابخانه های منبع باز

شما می توانید یکی از ابزار رایگان را انتخاب کنید. برای مثال کتابخانه  OpenCV اجازه پیاده سازی پروژه شناسایی چهره را به صورت رایگان می دهد. با این حال، به خاطر داشته باشید که OpenCV شناسایی چهره (Face Detection  ) را نسبت به تشخیص چهره (Face Recognition  ) در زمان واقعی بهتر انجام می دهد و شما باید آن را با هدف تشخیص چهره انطباق دهید. تمام چیزی که نیاز دارید یک تیم از توسعه دهندگان با تجربه و زمان کافی است. در این مورد، محصول حاصل می تواند چهره هایی را که به خوبی روشن هستند و پس زمینه ی ساده ای دارند را تشخیص دهد.

مورد ۲: نرم افزار تشخیص چهره

خدمات بیشماری برای ارائه API و SDK تشخیص چهره وجود دارند. ما Kairos’ API را با توجه به هزینه و سادگی انتخاب کردیم. موتور تمام ابزار مورد نیاز برای یادگیری و شناخت را به توسعه دهندگان ارائه می دهد. بنابراین مجبور به جمع آوری تیمی از توسعه دهندگان نخواهید بود. تحت شرایط خاصی، منطقی است که SDK را به جای API انتخاب کنیم. برای مثال، در برنامه شما تشخیص چهره باید به صورت آفلاین باشد یا اگر به سرعت اهمیت می دهید، پس SDK انتخاب بهتری است. خوشبختانه ، بیشتر ارائه دهندگان پلتفرم ، اطلاعات واضحی را در اختیار شما قرار می دهند تا به شما در تصمیم گیری صحیح کمک کنند.

نتیجه گیری

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

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

بیشتر بخوانید :

منبع Smashing Magazine

درباره‌ی احمدرضا جعفری

همچنین ببینید

پروژه پلاک خوان در پایتون

پروژه پلاک خوان در پایتون

صورت مسئله – یک تولید کننده ، در محل کارخانه خود با مشکلات مختلف امنیتی …

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *