اذهب إلى المحتوى

السؤال

نشر

هو ليه دكتور ديفيد ميلان في كور CS50 ما عملش face_locations ال صوره malan.png وعمل علي طول face_encodings  ملحوظ صور malan.png تحتوي علي وجه واحد

وليه فيه الصور التاني ولو تكون مثل Harvard.jpg عمل face_locations وبعد كده عمل face_encodings  معه العلم انا Harvard.jpg تحتوي علي اكثر من وجه 

وليه عند صورة ميلان وعند face_encodings("malan.png") و حص index[0] ,ومعملش كده فيه صورة Harvard.jpg

والكود اهو

import face_recognition
from PIL import Image , ImageDraw
import numpy

# File Image
malan = face_recognition.load_image_file("Malan.png")
harvard = face_recognition.load_image_file("Harvard.jpg")
# encodings
harvard_locations = face_recognition.face_locations(harvard)
harvard_encodings = face_recognition.face_encodings(harvard , harvard_locations)

malan_encodings = face_recognition.face_encodings(malan)[0]

 

Recommended Posts

  • 0
نشر (معدل)

السطر المستخدم في تشفير صورة Malan يقوم بتشفير وجهًا واحدًا فقط، الذي هو صورة Malan

ولكنه يقوم بالبحث عن جميع أماكن الأوجه بالصورة الثانية ويقوم بتشفيرها جميعًا

هذا السيناريو يستخدم عندما تكون صورة Malan تحتوي على وجهٍ واحد (الذي هو وجه Malan)، لذلك لا نحتاج للبحث عن أماكن الأوجه حيث لا يوجد إلا وجه واحد نعرفه، والمفترض الذي سنستخدمه فيما بعد للتعرف عليه واستخراجه من الصورة الثانية Harvard

باختصار، نستخدم صورة Malan لمعرفة تشفير وجهه، ثم نستخدم الصورة الثانية Harvard لاستخراج Malan من بين أصدقائه.

# encodings
# البحث عن جميع الأماكن التي يوجد بها أوجه
harvard_locations = face_recognition.face_locations(harvard)
# تشفير كل الأوجه الموجودة في هذه الأماكن
harvard_encodings = face_recognition.face_encodings(harvard , harvard_locations)

# تشغير وجهًا واحدًا وهو يعبر عن وجه مولان
# (الذي في الغالب لن يوجد غيره بهذه الصورة، أو قد يكون هناك عدة أوجه ولكن كلها له) 
# تم استخدام [0] لأن الوظفية تعود بقائمة من المصفوفات،
# list of arrays
# فنحن نريد المصفوفة الأولى
malan_encodings = face_recognition.face_encodings(malan)[0]

لاحظ أن هذه الطريقة قد تسبب مشكلة إذا احتوت الصورة Malan على أوجه لأناس مختلفين، لأنه في هذه الحالة سيقوم بتشفير أول وجه بالصورة، وقد لا يكون وجه Malan.

 

تم التعديل في بواسطة El Sayed El Tohamy
  • 0
نشر
بتاريخ 33 دقائق مضت قال El Sayed El Tohamy:

السطر المستخدم في تشفير صورة Malan يقوم بتشفير وجهًا واحدًا فقط، الذي هو صورة Malan

ولكنه يقوم بالبحث عن جميع أماكن الأوجه بالصورة الثانية ويقوم بتشفيرها جميعًا

هذا السيناريو يستخدم عندما تكون صورة Malan تحتوي على وجهٍ واحد (الذي هو وجه Malan)، لذلك لا نحتاج للبحث عن أماكن الأوجه حيث لا يوجد إلا وجه واحد نعرفه، والمفترض الذي سنستخدمه فيما بعد للتعرف عليه واستخراجه من الصورة الثانية Harvard

باختصار، نستخدم صورة Malan لمعرفة تشفير وجهه، ثم نستخدم الصورة الثانية Harvard لاستخراج Malan من بين أصدقائه.

# encodings
# البحث عن جميع الأماكن التي يوجد بها أوجه
harvard_locations = face_recognition.face_locations(harvard)
# تشفير كل الأوجه الموجودة في هذه الأماكن
harvard_encodings = face_recognition.face_encodings(harvard , harvard_locations)

