PythonProjectPhase1.pdf

‫هب انم خدا‬
‫افز اول رپوژه ردس مبانی ربانهمسازی‬
‫حق‬
‫دمرس‪ :‬رطقی یقت‬
‫رطاح‪ :‬آرین میرفندرسگی‬
‫ی‬
‫موعد تحو ل‪ 31 :‬آرذ ماه‬
‫رتم اپییز ‪59-59‬‬
‫‪1‬‬
‫کلیت پروژه بدین شکل است که باید برنامهای بنویسید که نام یا آدرس یك فایل تصویری با پسوند مشخص‬
‫مانند ‪ BMP‬را از کاربر بپرسد و تعیین کند که آیا در این تصویر‪ ،‬چهرهای وجود دارد یا خیر‪ .‬در صورت مثبت‬
‫بودن جواب‪ ،‬مکان تقریبی چهرهها را تعیین کند‪.‬‬
‫برای این منظور باید از الگوریتمهای تشخیص چهره استفاده کنید‪ .‬یك الگوریتم ساده برای این کار در ادامه‬
‫توضیح داده میشود‪ .‬البته شما میتوانید از هر الگوریتم دیگری نیز استفاده کنید‪ .‬اما برای سادگی‪ ،‬استفاده از این‬
‫الگوریتم پیشنهاد میشود‪ .‬کافی است مراحل توضیح داده شده را قدم به قدم انجام دهید تا شما هم بتوانید یك‬
‫برنامه تشخیص چهره داشته باشید!‬
‫برای انجام پروژه به نکات زیر دقت کنید‪:‬‬
‫‪ -1‬پروژه باید در گروههای یك یا دو نفره انجام شود‪.‬‬
‫‪ -2‬در صورت انجام به شکل گروهی‪ ،‬هر دو نفر باید بر تمامی برنامه مسلط باشند و هر یك تقریبا نیمی از کار را عهده دار بوده‬
‫باشند‪.‬‬
‫‪ -3‬استفاده از کتاب خانههایی که دقیقا مربوط به خواندن فرمت عکسهای مختلف یا خود تشخیص چهره باشند‪ ،‬ممنوع است‪.‬‬
‫مثال ‪import Detect_Faces_in_this_pic_plz‬‬
‫‪ -4‬استفاده از برنامههای دیگر گروهها به هر شکلی ممنوع است‪.‬‬
‫‪ -5‬پروژه بسیار آسان است و با گذاشتن وقت الزم میتوانید نمره خوبی از آن کسب کنید!‬
‫‪ -6‬تمام فایلهای مربوط به پروژه را ‪ zip‬کرده و تا ‪ 13‬آذر ماه در سایت ‪ quera‬با عنوان ‪Std1ID_Std2ID_Phase‬‬
‫بارگذاری کنید‪.‬‬
‫‪2‬‬
‫توضیح فاز اول‬
‫هر فایل ‪ ،BMP‬یك فایل باینری محسوب میشود که اطالعات مربوط به تصویر‪ ،‬به صورت تعدادی عدد صحیح‬
‫در آن قرار دارد‪ .‬کافی است بدانید که هر عدد در فایل باینری ‪ BMP‬به چه معناست‪ .‬الگوی فایلهای ‪ BMP‬را‬
‫میتوانید به راحتی با یك جستجو در اینترنت بیابید‪ .1‬در دنیای کامپیوتر‪ ،‬برای بیان کردن رنگها از چند سیستم‬
‫مختلف استفاده میشود‪ .‬معروفترین آنها سیستم ‪ RGB‬است‪ .‬در این سیستم‪ ،‬رنگ هر نقطه با سه عدد یك‬
‫بایتی (سه عدد از ‪ 0‬تا ‪ )255‬مشخص میشود‪ .‬این سه عدد به ترتیب بیان کننده شدت رنگ قرمز‪ ،‬سبز و آبی در‬
‫تشکیل رنگ نهایی است‪ .‬مثال سه تایی (‪ )150،0،130‬نشانگر رنگی است که در آن اثری از سبز وجود ندارد و‬
‫ترکیبی از قرمز و آبی با نسبت مشخص است که احتماال چیزی شبیه به بنفش خواهد بود‪.‬‬
‫تصاویر سمت چپ‪ ،‬هرکدام به تفکیك‪ ،‬شدت رنگهای قرمز‪ ،‬آبی و سبز را که نهایتا تصویر سمت راست را میسازد‪ ،‬نشان میدهد‪.‬‬
‫‪1‬‬
‫میتوانید از لینك ‪ https://en.wikipedia.org/wiki/BMP_file_format‬استفاده کنید‪.‬‬
‫‪3‬‬
‫استفاده از دو سیستم دیگر بیان رنگها نیز برای انجام پروژه الزامیست‪ .‬یکی نرماالیز شده ‪ RGB‬است‬
‫(‪ Normalized RGB‬یا همان ‪ )rg‬که در این سیستم توجه بیشتر به نسبت ادغام رنگهاست تا شدت هر یك‪.‬‬
‫و دیگری ‪( HSL‬به معنای رنگ‪ ،‬اشباع و روشنایی ‪.)Hue, Saturation & Light‬‬
‫سمت چپ عکسی با سیستم ‪ RGB‬و سمت راست همان عکس در سیستم ‪ rg‬نشان داده شده‪.‬‬
‫چگونگی تبدیل ‪ RGB‬به ‪ rg‬و به ‪ HSL‬در اینترنت به راحتی قابل دسترسی است‪.‬‬
‫‪2‬‬
‫الگوریتم تشخیص چهره بدین ترتیب است که شما باید تمام نقطههای موجود در تصویر را بررسی کنید و‬
‫نقطههایی را که میتوانند تصویر چهره باشند را مشخص کنید‪ .‬این کار در یك فرآیند چند مرحلهای انجام‬
‫میشود و هر بار بر اساس برخی معیارها‪ ،‬شما تعدادی از پیکسلهای زائد را کنار میگذارید تا در نهایت فقط‬
‫نقطههایی باقی بمانند که نشانگر یك چهره هستند‪.‬‬
‫‪2‬‬
‫برای آشنایی با سیستم ‪ rg‬میتوانید از لینك ‪ https://en.wikipedia.org/wiki/Rg_chromaticity‬و برای آشنایی با سیستم ‪ HSL‬و نحوه‬
‫تبدیل این سیستم به سایر سیستمها میتوانید از ‪ https://en.wikipedia.org/wiki/HSL_and_HSV‬استفاده کنید‪.‬‬
‫‪4‬‬
‫مراحل انجام فاز اول پروژه‬
‫‪ -1‬نام‪/‬آدرس فایل ‪ BMP‬را از کاربر بپرسید‪( .‬بخش امتیازی‪ :‬پشتیبانی کردن برنامه از فرمتهای ‪ JPEG‬و‬
‫) ‪PNG.3‬‬
‫‪ -2‬اطالعات مربوطه را از فایل استخراج کنید (با توجه به نحوه ذخیره سازی آنها) تا رنگ تمام نقاط معلوم شود‪.‬‬
‫‪ -3‬رنگ هر نقطه را به سیستم ‪ HSL‬و ‪ rg‬تبدیل کنید‪.‬‬
‫‪ -4‬هر نقطه را بر اساس فرمولهای زیربررسی کنید‪ .‬در صورت نیاز میتوانید فرمولها را دستکاری کنید تا نتیجه‬
‫مطلوب تری بگیرید‪.‬‬
‫‪𝑓1 (𝑟) = −1.376 𝑟 2 + 1.0743 𝑟 + 0.2‬‬
‫‪𝑓2 (𝑟) = −0.776 𝑟 2 + 0.5601 𝑟 + 0.18‬‬
‫‪𝑤 = (𝑟 − 0.33)2 + (𝑔 − 0.33)2‬‬
‫در صورت ‪ 𝑓1 > 𝑔 > 𝑓2‬و 𝑥 > 𝑤 (یافتن مقدار مناسب برای 𝑥 که عددی بین ‪ 0‬و ‪ 0.01‬است‪ ،‬به عهده‬
‫شما است‪ )4‬رنگ نقطه مورد نظر میتواند مربوط به رنگ پوست باشد‪.‬‬
‫‪ -5‬یك تصویر سیاه و سفید رسم کنید که در آن نقطههای نامرتبط همگی به رنگ سیاه باشند و نقطههایی که‬
‫احتماال نشانگر یك چهره هستند به رنگ سفید نمایش داده شود‪.‬‬
‫تا اینجا فاز اول پروژه تمام شده‪ .‬در فاز دوم باید از میان نقاطی که به عنوان رنگ پوست تشخیص دادید‪ ،‬با‬
‫الگوریتمهای گفته شده‪ ،‬نقاط مربوط به یك چهره را شناسایی کنید‪.‬‬
‫‪3‬‬
‫بدین ترتیب که برنامه ی شما باید توانایی استخراج اطالعات از این دو نوع فرمت را نیز داشته باشد‪.‬‬
‫‪4‬‬
‫یعنی با آزمون و خطا بیابید که چه حدی برای ‪ w‬قادر به تفکیك رنگ پوست خواهد بود‪.‬‬
‫‪5‬‬