جدول المحتويات:

اكتشاف الوجه + التعرف: 8 خطوات (بالصور)
اكتشاف الوجه + التعرف: 8 خطوات (بالصور)

فيديو: اكتشاف الوجه + التعرف: 8 خطوات (بالصور)

فيديو: اكتشاف الوجه + التعرف: 8 خطوات (بالصور)
فيديو: كيف تعمل تقنية التعرف على الوجه؟ 2024, يونيو
Anonim
Image
Image
كشف الوجه + التعرف
كشف الوجه + التعرف

هذا مثال بسيط على تشغيل اكتشاف الوجه والتعرف عليه باستخدام 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 … إذا كنت مثل هذه التعليمات….. يرجى الاشتراك معي والتصويت لي….. شكرًا للأصدقاء:)

موصى به: