جدول المحتويات:
- الخطوة 1: قم بتثبيت Anaconda
- الخطوة 2: قم بتنزيل Open CV Package
- الخطوة 3: تعيين المتغيرات البيئية
- الخطوة 4: اختبار للتأكيد
- الخطوة 5: عمل كود لاكتشاف الوجه
- الخطوة 6: عمل رمز لإنشاء مجموعة بيانات
- الخطوة 7: قم بعمل كود لتدريب أداة التعرف
- الخطوة 8: قم بعمل كود للتعرف على الوجوه والنتيجة
فيديو: اكتشاف الوجه + التعرف: 8 خطوات (بالصور)
2024 مؤلف: John Day | [email protected]. آخر تعديل: 2024-01-30 07:41
هذا مثال بسيط على تشغيل اكتشاف الوجه والتعرف عليه باستخدام OpenCV من الكاميرا. ملاحظة: لقد أنشأت هذا المشروع من أجل مسابقة المستشعر واستخدمت الكاميرا كجهاز استشعار للتتبع والتعرف على الوجوه. لذلك ، هدفنا في هذه الجلسة ، 1. تثبيت Anaconda 2. تنزيل حزمة السيرة الذاتية المفتوحة 3. تعيين المتغيرات البيئية 4. اختبار للتأكيد 5 قم بعمل كود لاكتشاف الوجه 6. قم بعمل كود لإنشاء مجموعة بيانات 7. قم بعمل كود لتدريب أداة التعرف 8. قم بعمل كود للتعرف على الوجوه والنتيجة.
الخطوة 1: قم بتثبيت Anaconda
Anaconda هو في الأساس عبارة عن Python IDE معبأ بشكل جيد يتم شحنه مع الكثير من الحزم المفيدة ، مثل NumPy و Pandas و IPython Notebook وما إلى ذلك ، ويبدو أنه موصى به في كل مكان في المجتمع العلمي. تحقق من Anaconda لتثبيته.
الخطوة 2: قم بتنزيل Open CV Package
أولاً ، انتقل إلى موقع OpenCV الرسمي لتنزيل حزمة OpenCV الكاملة. اختر الإصدار الذي تريده (2.x أو 3.x). أنا أستخدم Python 2.x و OpenCV 2.x - ويرجع ذلك أساسًا إلى كيفية إعداد / بناء برامج OpenCV-Python التعليمية على.
في حالتي ، قمت باستخراج الحزمة (مجلد بشكل أساسي) مباشرة إلى محرك الأقراص F. (F: / opencv).
الخطوة 3: تعيين المتغيرات البيئية
انسخ والصق ملف cv2.pyd
يحتوي دليل حزم موقع Anaconda (على سبيل المثال F: / Program Files / Anaconda2 / Lib / site-pack في حالتي) على حزم Python التي يمكنك استيرادها. هدفنا هو نسخ ملف cv2.pyd ولصقه في هذا الدليل (حتى نتمكن من استخدام استيراد cv2 في أكواد Python الخاصة بنا.).
للقيام بذلك ، انسخ ملف cv2.pyd …
من دليل OpenCV هذا (قد يكون الجزء الأول مختلفًا قليلاً على جهازك):
# آلة Python 2.7 و 64 بت: F: / opencv / build / python / 2.7 / x64 # Python 2.7 و آلة 32 بت: F: / opencv / build / python / 2.7 / x84
إلى دليل Anaconda هذا (قد يكون الجزء الأول مختلفًا قليلاً على جهازك):
F: / Program Files / Anaconda2 / Lib / site -packs
بعد تنفيذ هذه الخطوة ، سنتمكن الآن من استخدام استيراد cv2 في كود Python. ولكن ، ما زلنا بحاجة إلى بذل المزيد من الجهد لجعل FFMPEG (برنامج ترميز الفيديو) يعمل (لتمكيننا من القيام بأشياء مثل معالجة مقاطع الفيديو.)
انقر بزر الماوس الأيمن فوق "جهاز الكمبيوتر" (أو "هذا الكمبيوتر" في نظام التشغيل Windows 8.1) -> انقر بزر الماوس الأيمن فوق خصائص -> انقر بزر الماوس الأيسر فوق علامة التبويب "خيارات متقدمة" -> انقر بزر الماوس الأيمن فوق الزر "متغيرات البيئة …". أضف متغير مستخدم جديد للإشارة إلى OpenCV (إما x86 لنظام 32 بت أو x64 لنظام 64 بت.) أنا حاليًا على جهاز 64 بت.
32 بت OPENCV_DIRC: / opencv / build / x86 / vc12.0
إصدار 64 بت OPENCV_DIRC: / opencv / build / x64 / vc12
إلحاق٪ OPENCV_DIR٪ / bin لمسار متغير المستخدم.
على سبيل المثال ، يبدو متغير المستخدم PATH هكذا …
قبل:
F: / Users / Johnny / Anaconda ؛ C: / Users / Johnny / Anaconda / Scripts
بعد، بعدما:
F: / Users / Johnny / Anaconda؛ C: / Users / Johnny / Anaconda / Scripts؛٪ OPENCV_DIR٪ / bin
هذا ما انتهينا! FFMPEG جاهز للاستخدام!
الخطوة 4: اختبار للتأكيد
نحتاج إلى اختبار ما إذا كان بإمكاننا الآن القيام بذلك في Anaconda (عبر Spyder IDE):
- استيراد حزمة OpenCV
- استخدم الأداة المساعدة FFMPEG (لقراءة / كتابة / معالجة مقاطع الفيديو)
الاختبار 1: هل يمكننا استيراد OpenCV؟
لتأكيد أن Anaconda قادر الآن على استيراد حزمة OpenCV-Python (وهي cv2) ،
قم بإصدارها في IPython Console:
استيراد السيرة الذاتية 2
طباعة السيرة الذاتية._ نسخة_
إذا تم استيراد الحزمة cv2 بشكل جيد بدون أخطاء ، وتم طباعة نسخة cv2 ، فنحن جميعًا بخير!
الاختبار 2: هل يمكننا استخدام برنامج الترميز FFMPEG؟
ضع عينة
input_video.mp4
ملف فيديو في دليل. نريد اختبار ما إذا كان بإمكاننا:
- اقرأ ملف الفيديو mp4 هذا و
- اكتب ملف فيديو جديدًا (يمكن أن يكون.avi أو.mp4 وما إلى ذلك)
للقيام بذلك ، نحتاج إلى الحصول على كود اختبار بايثون ، أطلق عليه test.py. ضعه في نفس الدليل مثل العينة
input_video.mp4
ملف.
هذا هو ما
test.py
قد يبدو مثل (ملاحظة: شكرًا جزيلاً لاقتراحات Pete و Warren في حقل التعليق - لقد استبدلت رمز الاختبار الأصلي الخاص بي به - يرجى اختباره بنفسك وإعلامنا إذا كان هذا يعمل بشكل أفضل):
استيراد السيرة الذاتية 2
cap = cv2. VideoCapture ("input_video.mp4") print cap.isOpened () # True = قراءة الفيديو بنجاح. خطأ - فشل في قراءة الفيديو. fourcc = cv2. VideoWriter_fourcc (* 'XVID') out = cv2. VideoWriter ("output_video.avi"، fourcc، 20.0، (640، 360)) print.isOpened () # True = كتابة الفيديو بنجاح. خطأ - فشل في كتابة الفيديو. cap.release () out.release ()
هذا الاختبار مهم جدا. إذا كنت ترغب في معالجة ملفات الفيديو ، فستحتاج إلى التأكد من أن Anaconda / Spyder IDE يمكنه استخدام FFMPEG (برنامج ترميز الفيديو). لقد استغرق الأمر مني أيامًا حتى تعمل. لكن آمل أن يستغرق الأمر وقتًا أقل بكثير!:) ملاحظة: نصيحة أخرى مهمة جدًا عند استخدام Anaconda Spyder IDE. تأكد من مراجعة دليل العمل الحالي (CWD) !!!
الخطوة 5: عمل كود لاكتشاف الوجه
هدف
في هذه الجلسة ،
- سنرى أساسيات اكتشاف الوجه باستخدام مصنفات Cascade القائمة على ميزة Haar
- سنقوم بتمديد نفس الشيء للكشف عن العين وما إلى ذلك
كشف Haar-cascade في OpenCV
هنا سنتعامل مع الكشف. يحتوي OpenCV بالفعل على العديد من المصنفات المدربة مسبقًا للوجه والعينين والابتسامة وما إلى ذلك. يتم تخزين ملفات XML هذه في مجلد / بيانات / haarcascades /. لنقم بإنشاء كاشف للوجه والعين باستخدام OpenCV ، أولاً نحتاج إلى تحميل مصنفات XML المطلوبة. ثم قم بتحميل صورة الإدخال (أو الفيديو) في وضع التدرج الرمادي أو يمكننا استخدام الكاميرا (لاكتشاف الوجه في الوقت الفعلي)
استيراد numpy كـ np
import cv2 face_cascade = cv2. CascadeClassifier ('F: / Program Files / opencv / sources / data / haarcascades / haarcascade_frontalface_default.xml').xml ') cap = cv2. VideoCapture (0) بينما 1: ret ، img = cap.read () رمادي = cv2.cvtColor (img، cv2. COLOR_BGR2GRAY) faces = face_cascade.detectMultiScale (رمادي ، 1.5 ، 5) لـ (x ، y ، w ، h) في الوجوه: cv2.rectangle (img، (x، y)، (x + w، y + h)، (255، 0، 0)، 2) roi_gray = رمادي [y: y + h، x: x + w] roi_color = img [y: y + h، x: x + w] eyes = eye_cascade.detectMultiScale (roi_gray) لـ (ex، ey، ew، eh) في العيون: cv2.rectangle (roi_color، (ex، ey)، (ex + ew، ey + eh)، (0، 255، 0)، 2) print "found" + str (len (faces)) + "face (s)" cv2.imshow ('img'، img) k = cv2.waitKey (30) & 0xff إذا كان k == 27: كسر الحد الأقصى.release () cv2.destroyAllWindows ()
الخطوة 6: عمل رمز لإنشاء مجموعة بيانات
نحن نقوم بالتعرف على الوجوه ، لذا ستحتاج إلى بعض صور الوجوه! يمكنك إما إنشاء مجموعة البيانات الخاصة بك أو البدء بإحدى قواعد بيانات الوجوه المتاحة ، https://face-rec.org/databases/ يمنحك نظرة عامة محدثة. ثلاث قواعد بيانات مثيرة للاهتمام هي (أجزاء من الوصف مقتبسة من
- قاعدة بيانات AT&T Faced
- قاعدة بيانات Yale Faced A
- تمديد قاعدة بيانات ييل ب
أنا هنا أستخدم مجموعة البيانات الخاصة بي … بمساعدة الكود الموضح أدناه:
استيراد numpy كـ np
استيراد cv2 face_cascade = cv2. CascadeClassifier ('F: / Program Files / opencv / sources / data / haarcascades / haarcascade_frontalface_default.xml') cap = cv2. VideoCapture (0) id = raw_input ('أدخل معرف المستخدم') sampleN = 0 ؛ while 1: ret، img = cap.read () gray = cv2.cvtColor (img، cv2. COLOR_BGR2GRAY) وجوه = face_cascade.detectMultiScale (رمادي ، 1.3 ، 5) لـ (x ، y ، w ، h) في الوجوه: sampleN = عينة N + 1 ؛ cv2.imwrite ("F: / Program Files / projects / face_rec / facesData / User." + str (id) + "." + str (sampleN) + ".jpg" ، رمادي [y: y + h ، x: x + w]) cv2.rectangle (img، (x، y)، (x + w، y + h)، (255، 0، 0)، 2) cv2.waitKey (100) cv2.imshow ('img' ، img) cv2.waitKey (1) if sampleN> 20: break cap.release () cv2.destroyAllWindows ()
الخطوة 7: قم بعمل كود لتدريب أداة التعرف
قم بإنشاء الوظيفة لإعداد مجموعة التدريب
الآن ، سوف نحدد وظيفة
getImagesWithID (مسار)
يأخذ المسار المطلق إلى قاعدة بيانات الصور كوسيطة إدخال ويعيد مجموعة من 2 قائمة ، واحدة تحتوي على الوجوه المكتشفة والأخرى تحتوي على التسمية المقابلة لذلك الوجه. على سبيل المثال ، إذا كان الفهرس ith في قائمة الوجوه يمثل الفرد الخامس في قاعدة البيانات ، فإن الموقع المقابل في قائمة الملصقات له قيمة تساوي 5.
الآن قم بتحويل أوجه مجموعة البيانات (التي تم إنشاؤها في الخطوة 6) إلى ملف.yml بمساعدة الكود الموضح أدناه:
استيراد نظام التشغيل
استيراد numpy كـ np import cv2 من PIL import Image # للتعرف على الوجوه ، سنستخدم أداة التعرف على الوجه LBPH = cv2.createLBPHFaceRecognizer () ؛ path = "F: / Program Files / projects / face_rec / facesData" def getImagesWithID (path): imagePaths = [os.path.join (path، f) لـ f في os.listdir (مسار)] # print image_path #getImagesWithID (path) faces = IDs = لـ imagePath في imagePaths: # اقرأ الصورة وحوّلها إلى facesImg = Image.open (imagePath).convert ('L') faceNP = np.array (facesImg، 'uint8') # احصل على ملصق معرف الصورة = int (os.path.split (imagePath) [- 1].split (".") [1]) # كشف الوجه في صورة faces.append (faceNP) IDs.append (المعرف) cv2.imshow ("إضافة وجوه للتدريب" ، faceNP) cv2.waitKey (10) إرجاع np.array (IDs) ، معرفات الوجوه ، faces = getImagesWithID (مسار) أداة التعرف. ("F: / ملفات البرنامج / المشاريع / face_rec / faceREC / trainingdata.yml") cv2.destroyAllWindows ()
باستخدام هذا الرمز ، تم تحويل جميع مجموعة بيانات الوجه إلى ملف.yml واحد ….. موقع المسار هو ("F: / Program Files / projects / face_rec / faceREC / trainingdata.yml")
الخطوة 8: قم بعمل كود للتعرف على الوجوه والنتيجة
Guyzz هذه هي الخطوة الأخيرة التي يمكننا من خلالها إنشاء رمز للتعرف على الوجوه بمساعدة كاميرا الويب الخاصة بك في هذه الخطوة هناك عمليتان ستؤديان…. 1. التقاط الفيديو من الكاميرا 2. قارنه مع ملف.yml الخاص بك
استيراد numpy كـ npimport cv2 face_cascade = cv2. CascadeClassifier ('F: / Program Files / opencv / sources / data / haarcascades / haarcascade_frontalface_default.xml') cap = cv2. VideoCapture (0) rec = cv2.createLBPHFace (؛Recognizer () rec.load ("F: / Program Files / projects / face_rec / faceREC / trainingdata.yml") id = 0 font = cv2.cv. InitFont (cv2.cv. CV_FONT_HERSHEY_COMPLEX_SMALL، 5، 1، 0، 4) بينما 1: ret، img = cap.read () gray = cv2.cvtColor (img، cv2. COLOR_BGR2GRAY) faces = face_cascade.detectMultiScale (رمادي ، 1.5 ، 5) لـ (x ، y ، w ، h) في الوجوه: cv2.rectangle (img، (x، y)، (x + w، y + h)، (255، 0، 0)، 2) id، conf = rec.predict (رمادي [y: y + h، x: x + w]) إذا (id == 2): id = "alok" إذا كان id == 1: id = "alok" إذا كان id == 3: id = "anjali" إذا كان id == 4: id = "Gaurav" إذا كان id = = 5: id = 'rahul' if id == 6: id = "akshay" cv2.cv. PutText (cv2.cv.fromarray (img)، str (id)، (x، y + h)، font، 255) cv2.imshow ('img'، img) إذا كان cv2.waitKey (1) == ord ('q'): break cap.release ()
cv2.destroyAllWindows ()
وأخيرًا ، ستظهر النتيجة أمام عينيك ……. يمكنك أيضًا تنزيل الملف المضغوط من أسفل الرابط: انقر هنا لتنزيل الأكواد ، لذلك ، في هذا الدليل ، قمنا بمهمة اكتشاف الوجه + التعرف باستخدام OpenCV … إذا كنت مثل هذه التعليمات….. يرجى الاشتراك معي والتصويت لي….. شكرًا للأصدقاء:)
موصى به:
Abellcadabra (نظام قفل باب التعرف على الوجه): 9 خطوات
Abellcadabra (نظام قفل باب التعرف على الوجوه): أثناء فترة الحجر الصحي ، حاولت إيجاد طريقة لقتل الوقت من خلال بناء التعرف على الوجوه لباب المنزل. أطلق عليها اسم Abellcadabra - وهي عبارة عن مزيج بين Abracadabra ، وهي عبارة سحرية مع جرس الباب لا آخذ سوى الجرس. مضحك جدا
قفل باب التعرف على الوجه: 8 خطوات
قفل باب التعرف على الوجه: حوالي شهر في الإعداد ، أقدم قفل باب التعرف على الوجه! حاولت أن أجعله يبدو أنيقًا قدر الإمكان ، لكن لا يمكنني فعل سوى ما يصل إلى 13 عامًا. يتم تشغيل قفل باب التعرف على الوجه بواسطة Raspberry Pi 4 ، مع غطاء محمول خاص
جرس الباب مع التعرف على الوجه: 7 خطوات (بالصور)
جرس الباب مع التعرف على الوجه: التحفيز في الآونة الأخيرة ، كانت هناك موجة من السرقات في بلدي والتي تستهدف كبار السن في منازلهم. عادة ، يتم منح الوصول من قبل الشاغلين أنفسهم لأن الزوار يقنعونهم بأنهم مقدمو رعاية / ممرضات. هو - هي
التعرف على الوجه ESP32 CAM مع دعم MQTT - المفكر بالذكاء الاصطناعي: 4 خطوات
التعرف على الوجه ESP32 CAM مع دعم MQTT | المفكر بالذكاء الاصطناعي: مرحبًا ، أردت مشاركة الكود الخاص بي لمشروع ما إذا كنت بحاجة إلى الحصول على ESP CAM مع التعرف على الوجوه ، والتي يمكن أن ترسل البيانات إلى MQTT. حسنًا .. ربما بعد 7 ساعات من البحث في أمثلة التعليمات البرمجية المتعددة والبحث عن ما هو ، لقد انتهيت
نظام أمان التعرف على الوجه للثلاجة المزودة بـ Raspberry Pi: 7 خطوات (بالصور)
نظام أمان التعرف على الوجه للثلاجة مع Raspberry Pi: عند تصفح الإنترنت ، اكتشفت أن أسعار أنظمة الأمان تختلف من 150 دولارًا إلى 600 دولار وما فوق ، ولكن لا يمكن دمج جميع الحلول (حتى تلك باهظة الثمن) مع حلول أخرى أدوات ذكية في منزلك! على سبيل المثال ، لا يمكنك ضبط