معرفی
فرآیند تشخیص چهره افراد در مقابل دوربین با گرفتن تصویر و پردازش آن یکی از مفاهیمی است که به طور گسترده برای اتوماسیون استفاده می شود. می توان آن را به روشی بسیار ساده انجام داد. در اینجا، من از برنامه نویسی پایتون برای تشخیص چهره استفاده می کنم. برای استفاده از سیستم برای این مفهوم، باید سیستم خود را با نصب ویژگی های مورد نیاز برای پایتون آماده کنید. من از Python 3.7.3 برای این فرآیند استفاده می کنم. در این مقاله به تشخیص چهره یک فرد مقابل دوربین با گرفتن تصویر از او می پردازیم.
آماده سازی سیستم
قبل از انجام فرآیند، باید سیستم خود را با نصب چند ویژگی اضافی به پایتون برای این منظور آماده کنید. برای نصب بسته ها می توانید کد زیر را در خط فرمان یکی یکی اجرا کنید.
- pip install cmake
- pip install dlib
- pip install face_recognition
- pip install numpy
- pip install opencv-python
اگر در نصب ویژگی dlib خطایی پیدا کردید، می توانید فایل dlib را دانلود کرده و با اجرای کدهای زیر در خط فرمان، آن را نصب کنید.
- cd C:UsersDhanushDownloads
- pip install dlib
شما باید فایل های آبشاری را در همان فهرستی که برنامه پایتون را در آن ذخیره می کنید، نگه دارید.
آموزش سیستم تشخیص چهره
برای اینکه سیستم چهره شما را تشخیص دهد، باید به سیستم آموزش دهید تا تصاویر آنها را تشخیص دهد. برای این کار یک پوشه با نام faces در همان فهرستی که برنامه پایتون را ذخیره میکنید ایجاد کنید و نام تصویر را به نام آن شخص تغییر دهید. نامی که برای تصویر داده شده است، در صورتی که فرد شناسایی شود، روی صفحه نمایش داده می شود. مطمئن شوید که تصاویر حاوی چهره یک فرد مجرد هستند.
![تشخیص چهره ها با گرفتن چهره ها با استفاده از پایتون](http://pezhvak24.ir/dl/codenevis/firstcode/article/regonising-the-faces-by-capturing-the-faces-using-python/Images/01.png)
تشخیص چهره
برای تشخیص چهره یک شخص، از کد پایتون که در زیر برای آن فرآیند ارائه شده است استفاده می کنید. با تغییر آن کد، چهره ها را از تصاویر تشخیص می دهد. برای تشخیص چهره ها باید تصویر را در همان دایرکتوری به نام تست ذخیره کنید و بر اساس پسوند تصویر خود تغییرات را روی کد اعمال کنید.
![تشخیص چهره ها با گرفتن چهره ها با استفاده از پایتون](http://pezhvak24.ir/dl/codenevis/firstcode/article/regonising-the-faces-by-capturing-the-faces-using-python/Images/02.png)
- import face_recognition as fr
- import os
- import cv2
- import face_recognition
- import numpy as np
- from time import sleep
- face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')
- cap=cv2.VideoCapture(0)
- _, img = cap.read()
- def get_encoded_faces():
- """
- looks through the faces folder and encodes all
- the faces
- :return: dict of (name, image encoded)
- """
- encoded = {}
- for dirpath, dnames, fnames in os.walk("./faces"):
- for f in fnames:
- if f.endswith(".jpg") or f.endswith(".png"):
- face = fr.load_image_file("faces/" + f)
- encoding = fr.face_encodings(face)[0]
- encoded[f.split(".")[0]] = encoding
- return encoded
- def unknown_image_encoded(img):
- """
- encode a face given the file name
- """
- face = fr.load_image_file("faces/" + img)
- encoding = fr.face_encodings(face)[0]
- return encoding
- def classify_face(im):
- """
- will find all of the faces in a given image and label
- them if it knows what they are
- :param im: str of file path
- :return: list of face names
- """
- faces = get_encoded_faces()
- faces_encoded = list(faces.values())
- known_face_names = list(faces.keys())
- #img = cv2.imread(im, 1)
- #img = cv2.resize(img, (0, 0), fx=0.5, fy=0.5)
- #img = img[:,:,::-1]
- face_locations = face_recognition.face_locations(img)
- unknown_face_encodings = face_recognition.face_encodings(img, face_locations)
- face_names = []
- for face_encoding in unknown_face_encodings:
- # See if the face is a match for the known face(s)
- matches = face_recognition.compare_faces(faces_encoded, face_encoding)
- name = "Unknown"
- # use the known face with the smallest distance to the new face
- face_distances = face_recognition.face_distance(faces_encoded, face_encoding)
- best_match_index = np.argmin(face_distances)
- if matches[best_match_index]:
- name = known_face_names[best_match_index]
- face_names.append(name)
- for (top, right, bottom, left), name in zip(face_locations, face_names):
- # Draw a box around the face
- cv2.rectangle(img, (left-20, top-20), (right+20, bottom+20), (255, 0, 0), 2)
- # Draw a label with a name below the face
- cv2.rectangle(img, (left-20, bottom –15), (right+20, bottom+20), (255, 0, 0), cv2.FILLED)
- font = cv2.FONT_HERSHEY_DUPLEX
- cv2.putText(img, name, (left –20, bottom + 15), font, 1.0, (255, 255, 255), 2)
- # Display the resulting image
- while True:
- cv2.imshow('IMAGE', img)
- return face_names
- print(classify_face("test"))
تأیید خروجی
در حالی که برنامه را اجرا می کنید، دوربین شما به طور خودکار روشن می شود و از چهره عکس می گیرد. سیستم چهره ای را که گرفته شده است تشخیص می دهد. اگر یک چهره ناشناخته باشد، به صورت ناشناخته نشان داده می شود.
![تشخیص چهره ها با گرفتن چهره ها با استفاده از پایتون](http://pezhvak24.ir/dl/codenevis/firstcode/article/regonising-the-faces-by-capturing-the-faces-using-python/Images/outpput.png)
نتیجه
این مقاله برای گرفتن و تشخیص چهره است. در آینده مقاله تشخیص چهره از فیلم زنده از دوربین را آپلود خواهم کرد. امیدوارم این مقاله به شما کمک کند تا با تشخیص چهره آشنا شوید. شما می توانید فایل های این پروژه را از صفحه Github من با کلیک بر روی اینجا یا از قسمت دانلود دانلود کنید.