تشخیص چهره با پایتون

امروزه خیلی از کار های روزمره ما توسط پردازش های کامپیوتری انجام میشه مثلا اگر بخوایم از دیجیکالا خریدی انجام بدیم ، پردازش هایی انجام میشه که ما بتونیم به کالای مورد نظر خودمون برسیم و اطلاعات ما به سرور ارسال بشه.پس در کل پردازش های کامپیوتری از مهم ترین چیزهایی است که ما اکثرا با آن هیچ توجه ای نمی کنیم و کار اصلی توسط آن ها صورت میگیرد.?یکی از این پردازش ها، بینایی ماشین هست ، خب همانطور که گفتیم پردازش های کامپیوتری نقش مهمی در زندگی ما دارند و کار هایی که برای انسان سخت هست را به راحتی انجام می دهند. پس بعضی وقت ها لازم هست چیزی را ببینند و انجام دهند همانطور که ما انسان های می بینم.?بینایی ماشین امروزه بسیار مورد استفاده قرار میگیرد برای مثال : باز شدن گوشی با تشخیص چهرهخب قطعا برای همچین تکنولوژی هایی نیاز به الگوریتم و برنامه نویسی هست و اینجاست که پایتون وارد کار میشه ....ما می تونیم با کتابخانه face_recognition و cv2(همون opencv) تشخیص چهره رو انجام بدیم.?توجه داشته باشید در پروژه به حروف کوچک و بزرگ دقت کنید ....?حتما باید به زبان برنامه نویسی پایتون مسلط باشید...نصب opencv: pip install opencv-pythonنصب face_recognition:برای نصب کردن این کتابخونه نیاز هست تا CMake رو داشته باشید برای اینکار کافیه لانچر ویژوال استدیو رو نصب کنید و برید داخل اینستالر و طبق مراحل زیر پیش برید :نرم افزار ویژوال استدیو رو نصب کنیدروی Modify بزنیدتیک بخش ++C رو بزنید و بعدش روی Modify خب Cmake نصب شد.حالا وقتشه face_recognition رو نصب کنید.❗توجه❗:?من خودم dlib(یک کتابخونه پایتون) و face_recognition رو جدا نصب کردم ولی فکر کنم اگر کتابخونه face_recognition رو نصب کنید به طور خودکار dlib هم نصب بشه ولی بنظر من جدا نصب کنید تا باهم جلو بریم.?توجه داشته باشید اگر CMake نصب نشه dlib هم نصب نمیشه.نصب face_recognition :pip install face_recognitionنصب dlib :pip install dlibخب کتابخونه ها نصب شد حالا وقتشه بریم سراغ برنامه نویسی :من در اینجا از نرم افزار پایچارم استفاده می کنم و پیشنهاد می کنم که شما هم از پایچارم استفاده کنید.خب اول کتابخانه ها رو import می کنیم.وارد کردن کتابخانه های مورد نیازimport face_recognition import cv2خب حالا در مرحله بعد باید عکسمونو لود کنیم.لود کردن عکسimg = face_recognition.load_image_file('image.jfif')من اینجا از 'image/bill gates.jfif' استفاده کردم یعنی بهش گفتم برو داخل پوشه image عکس بیل گیتس رو لود کن اگر عکستون داخل پوشه فایلتون هست کافیه فقط اسم فایل رو بنویسن در غیر این صورت اسم پوشه رو بنویسید و بعدش اسم فایل رو بنویسید.حالا باید عکسمونو از BGR تبدیل کنیم به RGB (عکس رو که وارد می کنیم به صورت پیشفرض BGR هستش ولی باید به صورت RGB پردازش بشه)BGR2RGBimg = cv2.cvtColor(img,cv2.COLOR_BGR2RGB)خب ما در اینجا از کتابخانه opencv استفاده کردیم (cv2) و با کمک cvtcolor در مرحله اول عکس مورد نظر (همون img که لود کردیم منتها این دوباره اونو میریزیم تو img) را مشخص می کنیم و بعد باimg,cv2.COLOR_BGR2RGB عملیات مورد نظر رو انجام میدیم.نمای کلی از پروژهimport face_recognition import cv2 img = face_recognition.load_image_file('image/bill gates.jfif') img = cv2.cvtColor(img,cv2.COLOR_BGR2RGB)خب در اینجا باید بدونیم که این تشخیص چهره چه کاری انجام میده :1️⃣اطلاعاتی رو از عکس میگیره2️⃣ اونو با دیتابیسی که از قبل درست شده تطبیق میده3️⃣ مختصات چره شناسایی شده رو به ما میده.خب حالا ما باید این مختصات رو بگیرم شاید در نگاه اول سخت بنظر بیاد ولی فقط یک خط کده!گرفتن مختصات چهرهimgLoc = face_recognition.face_locations(img)[0] print(imgLoc)خب ما در اینجا مختصات چهره رو گرفتیم حالا من واستون چاپش می کنم که بدونید به چه صورته:? اون [0] برای اینه که imgloc به صورت یک لیست در میاد و ما فقط آیتم اولشو می خوایم(کلا یک آیتمه)imgLocهمانطور که می بینید 4 عدد بهمون داده که به این صورت هستش :y1,x2,y2,x1شاید چینش این 4 تا یکم عجیب باشه ولی خب مشکلی برامون به وجود نمیاره حالا شاید با خودتون بگین اینا چی هستن !!روش ترسیم یک مستطیل در opencvخب همونطور که در تصاویر مختلف دیدید معمولا در تشخیص چهره دوره صورت یک آدم یک مربع میاد این مربعه همینه که این بالا می بینید و ما برای ترسیمش نیاز به 2 نقطه داریم که این 2 نقطه هر کدوم مختصات مربوط به خودشو داره ولی خب لازم نیست نگران باشید چون فقط با کد زیر می تونید اون مربع رو دور صورت طرف ایجاد کنید.;کشیدن مستطیل به دور چهرهcv2.rectangle(img,(imgLoc[3],imgLoc[0]),(imgLoc[1],imgLoc[2]),(255,0,0),3) خب اومدیم از cv2.rectangle استفاده کردیم و بعدش عکسی که می خوایم داخلش مستطیله کشیده بشه رو مشخص می کنیم حالا اگر دقت کنید از ما دو نقطه خواسته شده که ما اونا رو داخل () نوشتیم و برای هر نقطه یک x و y مشخص کردیم.در مرحله بعد یک کد رنگ به مستطیل دادیم (255,0,0) که مربوط به رنگ آبی هستش در مرحله بعد ضخامت اون مستطیل رو مشخص کردیم که من 3 رو گذاشتم?بین هر بخش باید یک , گذاشته بشه.حال وقت آن رسیده که عکس رو نمایش بدیم که با 2 خط کد اینکار امکان پذیر هستش :نمایش دادن عکسcv2.imshow(&quotimage&quot,img) cv2.waitKey()با استفاده از imshow در کتابخانه cv2 در بخش اول اسم پنجره و در بخش بعد عکی که می خوایم نمایش داده بشه رو قرار میدیم.?اگر می خواید چند عکس نشون داده بشه اسم پنجره ها رو متفاوت بزاریماگر من بدون waitkey پروژه رو ران کنم سریع بسته میشه چون به هر حال نشون داده که شده ?پس waitkey رو میزارم که منتظر کلیک من وایسته و داخلشم خالی میزارم.خب خروجیی که همیشه منتظرش بدیم رو ببینیم:نتیجه نهاییمی تونیم حتی عکس رو عوض کنیم فقط کافیه تو خط 4 ام که در بالا می بینید آدرس یک عکس دیگه رو بدیم برای مثال :نتیجه نهایی برای یک عکس دیگهخب من کد رو این زیر قرار میدم :import face_recognition import cv2 img = face_recognition.load_image_file('image/bill gates test.jfif') img = cv2.cvtColor(img,cv2.COLOR_BGR2RGB) imgLoc = face_recognition.face_locations(img)[0] print(imgLoc) cv2.rectangle(img,(imgLoc[3],imgLoc[0]),(imgLoc[1],imgLoc[2]),(255,0,0),3) cv2.imshow(&quotimage&quot,img) cv2.waitKey()?فقط باید در خط 4 عکس خودتونو قرار بدین...اگر مشکلی در این مطلب بود حتما بگین تا اصلاح بشه