شرح مكتبة face recognition للتعرف على الوجه من الكاميرا والصور بلغة البايثون
اصبح من السهل التعامل مع الاوجه في الصور بلغة Python وذلك بسبب كثرة المكتبات التي تسهل علينا الامر ومن ضمن هذة المكتبات هي (Face Recognition Library). تمت عملية بناء وتطوير هذهِ المكتبة بأستخدام تقنية التعرف على الوجوه المتقدمة من dlib المبنية بتقنية ( Deep Learning ) وتمتلك هذة المكتبة دقة 99.38% “حسب المصدر المختص في نشرها” في التعرف على الوجوه وتحديده.
تعد لغه البايثون لغه المستقبل كما يقول عنها البعض لانها اكثر لغه عليها طلب في سوق العمل ولها اكثر من سنه تحتل المرتبه الاولى في التعلم وفي الطلب في سوق العمل هل تساءلت لماذا تعد لغه البايثون من اهم اللغات والجافا لا تعد من اهمها رغم انها تدخل في تطوير تطبيقات الاجهزة الذكية ؟ في طبيعه الحال لانه لغه البايثون تتميز بوجود مكتبات كثيره جدا تسهل المطورين انجاز الاعمال بشكل اسرع ايضا تدخل في عمليه الذكاء الاصطناعي وهذه العمليه اصبحت مطلوبه بشكل كبير في الاونه الاخيره , لغه بايثون يجب عليك تعلمها والبدء فيها ولكن لن تتمكن من ان تكون محترف بي البايثون دون تعلمك oop وذلك لعده اسباب.
الاسباب التي تجعلك متمكن من لغه بايثون اولا انك لن تكون قادر على تعلم oop وهي اختصار لكلمة (Object-oriented programming - OOP) وتعني برمجة الكائنات او البرمجة الشيئية بشكل جيد فهذه العمليه تحتاج منك الى تعلم لغه قويه مثل جوفت او سي بلس بلس او سي او غيرها من اللغات لان مرحله OOP او البرمجه الشيئيه في البايثون بسيطه جدا و قد تجعلك غير قادر على فهمها بصوره واضحه ولذلك اي شخص يتعلم Object-oriented programming - OOP يتجه الى اي لغه صعبه اخرى في البدايه لكي تتمكن من فهمها و بعدها يمكن الانتقال مره اخرى الى python , حيث ان اللغات القوية اذا فهمتها بشكل جيد تستطيع تعلم اي من اللغات الحديثه التي ظهرت في الاونه الاخيره بسهوله لان الامر سيساعدك في ان تستطيع استيعاب المعلومات التي سوف تاخذها .
كيفية تحميل تثبيت مكتبة face recognition في بايثون
اولا يجب عليك تحميل اصدار قديم للبايثون مثل 3.6 لان المكتبة لا تعمل حاليا مع الاصدار 3.9 وذلك من خلال الرابط التالي pypi.python.org وبعدها قم بتحديد نظام التشغيل الخاص بك وانقر عليه ليتم التحميل كما هو موضح بالصورة
الان بعد التحميل قم بتثبيت البايثون الجديد والذي هو python 3.6 بشكل طبيعي جدا مع تعليم على اشارة add python 3.6 to path لكي يتم اضافة الpath في pc دون اضافته بشكل يدوي ويجب التركيز في عمل هذة الخطوه لانها مهمه .
بعد الانتهاء من التثبيت تريد التاكد هل تمت العملية بنجاح ام هل حدث مشاكل اثناء عملية التثبيت لذلك افتح cmd واكتب كلمة python ليظهر لك الاصدار الاخير الذي قمت بتثبيته على جهازك وفي طبيعة الحال هو 3.6 .
الان قم بتثبيت المكتبة الخاص بال face-recognition من خلال cmd وكتابة الامر التاكد ليتم تثبيتها في جهازك وتستطيع استخدامها بعد ذلك .
اولا اكتب الامر التالي لعدم حدوث مشاكل في تثبيت المكتبة
python -m pip install https://pypi.python.org/packages/da/06/bd3e241c4eb0a662914b3b4875fc52dd176a9db0d4a2c915ac2ad8800e9e/dlib-19.7.0-cp36-cp36m-win_amd64.whl
اكتب الامر التالي لتثبيت المكتبة على جهازك
python -m pip install face-recognition --user
تاكد من استعمال python 3.6 اثناء استخدام VScode لانه اذا عملت على النسخه python 3.9 لن تعمل معك المكتبة .
نبذة عن مكتبة التعرف على الوجوه face_recognition
face_recognition هي واحده من المكتبات مفتوحة المصدر للتعرف على الوجوه للغة Python بدقة عالية ، وهي مكتبة سهله الاستخدام وتتعرف على الوجه بشكل تلقائي دون تدخل من المستخدم وتدعم عدد من اصدارات البايثون python 3.6 وما قبلها .
كيفية معرفة هل يوجد تشابية بين الاوجه في الصور ام لا ببايثون
اول كود في face_recognition سوف نقوم بوضع صورتين لنفس الشخص ( تاكد انه لا يوجد اكثر من شخص في الصور ) ونريد معرفة هل هذا الشخص الموجود في الصورة الاولى هو نفس الشخص الموجود في الصورة الثانية ام لا ؟ اذا كانت الاجابة نعم سيرجه لنا true واذا كانت لا سيرجع لنا false , اولا تحتاج لقراءة الصوره ثم عمل لها encodeing لتحليلها وبعدها [0] للحصول على اول index وبعدها سوف تضع الصورة تريد المقارنه بها في [] والاخره بجانبها بعد , ولا تنسى استخدام الامر compare_faces .
import face_recognition
known_image = face_recognition.load_image_file("my_image.jpg")
biden_encoding = face_recognition.face_encodings(known_image)[0]
unknown_image = face_recognition.load_image_file("my2.jpg")
unknown_encoding = face_recognition.face_encodings(unknown_image)[0]
results = face_recognition.compare_faces([biden_encoding], unknown_encoding)
print(results)
مقارنة اكثر من صورة ومعرفة هل الشخص موجوده في الصوره ام لا face_recognition
هذا الكود نفس الكود السابق ولكن سوف نكبر الكود قليلا وذلك عن طريق اننا سوف نضع اكثر من صورة للكود ونضعهم كلهم في array ونضع الصورة التي نريد المقارنه بها خارج الlist لكي يتم مقارنة اول صورة مع الصورة الخارجية وثاني صورة مع الخارجية وهكذا والنتيجة تظهر في صورة True او false اذا كان الشخص نفسه الموجود في الصورة يظهر نعم واذا لم يظهر تكون النتيجة خطأ كما موضح .
import face_recognitionknown_image = face_recognition.load_image_file("my_image.jpg")biden_encoding = face_recognition.face_encodings(known_image)[0]known_image = face_recognition.load_image_file("my.png")biden_encoding_1 = face_recognition.face_encodings(known_image)[0]known_image = face_recognition.load_image_file("image_test.jpg")biden_encoding_2 = face_recognition.face_encodings(known_image)[0]# --------unknown_image = face_recognition.load_image_file("my2.jpg") # base imageunknown_encoding = face_recognition.face_encodings(unknown_image)[0]results = face_recognition.compare_faces([biden_encoding , biden_encoding_1 , biden_encoding_2], unknown_encoding) # base image without arrayprint(results)
سكريبت بايثون لمعرفة اسم الشخص من صورته face recognition
نحتاج هنا الى استخدام مكتبة PIL ليتم من خلالها معالجة الصورة وعرضها , وطبيعي سوف ندخل الصور الى الكود عن طريقة كتابة مسار الصورة واسمها مثلا كانت الصورة في ملف المشروع الخاص بالكود وبداخلة ملف باسم known وبداخله الصورة لذلك نكتب الملف وبداخلة اسم الصورة , بعد الانتهاء من ادخالهم سوف يتم بعد ذلك جعلهم في array وبعدها نقوم بعمل array اخرى بالاسماء ونضع بها الاسماء لاول صورة اسم احمد محمود وثاني صورة كانت لـ ايلون ماسك بعد ذلك طلبنا من المستخدم ادخال اسم الصورة التي يريد معرفة اسم صاحبها وسوف ناخذ الاسم من المستخدم وننتقل الى مجلد اخر موجود في ملف المشروع باسم un_known ونبحث عن الصورة ( يفضل ان تكون الاسماء ارقام على سبيل المثال ) .
بعد ذلك ناخذ الصورة ونبحث عن موقع الوجه وبعدها نقوم بتحويل الصورة والوجة الى encodeing لكي تستطيع مقارنتها بالصورة المعرفه التي قمنا بإدراجهم في الاعلى بعدها ناخذ ابعاد الصورة فوق واسفل ويمين ويسار الموجوده في face encoding بعدها نقارنها بالصور السابقه لنا والتي قمنا بوضعها في array باسم known_face واذا لم يجدها فيطبع كلمة unknown واذا وجدها يطبع الاسم الخاص بصاحب الصورة من الاسماء الموجوده بالاعلى , يتم فتح الصورة ويقوم بتحديد مربع حول الوجه وطباعة الاسم اسفله .
import face_recognition
from PIL import Image, ImageDraw
import numpy as np
barakat_image = face_recognition.load_image_file("./known/my_image.jpg") # image know
barakat_face_encoding = face_recognition.face_encodings(barakat_image)[0]
z3ama_image = face_recognition.load_image_file("./known/7.jpg") # image know
z3ama_face_encoding = face_recognition.face_encodings(z3ama_image)[0]
known_face_encodings = [barakat_face_encoding, # list of image encodings
z3ama_face_encoding]
known_faces_names = ["ahmed mahmoud ", "elon mask"] # list name of image encodings
image = input("please enter image number : ") # chose image from file un_known
unknown_image = face_recognition.load_image_file(f'./un_known/{image}.jpg')
face_locations = face_recognition.face_locations(unknown_image)
face_encodings = face_recognition.face_encodings(unknown_image, face_locations)
pil_image = Image.fromarray(unknown_image)
draw = ImageDraw.Draw(pil_image)
for (top, right, bottom, left), face_encoding in zip(face_locations, face_encodings):
matches = face_recognition.compare_faces(
known_face_encodings, face_encoding)
name = "unknown"
face_distance = face_recognition.face_distance(
known_face_encodings, face_encoding)
best_match_index = np.argmin(face_distance)
if matches[best_match_index]:
name = known_faces_names[best_match_index]
draw.rectangle(((left, top), (right, bottom)), outline=(0, 0, 255))
text_width, text_height = draw.textsize(name)
draw.rectangle(((left, bottom - text_height - 10),
(right, bottom)), fill=(0, 0, 255), outline=(0, 0, 255))
draw.text((left + 6, bottom - text_height - 5),
name, fill=(255, 255, 255, 255))
del draw
pil_image.show()
كيفية تتبع كاميرا الجهاز ومعرفة اسماء الاشخاص بمكتبة opencv و face_recognition بايثون
في هذا الكود سوف نقوم بعمل اكثر من array للاوجه وللاسماء ولموقع الصورة بعدها نقوم بفتح المجلد الذي باسم registered والذي بداخلة مجموعة من الملفات وكل ملف باسم شخص وبداخلة صور للشخص بعدها ندخل في for وهنا يقوم بالمرور الى المجلد الذي قمنا بكتابة اسمه ومن ثم الانتقال الى جميع الصور الموجوده في الملفات ويبحث عن امتداد jpg للصور واذا حصل عليه يجلب اسم الملف والصورة الموجوده بداخلة بعدها نحصل على الincoding الخاص بالصور ونقوم بتخزينة في array وبعدها نبدء في اخذ الصورة من كاميرا الجهاز واذا وجدنا صورة المستخدم نفس الموجوده في احد الملفات نكتب اسم الملف والذي هو اسم الشخص اسفل صورته في webcam واذا لم يكن موجود نكتب unknow . وضعنا شرط بسيط وهو عندما يتم النقر على حرف q يتم غلق الصورة بشكل كامل من على الجهاز .
import cv2
import face_recognition
import os
import glob
known_faces = []
known_names = []
known_faces_paths = []
registered_faces_path = 'registered/'
for name in os.listdir(registered_faces_path):
images_mask = '%s%s/*.jpg' % (registered_faces_path, name)
images_paths = glob.glob(images_mask)
known_faces_paths += images_paths
known_names += [name for x in images_paths]
def get_encodings(img_path):
image = face_recognition.load_image_file(img_path)
encoding = face_recognition.face_encodings(image)[0]
return encoding
known_faces = [get_encodings(img_path) for img_path in known_faces_paths]
vc = cv2.VideoCapture(0)
while True:
ret, frame = vc.read()
if not ret:
break
frame_rgb = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB) # convert
faces = face_recognition.face_locations(frame_rgb) # Detect
# top, right, bottom, left
for face in faces:
top, right, bottom, left = face
cv2.rectangle(frame, (left, top), (right, bottom),(0,0,255), 2)
encoding = face_recognition.face_encodings(frame_rgb, [face])[0]
results = face_recognition.compare_faces(known_faces, encoding, tolerance=0.6)
if any(results):
name = known_names[results.index(True)]
else:
name = 'unknown'
cv2.putText(frame, name, (left, bottom + 20), cv2.FONT_HERSHEY_PLAIN, 2, (0,0,255), 2)
cv2.imshow('winnie', frame)
k = cv2.waitKey(1)
if ord('q') == k:
break
cv2.destroyAllWindows()
vc.release()
مقالة اليوم من امتع المقالات التي سوف تعجبك لانها تعد مدخل في تعليم الالة وهذا المجال من اكثر المجالات طلبا في الدولل الغربيه لاهميته وسوف نحاول شرحه لكم بإذن الله تعالى في المقالات المقدمه في الايام المقبلة بإذن الله ولمزيد من المقالات يمكنك مشاهدة المقالات السابقة
رابط الصور والملحقات المستخدمه في الشرح