شرح مكتبة face recognition للتعرف على الوجه من الكاميرا والصور بلغة البايثون

شرح مكتبة face recognition للتعرف على الوجه من الكاميرا والصور بلغة البايثون

شرح مكتبة 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 وبعدها قم بتحديد نظام التشغيل الخاص بك وانقر عليه ليتم التحميل كما هو موضح بالصورة


كيفية تحميل تثبيت مكتبة face recognition في بايثون

الان بعد التحميل قم بتثبيت البايثون الجديد والذي هو python 3.6 بشكل طبيعي جدا مع تعليم على اشارة add python 3.6 to path لكي يتم اضافة الpath في pc دون اضافته بشكل يدوي ويجب التركيز في عمل هذة الخطوه لانها مهمه .


كيفية تحميل تثبيت مكتبة face recognition في بايثون

بعد الانتهاء من التثبيت تريد التاكد هل تمت العملية بنجاح ام هل حدث مشاكل اثناء عملية التثبيت لذلك افتح cmd واكتب كلمة python ليظهر لك الاصدار الاخير الذي قمت بتثبيته على جهازك وفي طبيعة الحال هو 3.6 .


كيفية تحميل تثبيت مكتبة face recognition في بايثون

الان قم بتثبيت المكتبة الخاص بال 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


كيفية تحميل تثبيت مكتبة face recognition في بايثون


تاكد من استعمال python 3.6 اثناء استخدام VScode لانه اذا عملت على النسخه python 3.9 لن تعمل معك المكتبة .


كيفية تحميل تثبيت مكتبة face recognition في بايثون

نبذة عن مكتبة التعرف على الوجوه 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

مقارنة اكثر من صورة ومعرفة هل الشخص موجوده في الصوره ام لا face_recognition

هذا الكود نفس الكود السابق ولكن سوف نكبر الكود قليلا وذلك عن طريق اننا سوف نضع اكثر من صورة للكود ونضعهم كلهم في array ونضع الصورة التي نريد المقارنه بها خارج الlist لكي يتم مقارنة اول صورة مع الصورة الخارجية وثاني صورة مع الخارجية وهكذا والنتيجة تظهر في صورة True او false اذا كان الشخص نفسه الموجود في الصورة يظهر نعم واذا لم يظهر تكون النتيجة خطأ كما موضح .

import face_recognition

known_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 image
unknown_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 array
print(results)

سكريبت بايثون لمعرفة اسم الشخص من صورته face recognition

سكريبت بايثون لمعرفة اسم الشخص من صورته 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 بايثون

كيفية تتبع كاميرا الجهاز ومعرفة اسماء الاشخاص بمكتبة 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()


مقالة اليوم من امتع المقالات التي سوف تعجبك لانها تعد مدخل في تعليم الالة وهذا المجال من اكثر المجالات طلبا في الدولل الغربيه لاهميته وسوف نحاول شرحه لكم بإذن الله تعالى في المقالات المقدمه في الايام المقبلة بإذن الله ولمزيد من المقالات يمكنك مشاهدة المقالات السابقة


رابط الصور والملحقات المستخدمه في الشرح


تعليقات