در آخر این مقاله ، ما برنامه ای خواهیم نوشت که چهره ها را در یک تصویر شناسایی می دهد.
تشخیص چهره (Face Detection) در مقابل شناسایی چهره (Face Recognizer)
این دو عبارت ممکن است بسیار شبیه به هم باشند اما در واقع یکسان نیستند. بیایید تفاوت آن هارا بررسی کنیم .
تشخیص چهره فرآیند تشخیص دادن چهره هایی ، از یک تصویر یا ویدیویی است که هویت آن ها مهم نیست. این برنامه کاری بیشتر از پیدا کردن چهره ها ندارد. اما از طرف دیگر ، شناسایی چهره ، برنامه ای که چهره ها را پیدا می کند و همچنین می تواندبه ما بگوید که کدام چهره متعلق به چه کسی است. بنابراین اطلاعات بیشتر از تشخیص چهره است.
برای نوشتن کدی که چهره ها را شناسایی کند ، به داده های آموزش نیاز داریم ، باید دستگاه خود را آموزش دهیم تا چهره ها را بشناسد.. در یادگیری ماشینی ، دو نوع یادگیری وجود دارد. نظارت شده و بدون نظارت. در این پروژه ما قصد داریم از یادگیری نظارت شده استفاده کنیم.
شروع
ما از دو ماژول اصلی برای این پروژه استفاده خواهیم کرد ، و به آنها Face Recognition و OpenCV گفته می شود. OpenCV یک کتابخانه بسیار بهینه شده با تمرکز بر برنامه های بلادرنگ (real-time applications) است.
OpenCV (Open Source Computer Vision Library) یک کتابخانه نرم افزار بینایی کامپیوتر و یادگیری ماشین منبع باز است. OpenCV به منظور ایجاد زیرساخت مشترک برای برنامه های بینایی کامپیوتر و تسریع در استفاده از ادراک ماشین در محصولات تجاری ساخته شده است. OpenCV به عنوان یک محصول دارای مجوز BSD ، استفاده و اصلاح کد را برای مشاغل آسان می کند.
کتابخانه ها
در اینجا لیستی از کتابخانه هایی که نصب خواهیم کرد وجود دارد:
face_recognition ، numpy ، opencv-python. Cmake
cmake ،یک کتابخانه پیش نیاز است تا نصب کتابخانه face_recognition خطایی ایجاد نکند.
با استفاده از
PIP می توانیم آنها را در یک خط نصب کنیم:
pip install cmake face_recognition numpy opencv-python
پس از اتمام نصب ، اجازه دهید آنها را به ویرایشگر کد وارد کنیم. برخی از این کتابخانه ها در پایتون گنجانده شده اند ، به همین دلیل می توانیم آنها را بدون نصب وارد کنیم.
import face_recognition
import cv2
import numpy as np
import os
import glob
اکنون به مرحله بعدی می رویم ، جایی که تصاویر را وارد کرده و از آنها برای آموزش برنامه خود استفاده می کنیم.
آموزش تصاویر
در ابتدا ، بیایید تصاویر خود را پیدا کنیم.
وارد کردن تصاویر
تصاویر برخی از افراد مشهور را دانلود کرده و آنها را به پوشه جدیدی به نام “faces” اضافه می کنیم. همچنین برای بدست آوردن دایرکتوری فعلی ، به عبارت دیگر ، محل برنامه شما ، می توانیم از روشی به نام “()getcwd ” استفاده کنیم.
faces_encodings = []
faces_names = []
cur_direc = os.getcwd()
path = os.path.join(cur_direc, 'data/faces/')
list_of_files = [f for f in glob.glob(path+'*.jpg')]
number_files = len(list_of_files)
names = list_of_files.copy()
درک خطوط بالا:
- همه تصاویر در یک پوشه به نام “faces” هستند.
- نام فایل های تصویری باید نام شخصی در تصویر باشد. (مانند: bill-gates.jpg).
- نام فایل ها لیست شده و به متغیر “names” اختصاص داده شده اند.
- نوع فایل ها باید یکسان باشند. در این تمرین ، من از فرمت “jpg” استفاده کردم.
آموزش چهره ها
for i in range(number_files):
globals()['image_{}'.format(i)] = face_recognition.load_image_file(list_of_files[i])
globals()['image_encoding_{}'.format(i)] = face_recognition.face_encodings(globals()['image_{}'.format(i)])[0]
faces_encodings.append(globals()['image_encoding_{}'.format(i)])
# Create array of known names
names[i] = names[i].replace(cur_direc, "")
faces_names.append(names[i])
در اینجا لیست “names” بدین شکل است.
شنسایی چهره
ما در این مرحله یک کد طولانی داریم. که اگر آن را بخوانید به راحتی می توانید در هر خط اتفاقات را بفهمید. بیایید متغیرهای مورد نیاز را تعریف کنیم.
face_locations = []
face_encodings = []
face_names = []
process_this_frame = True
در اینجا کد شناسیایی چهره وجود دارد. (اگر کد زیر را کپی کنید ممکن است لازم باشد فاصله را مجدداً قالب بندی کنید ، توصیه می کنم با دیدن آن، کد را از ابتدا بنویسید و همچنین سعی کنید آن را درک کنید)
video_capture = cv2.VideoCapture(0)
while True:
ret, frame = video_capture.read()
small_frame = cv2.resize(frame, (0, 0), fx=0.25, fy=0.25)
rgb_small_frame = small_frame[:, :, ::-1]
if process_this_frame:
face_locations = face_recognition.face_locations( rgb_small_frame)
face_encodings = face_recognition.face_encodings( rgb_small_frame, face_locations)
face_names = []
for face_encoding in face_encodings:
matches = face_recognition.compare_faces (faces_encodings, face_encoding)
name = "Unknown"
face_distances = face_recognition.face_distance( faces_encodings, face_encoding)
best_match_index = np.argmin(face_distances)
if matches[best_match_index]:
name = faces_names[best_match_index]
face_names.append(name)
process_this_frame = not process_this_frame
# Display the results
for (top, right, bottom, left), name in zip(face_locations, face_names):
top *= 4
right *= 4
bottom *= 4
left *= 4
# Draw a rectangle around the face
cv2.rectangle(frame, (left, top), (right, bottom), (0, 0, 255), 2)
# Input text label with a name below the face
cv2.rectangle(frame, (left, bottom - 35), (right, bottom), (0, 0, 255), cv2.FILLED)
font = cv2.FONT_HERSHEY_DUPLEX
cv2.putText(frame, name, (left + 6, bottom - 6), font, 1.0, (255, 255, 255), 1)
# Display the resulting image
cv2.imshow('Video', frame)
# Hit 'q' on the keyboard to quit!
if cv2.waitKey(1) & 0xFF == ord('q'):
break
تبریک !! شما برنامه ای ایجاد کرده اید که چهره ها را در تصویر تشخیص و شناسایی می کند. اکنون ، شما ایده ای در مورد چگونگی استفاده از بینایی کامپیوتر در یک پروژه واقعی دارید.
قسمت کدها چپ چین بود خوانایی بهتری داشت
با تشکر از تذکر شما. اصلاح شد
سلام وقتتون بخیر
موقع نصب ماژول face_recognition اروری بهم میده که نمیدونم از توو cmd و pycharm و vscode هم همینه
——————————————————————————————————————————————————————————-
Running setup.py install for dlib … error
ERROR: Command errored out with exit status 1:
command: ‘C:\Users\Khane Digital\AppData\Local\Microsoft\WindowsApps\PythonSoftwareFoundation.Python.3.7_qbz5n2kfra8p0\python.exe’ -u -c ‘import io, os, sys, setuptools, tokenize; sys.argv[0] = ‘”‘”‘C:\\Users\\KHANED~1\\AppData\\Local\\Temp\\pip-install-t3qcs5rv\\dlib_454ea2cde3894f06b2c5ab5f7a878515\\setup.py'”‘”‘; __file__='”‘”‘C:\\Users\\KHANED~1\\AppData\\Local\\Temp\\pip-install-t3qcs5rv\\dlib_454ea2cde3894f06b2c5ab5f7a878515\\setup.py'”‘”‘;f = getattr(tokenize, ‘”‘”‘open'”‘”‘, open)(__file__) if os.path.exists(__file__) else io.StringIO(‘”‘”‘from
setuptools import setup; setup()'”‘”‘);code = f.read().replace(‘”‘”‘\r\n'”‘”‘, ‘”‘”‘\n'”‘”‘);f.close();exec(compile(code, __file__, ‘”‘”‘exec'”‘”‘))’ install –record ‘C:\Users\KHANED~1\AppData\Local\Temp\pip-record-2jpsr9bx\install-record.txt’ –single-version-externally-managed –user –prefix= –compile –install-headers ‘C:\Users\Khane Digital\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.7_qbz5n2kfra8p0\LocalCache\local-packages\Python37\Include\dlib’
cwd: C:\Users\KHANED~1\AppData\Local\Temp\pip-install-t3qcs5rv\dlib_454ea2cde3894f06b2c5ab5f7a878515\
Complete output (8 lines):
running install
running build
running build_py
package init file ‘tools\python\dlib\__init__.py’ not found (or not a regular file)
running build_ext
ERROR: CMake must be installed to build dlib
—————————————-
ERROR: Command errored out with exit status 1: ‘C:\Users\Khane Digital\AppData\Local\Microsoft\WindowsApps\PythonSoftwareFoundation.Python.3.7_qbz5n2kfra8p0\python.exe’ -u -c ‘import io, os, sys, setuptools, tokenize; sys.argv[0] = ‘”‘”‘C:\\Users\\KHANED~1\\AppData\\Local\\Temp\\pip-install-t3qcs5rv\\dlib_454ea2cde3894f06b2c5ab5f7a878515\\setup.py'”‘”‘; __file__='”‘”‘C:\\Users\\KHANED~1\\AppData\\Local\\Temp\\pip-install-t3qcs5rv\\dlib_454ea2cde3894f06b2c5ab5f7a878515\\setup.py'”‘”‘;f = getattr(tokenize, ‘”‘”‘open'”‘”‘, open)(__file__) if os.path.exists(__file__) else io.StringIO(‘”‘”‘from setuptools import setup; setup()'”‘”‘);code = f.read().replace(‘”‘”‘\r\n'”‘”‘, ‘”‘”‘\n'”‘”‘);f.close();exec(compile(code, __file__, ‘”‘”‘exec'”‘”‘))’ install –record ‘C:\Users\KHANED~1\AppData\Local\Temp\pip-record-2jpsr9bx\install-record.txt’ –single-version-externally-managed –user –prefix= –compile –install-headers ‘C:\Users\Khane Digital\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.7_qbz5n2kfra8p0\LocalCache\local-packages\Python37\Include\dlib’ Check the logs for full command output.
سلام ببخشید منظور از [:, :, ::-۱] اینا چیه ؟
سلام ببخشید منظور از [:, :, ::-۱] و… چیه ؟
سلام وقت بخیر این کدها باید در کدام برنامه نوشته شود؟
سلام این کدهارو داخل anaconda و ژوپیتر باید نوشت؟ و اینکه چگونه باید خروجی و اجرا گرفت؟