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

پیش گفتار

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

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

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


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

اگر هیچ دانشی از هوش مصنوعی و برنامه نویسی ندارید، پیشنهاد میشه ابتدا مقالات زیر را بخونید:

«هوش مصنوعی به زبان خیلی ساده - قسمت اول»

«هوش مصنوعی به زبان خیلی ساده - قسمت دوم»


شناسایی چهره

اگر بخوایم سریع بریم سر اصل مطلب، گام های اصلی در سیستم های شناسایی چهره به صورت زیر هستند:

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


گام اول: تشخیص چهره

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

Face Detection
Face Detection


گام دوم: همتراز کردن چهره

در این گام تصویر چهره پیدا شده رو به صورت زیر همتراز می کنیم.

Face Alignment
Face Alignment


گام سوم: استخراج ویژگی

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


گام چهارم: مقایسه ویژگی های چهره با پایگاه داده

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


گام پنجم: نتیجه شناسایی چهره

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


مراحل شناسایی چهره (گام های یکم تا پنجم) در یک تصویر

برای تمام چهره های تشخیص داده شده این مراحل رو طی می کنیم
برای تمام چهره های تشخیص داده شده این مراحل رو طی می کنیم



آزمایش سرویس تشخیص و شناسایی چهره در سایت Hibrainy

ابتدا فیلتر شکن رو فعال کنید. در قسمت تکنولوژی سایت Hibrainy وارد سرویس Face Recognition بشید. در این قسمت شما میتونید هم سرویس تشخیص چهره (Face Detection) که جنسیت و سن تون رو تشخیص میده و همچنین شناسایی چهره (Face Verification) رو آزمایش کنید.

سرویس تشخیص چهره

Face Detection
Face Detection


سرویس شناسایی چهره: بررسی اینکه چهره های موجود در دو عکس متعلق به یک نفر هستند یا نه

Face Verification
Face Verification



استفاده از API سایت Hibrainy

وقتی که در سایت Hibrainy ثبت نام کردید و وارد حساب کابری تون شدید. اگر در منو سمت چپ، قسمت Products بر روی Face کلیک کنید. میتونید به داکیومنت استفاده از API سایت به زبان C# نگاهی بیندازید. منتهی از اونجایی که زبان مورد علاقه من Python هست و البته ساده تر به نظر میرسه، قرار با استفاده زبان Python از API این سایت استفاده کنیم.

کافیه با استفاده از pip یا هر روش دیگری ماژول requests رو نصب کنید.

pip install requests


سرویس تشخیص چهره

import requests

API_ENDPOINT = "http://api.hibrainy.com/api/v1/Face/FaceAllFeatures"
API_KEY = "Your Api Key"
image = '1.jpg'    # path to image
files = {'Photo': (image, open(image, 'rb'), "multipart/form-data")}
header = {'API-Key': API_KEY}
response = requests.post(API_ENDPOINT, files=files, headers=header)
for i in range(0, len(response.json())):
    print('Gender:', response.json()[i]['Gender'])
    print('Age:', response.json()[i]['Age'])
    print('FaceBox:', response.json()[i]['Rectangle'])
    # other Features

This program in GitHub

به خاطر داشته باشید که، مقدار متغیر image برابر است با مسیر عکس و مقدار متغیر API_KEY توی سایت در قسمت داشبورد در قسمت Tokens هست.



سرویس شناسایی چهره: بررسی اینکه چهره های موجود در دو عکس متعلق به یک نفر هستند یا نه

import requests

API_ENDPOINT = "http://api.hibrainy.com/api/v1/Face/FaceVerification"
API_KEY = "Your Api Key"
image1 = '1.jpg'    # path to image1
image2 = '2.jpg'    # path to image2
files = {'Photo1': (image1, open(image1, 'rb'), "multipart/form-data"), 'Photo2': (image2, open(image2, 'rb'), "multipart/form-data")}
header = {'API-Key': API_KEY}
response = requests.post(API_ENDPOINT, files=files, headers=header)
print('ResultMessage:', response.json()['ResultMessage'])

This program in GitHub



امیدوارم موضوعاتی که مطرح کردم براتون جالب بوده باشه. و بهم در اصلاح کاستی ها در نظرات کمک کنید.

آخرین ویرایش: 21 / 8 / 98