Ali Ahmed55 نشر 13 يناير أرسل تقرير نشر 13 يناير السلام عليكم هو انا ممكن ارفع كود ويتم شرح الكود ده بلغة باثيون 1 اقتباس
0 Mustafa Suleiman نشر 13 يناير أرسل تقرير نشر 13 يناير تقصد توضيح لكود تريد فهم آلية عمله؟ نعم يمكن ذلك. 1 اقتباس
0 Ali Ahmed55 نشر 13 يناير الكاتب أرسل تقرير نشر 13 يناير بتاريخ الآن قال Mustafa Suleiman: تقصد توضيح لكود تريد فهم آلية عمله؟ نعم يمكن ذلك. ايوه , تمام الكود اهو import face_recognition import cv2 import numpy as np video_capture = cv2.VideoCapture(0) obama_image = face_recognition.load_image_file("obama.jpg") obama_face_encoding = face_recognition.face_encodings(obama_image)[0] biden_image = face_recognition.load_image_file("biden.jpg") biden_face_encoding = face_recognition.face_encodings(biden_image)[0] known_face_encodings = [ obama_face_encoding, biden_face_encoding ] known_face_names = [ "Barack Obama", "Joe Biden" ] face_locations = [] face_encodings = [] face_names = [] process_this_frame = True while True: ret, frame = video_capture.read() if process_this_frame: small_frame = cv2.resize(frame, (0, 0), fx=0.25, fy=0.25) rgb_small_frame = small_frame[:, :, ::-1] 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(known_face_encodings, face_encoding) name = "Unknown" face_distances = face_recognition.face_distance(known_face_encodings, 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) process_this_frame = not process_this_frame for (top, right, bottom, left), name in zip(face_locations, face_names): top *= 4 right *= 4 bottom *= 4 left *= 4 cv2.rectangle(frame, (left, top), (right, bottom), (0, 0, 255), 2) 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) cv2.imshow('Video', frame) if cv2.waitKey(1) & 0xFF == ord('q'): break video_capture.release() cv2.destroyAllWindows() 1 اقتباس
0 Mustafa Suleiman نشر 13 يناير أرسل تقرير نشر 13 يناير أولاً يتم استيراد المكتبات: face_recognition: مكتبة للتعرف على الوجوه. cv2 (OpenCV): مكتبة برمجية مفتوحة المصدر للرؤية الحاسوبية. ثم تهيئة كائن لتقاط الفيديو من الكاميرا الافتراضية (فهرس الكاميرا 0). video_capture = cv2.VideoCapture(0) ثم: تحميل صور لوجوه معروفة ( وهي باراك أوباما وجو بايدن). تُحسب تشفيرات الوجوه باستخدام face_recognition.face_encodings. بعد ذلك إعداد مصفوفات للوجوه المعروفة وتلك المصفوفات تخزن تشفيرات الوجوه المعروفة وأسمائها المقابلة. known_face_encodings = [obama_face_encoding, biden_face_encoding] known_face_names = ["Barack Obama", "Joe Biden"] وتبدأ الحلقة الرئيسية للتعرف على الوجوه، من خلال التقاط إطارات فيديو متتالية ومعالجتها باستمرار للتعرف على الوجوه. while True: تغيير حجم الإطارات لتسريع عملية المعالجة. استخراج مواقع وتشفيرات الوجوه من الإطار المُصغر. ثم مقارنة تشفير كل وجه مكتشف مع تشفيرات الوجوه المعروفة. وتحديد أفضل تطابق وتسند اسم للوجه (أو "غير معروف" إذا لم يتم العثور على تطابق). رسم مستطيلات حول الوجوه المكتشفة. إضافة نص يحمل اسم الشخص المعترف به. بعد ذلك الإطار المعالج يعرض في نافذة تحمل اسم 'Video'. cv2.imshow('Video', frame) ويمكن إنهاء البرنامج عن طريق الضغط على مفتاح 'q'. if cv2.waitKey(1) & 0xFF == ord('q'): break بحيث يتم تحرير كائن التقاط الفيديو، وتغلق نوافذ OpenCV. 1 اقتباس
0 Ali Ahmed55 نشر 13 يناير الكاتب أرسل تقرير نشر 13 يناير لو سمحت الكامير فتحت وقفلت بسرعه ممكن حل المشكله ده انا عملت الكود تمام وعند تشغل الكود الكامير بتفتح وبتقفل علي طول من غير ما اشوف النتجيه اقتباس
0 El Sayed El Tohamy نشر 14 يناير أرسل تقرير نشر 14 يناير ربما تحتاج تغيير السطر التالي وزيادة القيمة 1 إلى قيمة أكبر 10 أو 20 لأنها تعبر عن الوقت المنتظر بالمللي ثانية = 1/1000 ثانية، وبالتالي لا يعطي الفرصة الكافية لمعالجة إطارات الصور والفيديو # if cv2.waitKey(1) & 0xFF == ord('q'): if cv2.waitKey(10) & 0xFF == ord('q'): أرجو التجربة 1 اقتباس
0 Ali Ahmed55 نشر 14 يناير الكاتب أرسل تقرير نشر 14 يناير بتاريخ 3 ساعة قال El Sayed El Tohamy: ربما تحتاج تغيير السطر التالي وزيادة القيمة 1 إلى قيمة أكبر 10 أو 20 لأنها تعبر عن الوقت المنتظر بالمللي ثانية = 1/1000 ثانية، وبالتالي لا يعطي الفرصة الكافية لمعالجة إطارات الصور والفيديو # if cv2.waitKey(1) & 0xFF == ord('q'): if cv2.waitKey(10) & 0xFF == ord('q'): أرجو التجربة هو حضرتك الكامير بتشتغل وبتقفل او ما تشوف وجه لكن غير كده بتفضل شغل بتاريخ 21 ساعة قال Ail Ahmed: rgb_small_frame = small_frame[:, :, ::-1] حل المشكله الحمد الله المشكله هنا فيه دي المفروض 1 مش -1 بس ممكن اعرف ليا لوسمحت اقتباس
0 El Sayed El Tohamy نشر 14 يناير أرسل تقرير نشر 14 يناير (معدل) استخدام القيم السالبة في القائمة list في البايثون تعني بداية الترقيم من النهاية، على سبيل المثال allNames = ['Ahmed', 'Mohamed', 'Ali'] allNames2 = allNames[::-1] # ['Ali', 'Mohamed', 'Ahmed'] لاحظ استخدام -1 كقيمة للخطوة معناها نسخ القائمة من النهاية كما هو موضح الاسم الأخير أصبح الأول بالقائمة الجديدة. عند التعامل مع مكتبات رؤية الحاسوب، فإنها تتعامل بنظام الألوان BGR أزرق/أخضر/أحمر، لذلك وجب عكس هذا الترتيب ليصبح RGB أحمر/أخضر/أزرق، وهذا هو السبب في استخدام (-1)، هذا الأسلوب قد يسبب انطلاق خطأ إذا كان المتغير الأصلي None، لذلك في أغلب الأحيان نستخدم الشيفرات بالطريقة التالية ret, frame = video_capture.read() if ret: small_frame = cv2.resize(frame, (128, 128)) rgb_small_frame = small_frame[:, :, ::-1] # the rest of your code else: print("Failed to read frame from camera") فإذا ظهرت الرسالة "Failed to read frame from camera" هذا معناه أنه لم يتمكن من التقاط الصورة من الكاميرا، فيجب معرفة الخطأ وتصحيحه، وليس استبدال القيمة السالبة (-1) بالقيمة (1) لأنه قد يسبب مشاكل في ألوان الصورة. تم التعديل في 14 يناير بواسطة El Sayed El Tohamy 1 اقتباس
0 Ali Ahmed55 نشر 14 يناير الكاتب أرسل تقرير نشر 14 يناير بتاريخ منذ ساعة مضت قال El Sayed El Tohamy: استخدام القيم السالبة في القائمة list في البايثون تعني بداية الترقيم من النهاية، على سبيل المثال allNames = ['Ahmed', 'Mohamed', 'Ali'] allNames2 = allNames[::-1] # ['Ali', 'Mohamed', 'Ahmed'] لاحظ استخدام -1 كقيمة للخطوة معناها نسخ القائمة من النهاية كما هو موضح الاسم الأخير أصبح الأول بالقائمة الجديدة. عند التعامل مع مكتبات رؤية الحاسوب، فإنها تتعامل بنظام الألوان BGR أزرق/أخضر/أحمر، لذلك وجب عكس هذا الترتيب ليصبح RGB أحمر/أخضر/أزرق، وهذا هو السبب في استخدام (-1)، هذا الأسلوب قد يسبب انطلاق خطأ إذا كان المتغير الأصلي None، لذلك في أغلب الأحيان نستخدم الشيفرات بالطريقة التالية ret, frame = video_capture.read() if ret: small_frame = cv2.resize(frame, (128, 128)) rgb_small_frame = small_frame[:, :, ::-1] # the rest of your code else: print("Failed to read frame from camera") فإذا ظهرت الرسالة "Failed to read frame from camera" هذا معناه أنه لم يتمكن من التقاط الصورة من الكاميرا، فيجب معرفة الخطأ وتصحيحه، وليس استبدال القيمة السالبة (-1) بالقيمة (1) لأنه قد يسبب مشاكل في ألوان الصورة. ايو انا عملت زي حضرتك كده وظهرات الرساله فا الخطاء من اي كده اقتباس
0 El Sayed El Tohamy نشر 14 يناير أرسل تقرير نشر 14 يناير (معدل) تقصد رسالة "Failed to read frame from camera" هل غيرت هذا السطر if cv2.waitKey(10) & 0xFF == ord('q'): تم التعديل في 14 يناير بواسطة El Sayed El Tohamy 1 اقتباس
0 Ali Ahmed55 نشر 14 يناير الكاتب أرسل تقرير نشر 14 يناير بتاريخ 9 دقائق مضت قال El Sayed El Tohamy: تقصد رسالة "Failed to read frame from camera" هل غيرت هذا السطر if cv2.waitKey(10) & 0xFF == ord('q'): ايوه , وبرد اول ما بيشوف وجه الكامير بتقفل علي طوال اقتباس
0 El Sayed El Tohamy نشر 14 يناير أرسل تقرير نشر 14 يناير حاول استخدام أدوات اكتشاف الأخطاء، مثل نقطة التوقف Break point أو طباعة عبارات معينة بعد كل أمر تشك في تسببه بالخطأ، وترى إذا لم يتم طباعة العبارة فهذا معناه أن المشكلة بهذا السطر. 1 اقتباس
0 Ali Ahmed55 نشر 14 يناير الكاتب أرسل تقرير نشر 14 يناير بتاريخ 2 دقائق مضت قال El Sayed El Tohamy: حاول استخدام أدوات اكتشاف الأخطاء، مثل نقطة التوقف Break point أو طباعة عبارات معينة بعد كل أمر تشك في تسببه بالخطأ، وترى إذا لم يتم طباعة العبارة فهذا معناه أن المشكلة بهذا السطر. حاضر , شكراا جدا لتعب حضرتك معه والله اقتباس
0 El Sayed El Tohamy نشر 14 يناير أرسل تقرير نشر 14 يناير على الرحب والسعة، في انتظار سماع النتائج منك، وإذا واجهتك أي مشكلة في استخدام أدوات اكتشاف الأخطاء لا تتردد في التواصل. 1 اقتباس
0 Ali Ahmed55 نشر 17 يناير الكاتب أرسل تقرير نشر 17 يناير بتاريخ On 13/1/2024 at 21:10 قال Ail Ahmed: ret, frame = video_capture.read() هو ليه هنا فيه 2 متغيرن بتاريخ On 13/1/2024 at 21:10 قال Ail Ahmed: small_frame = cv2.resize(frame, (0, 0), fx=0.25, fy=0.25) وكمان لوسمحت كانت عاوز افهم الية الكود ده وكمان انا عاوز الفديو يعالجه التعرف علي الوجه بشكل اسرع يعني 1/4 مش سرع عندي عاوز اسرع من كده اقتباس
0 Ali Ahmed55 نشر 17 يناير الكاتب أرسل تقرير نشر 17 يناير بتاريخ On 13/1/2024 at 21:10 قال Ail Ahmed: face_encodings = face_recognition.face_encodings(rgb_small_frame, face_locations) اه المشكله فيه السطر ده يا أ.سيد بتاريخ On 13/1/2024 at 21:10 قال Ail Ahmed: rgb_small_frame = small_frame[:, :, ::-1] وكمان يا أ.سيد المشكله له علاق ب السطر ده عشان انا ام بغير من -1 الي 1 الكامير بتعالجه الصور عادي ولكن ام بتكون -1 بيحصل مشكله والكامير مش بتعالجه اول ما تشوف صور اقتباس
0 El Sayed El Tohamy نشر 18 يناير أرسل تقرير نشر 18 يناير (معدل) بتاريخ 20 ساعة قال Ail Ahmed: هو ليه هنا فيه 2 متغيرن وكمان لوسمحت كانت عاوز افهم الية الكود ده وكمان انا عاوز الفديو يعالجه التعرف علي الوجه بشكل اسرع يعني 1/4 مش سرع عندي عاوز اسرع من كده سبب وجود متغيرين هو أن الوظيفة تعود بقيمتين، لاحظ أن البايثون يستطيع تعريف أكثر من متغير في نفس السطر، عن طريق سرد عدد من المتغيرات مفصولة بفاصلة، ثم علامة = ثم سرد عدد من القيم يناظر المتغيرات مثل المثال التالي: # تعريف ثلاث متغيرات في ثلاث أسطر firstName = 'Ahmed' lastName = 'Mohammed' age = 25 # تعريف نفس الثلاث متغيرات ولكن بسطر واحد firstName, lastName, age = 'Ahmed', 'Mohammed', 25 # طريقة أخرى لتعريف ثلاث متغيرات في نفس السطر firstName, lastName, age = ['Ahmed', 'Mohammed', 25] كذلك يمكنك تعريف ثلاث متغيرات في سطر واحد عن طريق وظيفة تعود بقائمة def GetData(): return ['Ahmed', 'Mohammed', 25] firstName, lastName, age = GetData() ما الخطأ الذي يظهر عند تنفيذ هذا السطر face_encodings = face_recognition.face_encodings(rgb_small_frame, face_locations) تم التعديل في 18 يناير بواسطة El Sayed El Tohamy 1 اقتباس
0 Ali Ahmed55 نشر 18 يناير الكاتب أرسل تقرير نشر 18 يناير بتاريخ 37 دقائق مضت قال El Sayed El Tohamy: لاحظ أن البايثون يستطيع تعريف أكثر من متغير في نفس السطر، عن طريق سرد عدد من المتغيرات مفصولة بفاصلة، ثم علامة = ثم سرد عدد من القيم يناظر المتغيرات مثل المثال التالي: والله شكرا جدا ده معلوم جديد بنسبالي بتاريخ 38 دقائق مضت قال El Sayed El Tohamy: ما الخطأ الذي يظهر عند تنفيذ هذا السطر حاضر هاصور لحضرتك الخطاء الخطاء البيظهر اهو فا اول ما اغير القيمه من -1 الي 1 الخطاء ده مش بيظهر والكامير بتعالجه عادي بتاريخ 58 دقائق مضت قال El Sayed El Tohamy: سبب وجود متغيرين هو أن الوظيفة تعود بقيمتين، ايوه صح واحد بترجع True والتاني بترجع عبار عن list ارقم اقتباس
0 Ali Ahmed55 نشر 18 يناير الكاتب أرسل تقرير نشر 18 يناير بتاريخ منذ ساعة مضت قال Ail Ahmed: الخطاء البيظهر اهو والخطاء ده يا أسيد بيظهر اول ما الكامير بتشوف وجه لكن غير كده مش بيظهر اقتباس
0 El Sayed El Tohamy نشر 18 يناير أرسل تقرير نشر 18 يناير السبب في الخطأ أن الوظيفة face_encodings تنتظر منك إعطاءها صورة ثلاثية القنوات أي ملونة ولكنك تعطيها صورة أحادية اللون لذلك جرب تغير السطر small_frame = cv2.resize(frame, (0, 0), fx=0.25, fy=0.25) # بهذا السطر small_frame = cv2.cvtColor(cv2.resize(frame, (0, 0), fx=0.25, fy=0.25), cv2.COLOR_GRAY2RGB) 1 اقتباس
0 Ali Ahmed55 نشر 18 يناير الكاتب أرسل تقرير نشر 18 يناير بتاريخ 18 دقائق مضت قال El Sayed El Tohamy: السبب في الخطأ أن الوظيفة face_encodings تنتظر منك إعطاءها صورة ثلاثية القنوات أي ملونة ولكنك تعطيها صورة أحادية اللون لذلك جرب تغير السطر small_frame = cv2.resize(frame, (0, 0), fx=0.25, fy=0.25) # بهذا السطر small_frame = cv2.cvtColor(cv2.resize(frame, (0, 0), fx=0.25, fy=0.25), cv2.COLOR_GRAY2RGB) بيظهر الخطاء ده اقتباس
0 El Sayed El Tohamy نشر 19 يناير أرسل تقرير نشر 19 يناير هذه شيفرات كاملة import face_recognition import cv2 obama_image = face_recognition.load_image_file("obama.jpg") biden_image = face_recognition.load_image_file("biden.jpg") obama_encoding = face_recognition.face_encodings(obama_image)[0] biden_encoding = face_recognition.face_encodings(biden_image)[0] known_face_encodings = [obama_encoding, biden_encoding] known_face_names = ["obama", "biden"] video_capture = cv2.VideoCapture(0) # حلقة تكرارية مستمرة لحين المستخدم يضغط على حرف # q while True: # قراءة إطار واحد من الكاميرا ret, frame = video_capture.read() # التحويل إلى نظام # RGB rgb_frame = frame[:, :, ::-1] face_locations = face_recognition.face_locations(rgb_frame) face_encodings = face_recognition.face_encodings(rgb_frame, face_locations) # حلقة تكرارية على كل الأوجه الموجودة بالإطار 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" # في حالة وجود مطابقة واحدة على الأقل، نستخدم أو واحدة if True in matches: first_match_index = matches.index(True) name = known_face_names[first_match_index] # رسم إطار والاسم حول الوجه cv2.rectangle(frame, (left, top), (right, bottom), (0, 0, 255), 2) cv2.putText(frame, name, (left + 6, bottom - 6), cv2.FONT_HERSHEY_DUPLEX, 1.0, (255, 255, 255), 1) # إظهار الصورة cv2.imshow("Face Recognition", frame) if cv2.waitKey(1) & 0xFF == ord('q'): break video_capture.release() cv2.destroyAllWindows() لاحظ التحويل من نظام BGR إلى نظام RGB في السطر التالي باستخدام القيمة السالبة (-1)، وذلك لأن مكتبة cv2 تلتقط الصورة بتنسيق GBR بينما مكتبة face_recognition تتعامل بنظام RGB rgb_frame = frame[:, :, ::-1] 1 اقتباس
السؤال
Ali Ahmed55
السلام عليكم
هو انا ممكن ارفع كود ويتم شرح الكود ده بلغة باثيون
23 أجوبة على هذا السؤال
Recommended Posts
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.