تشخیص چهره با پایتون
امروزه خیلی از کار های روزمره ما توسط پردازش های کامپیوتری انجام میشه مثلا اگر بخوایم از دیجیکالا خریدی انجام بدیم ، پردازش هایی انجام میشه که ما بتونیم به کالای مورد نظر خودمون برسیم و اطلاعات ما به سرور ارسال بشه.
پس در کل پردازش های کامپیوتری از مهم ترین چیزهایی است که ما اکثرا با آن هیچ توجه ای نمی کنیم و کار اصلی توسط آن ها صورت میگیرد.
?یکی از این پردازش ها، بینایی ماشین هست ، خب همانطور که گفتیم پردازش های کامپیوتری نقش مهمی در زندگی ما دارند و کار هایی که برای انسان سخت هست را به راحتی انجام می دهند. پس بعضی وقت ها لازم هست چیزی را ببینند و انجام دهند همانطور که ما انسان های می بینم.
?بینایی ماشین امروزه بسیار مورد استفاده قرار میگیرد برای مثال : باز شدن گوشی با تشخیص چهره
خب قطعا برای همچین تکنولوژی هایی نیاز به الگوریتم و برنامه نویسی هست و اینجاست که پایتون وارد کار میشه ....
ما می تونیم با کتابخانه face_recognition و cv2(همون opencv) تشخیص چهره رو انجام بدیم.
?توجه داشته باشید در پروژه به حروف کوچک و بزرگ دقت کنید ....
?حتما باید به زبان برنامه نویسی پایتون مسلط باشید...
نصب opencv:
pip install opencv-python
نصب face_recognition:
برای نصب کردن این کتابخونه نیاز هست تا CMake رو داشته باشید برای اینکار کافیه لانچر ویژوال استدیو رو نصب کنید و برید داخل اینستالر و طبق مراحل زیر پیش برید :
خب 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 پردازش بشه)
img = 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 به صورت یک لیست در میاد و ما فقط آیتم اولشو می خوایم(کلا یک آیتمه)
همانطور که می بینید 4 عدد بهمون داده که به این صورت هستش :
y1,x2,y2,x1
شاید چینش این 4 تا یکم عجیب باشه ولی خب مشکلی برامون به وجود نمیاره حالا شاید با خودتون بگین اینا چی هستن !!
خب همونطور که در تصاویر مختلف دیدید معمولا در تشخیص چهره دوره صورت یک آدم یک مربع میاد این مربعه همینه که این بالا می بینید و ما برای ترسیمش نیاز به 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("image",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("image",img)
cv2.waitKey()
?فقط باید در خط 4 عکس خودتونو قرار بدین...
اگر مشکلی در این مطلب بود حتما بگین تا اصلاح بشه
مطلبی دیگر در همین موضوع
ترند امسال زبانهای برنامه نویسی
مطلبی دیگر در همین موضوع
کتابخانه Persian Tools
بر اساس علایق شما
برای اشکهای ماهی که در آب گم میشوند