# تشغير وجهًا واحدًا وهو يعبر عن وجه مولان
# (الذي في الغالب لن يوجد غيره بهذه الصورة، أو قد يكون هناك عدة أوجه ولكن كلها له) 
# تم استخدام [0] لأن الوظفية تعود بقائمة من المصفوفات،
# list of arrays
# فنحن نريد المصفوفة الأولى
malan_encodings = face_recognition.face_encodings(malan)[0]

لاحظ أن هذه الطريقة قد تسبب مشكلة إذا احتوت الصورة Malan على أوجه لأناس مختلفين، لأنه في هذه الحالة سيقوم بتشفير أول وجه بالصورة، وقد لا يكون وجه Malan.

 

تمام انا فهمت الجزاء الاول

ممكن طيب كده افهم اليه الجزاء التاني

اول هو اي الفرق بين Compare_faces و face_distance

والجزاء التاني اهو

for(top ,right, bottom , left) , face_encoding in zip(harvard_locations , harvard_encodings):

    matches = face_recognition.compare_faces([malan_encoding] , face_encoding)
    face_distance = face_recognition.face_distance([malan_encoding] , face_encoding)
    best_match_index = numpy.argmin(face_distance)

وفيه السطر matches ليه اول قيمه موجود بين list

وكمان هو اجاي فيه الخر كده وكتب del draw  برد الحلقة forليه يعني

  • 0
نشر

كما توقعنا، الجزء التالي مفترض يكون المقارنة بين الوجه المعروف والأوجه الغير معروفة.

الآن لدينا تشفير لصورة Malan، ولدينا قائمة بأماكن وتشفيرات الصورة الموجودة بصورة Harvard

الحلقة التكرارية تقوم بالدوران على كل صورة بالقائمة Harvard وتقوم بمقارنتها مع صورة Malan عن طريق الوظيفة compare_faces التي تعود بقيمة True or false

في الحقيقة يجب أن نوضح الوظيفة compare_faces بشكل أعمق حتى نفهمها ونستطيع استخدامها بشكل صحيح،

هذه الوظيفة تحتاج معاملين:

الأول

عبارة عن قائمة list تحتوي على تشفيرات الأوجه المعروفة (في حالتنا هذه تحتوي على عنصر واحد فقط وهو تشفير وجه Malan)

الثاني

عبارة عن تشفير للوجه المراد اختباره مقابل القائمة المعروفة

وتعود هذه الوظيفة بقائمة من القيم المنطقية True/False التي تعبر عن تطابق أو عدم تطابق الوجه المختبر مع كل وجه من القائمة المعروفة، في حالتنا ستحتوي هذه القائمة على عنصر واحد فقط، ولكن إذا افترضنا أن لدينا ثلاثة أوجه معروفة، ففي هذه الحالة ستعود الوظيفة بقائمة تحتوي على ثلاثة عناصر.

أما الوظيفة face_distance فهي تعمل بشكل مشابه للوظيفة face_compare ولكنها تعود بقائمة تحتوي على قيم عددية بين 0 و 1، هذه القيم تعبر عن البعد بين الصور المعروفة والصورة المختبرة، كلما قلّت القيمة كلما كان أكثر تشابهًا، لذلك القيمة 0 تعني لا توجد مسافة (أي تطابق تام). في حالتنا بالتأكيد ستعود بقيمة واحدة لأن لدينا صورة واحدة معروفة، أما لو كان هناك أكثر من صورة فستعود بقائمة بها عدد عناصر يساوي عدد الصور ويعبر عن مدى بعد الصورة المختبرة عن كل صورة معروفة.

السطر الثالث يعود برقم العنصر الأقل مسافة (أي الأكثر تشابهًا)

  • 0
نشر
بتاريخ 29 دقائق مضت قال El Sayed El Tohamy:

كما توقعنا، الجزء التالي مفترض يكون المقارنة بين الوجه المعروف والأوجه الغير معروفة.

الآن لدينا تشفير لصورة Malan، ولدينا قائمة بأماكن وتشفيرات الصورة الموجودة بصورة Harvard

الحلقة التكرارية تقوم بالدوران على كل صورة بالقائمة Harvard وتقوم بمقارنتها مع صورة Malan عن طريق الوظيفة compare_faces التي تعود بقيمة True or false

في الحقيقة يجب أن نوضح الوظيفة compare_faces بشكل أعمق حتى نفهمها ونستطيع استخدامها بشكل صحيح،

هذه الوظيفة تحتاج معاملين:

الأول

عبارة عن قائمة list تحتوي على تشفيرات الأوجه المعروفة (في حالتنا هذه تحتوي على عنصر واحد فقط وهو تشفير وجه Malan)

الثاني

عبارة عن تشفير للوجه المراد اختباره مقابل القائمة المعروفة

وتعود هذه الوظيفة بقائمة من القيم المنطقية True/False التي تعبر عن تطابق أو عدم تطابق الوجه المختبر مع كل وجه من القائمة المعروفة، في حالتنا ستحتوي هذه القائمة على عنصر واحد فقط، ولكن إذا افترضنا أن لدينا ثلاثة أوجه معروفة، ففي هذه الحالة ستعود الوظيفة بقائمة تحتوي على ثلاثة عناصر.

أما الوظيفة face_distance فهي تعمل بشكل مشابه للوظيفة face_compare ولكنها تعود بقائمة تحتوي على قيم عددية بين 0 و 1، هذه القيم تعبر عن البعد بين الصور المعروفة والصورة المختبرة، كلما قلّت القيمة كلما كان أكثر تشابهًا، لذلك القيمة 0 تعني لا توجد مسافة (أي تطابق تام). في حالتنا بالتأكيد ستعود بقيمة واحدة لأن لدينا صورة واحدة معروفة، أما لو كان هناك أكثر من صورة فستعود بقائمة بها عدد عناصر يساوي عدد الصور ويعبر عن مدى بعد الصورة المختبرة عن كل صورة معروفة.

السطر الثالث يعود برقم العنصر الأقل مسافة (أي الأكثر تشابهًا)

اول شكراا جدا علي المعلومات القيمه

تاني حاجه انا ما بكتب الكود ده

print(face_distance)

برجع بقيمه 0 فا انا ما كنتش فاهم اي 0 ده بس الحمد الله دلوقتي فهمت

وكمان انا كتب الكود ده

print(matches)

رجع لكو False ما فيش Ture خالص معني كده انا الصور التاني مش موجود فيه David Malan صح كده

  • 0
نشر
بتاريخ 36 دقائق مضت قال Ail Ahmed:

اول شكراا جدا علي المعلومات القيمه

تاني حاجه انا ما بكتب الكود ده

print(face_distance)

برجع بقيمه 0 فا انا ما كنتش فاهم اي 0 ده بس الحمد الله دلوقتي فهمت

وكمان انا كتب الكود ده

print(matches)

رجع لكو False ما فيش Ture خالص معني كده انا الصور التاني مش موجود فيه David Malan صح كده

كان فيه مشكله فيه االصوره مش واضح خالص 

بس الحمد الله تمام دلوقتي وده الكود 


import face_recognition
from PIL import Image , ImageDraw
import numpy

# File Image
malan = face_recognition.load_image_file("Malan.png")
harvard = face_recognition.load_image_file("Harvard.jpg")
# encodings
harvard_locations = face_recognition.face_locations(harvard)
harvard_encodings = face_recognition.face_encodings(harvard , harvard_locations)
malan_encoding = face_recognition.face_encodings(malan)[0]

# file Image Pillow
img = Image.fromarray(harvard)
draw = ImageDraw.Draw(img)

# for loop faces
for(top ,right, bottom , left) , face_encoding in zip(harvard_locations , harvard_encodings):

    matches = face_recognition.compare_faces([malan_encoding] , face_encoding)
    face_distance = face_recognition.face_distance([malan_encoding] , face_encoding)
    
    best_match_index = numpy.argmin(face_distance)
    
    if matches[best_match_index]:

        draw.rectangle(((left , top) , (right , bottom)) , outline=(0,255,0) , width=5)
    
    else:
        draw.rectangle(((left , top) , (right , bottom)) , outline=(255,0,0) , width=5)

del draw

img.show()

بس اخر سوال 

السطر القبل الاخير  الهو del draw

هو ليه عامل كده يعني 

  • 0
نشر
بتاريخ 5 دقائق مضت قال El Sayed El Tohamy:

السطر الأخير يقوم بحذف الكائن draw الذي تم تعريفه مسبقًا،

وذلك

لتحسين الأداء وتفريغ الذاكرة، بعدما قام بمهمته،

وهو يستخدم لرسم أشكال بسيطة وكتابة نص بسيط على الصور.

تمام شكرااا اوي والله ربنا يخليك يارب

انا اتعلم كثير اوي الحمد الله

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...