תוכן עניינים:

זיהוי פנים+זיהוי: 8 שלבים (עם תמונות)
זיהוי פנים+זיהוי: 8 שלבים (עם תמונות)

וִידֵאוֹ: זיהוי פנים+זיהוי: 8 שלבים (עם תמונות)

וִידֵאוֹ: זיהוי פנים+זיהוי: 8 שלבים (עם תמונות)
וִידֵאוֹ: מדריכים | 10 הגדרות שחובה לשנות בכל אייפון חדש📲 2024, סֶפּטֶמבֶּר
Anonim
Image
Image
זיהוי פנים+זיהוי
זיהוי פנים+זיהוי

זוהי דוגמה פשוטה לריצת זיהוי פנים וזיהוי באמצעות OpenCV ממצלמה. הערה: הכנתי את הפרוייקט הזה לתחרות חיישנים והשתמשתי במצלמה כחיישן לאיתור מעקב והכרה. אז, המטרה שלנו בפגישה זו, 1. התקן אנקונדה 2. הורד חבילת קורות חיים פתוחה 3. הגדר משתנים סביבתיים 4. בדוק כדי לאשר 5. צור קוד לזיהוי פנים 6. צור קוד ליצירת מערך נתונים 7. צור קוד לאימון המזהה 8. צור קוד לזיהוי הפנים והתוצאה.

שלב 1: התקן את אנקונדה

התקן את אנקונדה
התקן את אנקונדה

אנקונדה היא למעשה Python IDE ארוז היטב שנשלח עם טונות של חבילות שימושיות, כגון NumPy, Pandas, IPython Notebook וכו '. נראה כי מומלץ בכל מקום בקהילה המדעית. בדוק את אנקונדה כדי להתקין אותה.

שלב 2: הורד את חבילת קורות חיים פתוחים

הורד חבילת קורות חיים פתוחים
הורד חבילת קורות חיים פתוחים

ראשית, עבור לאתר הרשמי של 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-packages במקרה שלי) מכילה את חבילות ה- Python שתוכל לייבא. המטרה שלנו היא להעתיק ולהדביק את הקובץ cv2.pyd לספרייה זו (כדי שנוכל להשתמש ב- cv2 היבוא בקודי ה- Python שלנו).

לשם כך העתק את הקובץ cv2.pyd …

מספריית OpenCV זו (החלק ההתחלתי עשוי להיות מעט שונה במחשב שלך):

# Python 2.7 ו- 64-bit machine: F: / opencv / build / python / 2.7 / x64# Python 2.7 and 32-bit machine: F: / opencv / build / python / 2.7 / x84

לספריית Anaconda זו (החלק ההתחלתי עשוי להיות מעט שונה במחשב שלך):

F: / Program Files / Anaconda2 / Lib / site-packages

לאחר ביצוע שלב זה נוכל כעת להשתמש ב- cv2 יבוא בקוד פייתון. אבל, אנחנו עדיין צריכים לעשות קצת יותר עבודה כדי לגרום ל- FFMPEG (codec וידאו) לפעול (כדי לאפשר לנו לעשות דברים כמו עיבוד סרטונים.)

לחץ באמצעות לחצן העכבר הימני על הלחצן "המחשב שלי" (או "מחשב זה" ב- Windows 8.1)-> לחץ לחיצה שמאלית על מאפיינים-> לחץ לחיצה שמאלית על הכרטיסייה "מתקדם"-> לחץ באמצעות לחצן שמאל על כפתור "משתני סביבה …". הוסף משתנה משתמש חדש כדי להצביע על OpenCV (או x86 עבור מערכת 32 סיביות או x64 עבור מערכת 64 סיביות). אני כרגע במחשב 64 סיביות.

32 סיביות OPENCV_DIRC: / opencv / build / x86 / vc12

64 סיביות OPENCV_DIRC: / opencv / build / x64 / vc12

הוסף %OPENCV_DIR %\ bin ל- PATH משתנה המשתמש.

לדוגמה, משתנה המשתמש PATH שלי נראה כך …

לפני:

F: / Users / Johnny / Anaconda; C: / Users / Johnny / Anaconda / Scripts

לאחר:

F: / Users / Johnny / Anaconda; C: / Users / Johnny / Anaconda / Scripts;%OPENCV_DIR%\ bin

זהו, סיימנו! FFMPEG מוכן לשימוש!

שלב 4: בדוק כדי לאשר

בדוק כדי לאשר
בדוק כדי לאשר
בדוק כדי לאשר
בדוק כדי לאשר

עלינו לבדוק האם אנו יכולים כעת לבצע את אלה באנקונדה (באמצעות Spyder IDE):

  • ייבא חבילת OpenCV
  • השתמש בכלי FFMPEG (לקריאה/כתיבה/עיבוד סרטונים)

מבחן 1: האם נוכל לייבא OpenCV?

כדי לאשר כי אנקונדה יכולה כעת לייבא את חבילת OpenCV-Python (כלומר, cv2), להנפיק את אלה במסוף IPython:

יבוא cv2

הדפס cv2._ גרסה_

אם החבילה cv2 מיובאת בסדר ללא שגיאות, וגרסת cv2 מודפסת, אז כולנו טובים!

מבחן 2: האם נוכל להשתמש בקודק FFMPEG?

הניחו דגימה

input_video.mp4

קובץ וידאו בספרייה. אנו רוצים לבדוק האם אנו יכולים:

  • קרא קובץ וידאו.mp4 זה ו-
  • לכתוב קובץ וידאו חדש (יכול להיות.avi או.mp4 וכו ')

לשם כך עלינו לקבל קוד פיתון ניסוי, קראו לו test.py. מקם אותו באותה מדריך כמו המדגם

input_video.mp4

קוֹבֶץ.

זה מה

test.py

עשוי להיראות כמו (הערה: תודה רבה להצעות של פיט ווורן בשדה ההערות - החלפתי את קוד הבדיקה המקורי שלי בקוד שלו - אנא בדוק אותו בעצמך וספר לנו אם זה עובד טוב יותר):

יבוא cv2

cap = cv2. VideoCapture ("input_video.mp4") הדפס cap.isOpened () # True = קרא סרטון בהצלחה. שקר - לא מצליח לקרוא סרטון. fourcc = cv2. VideoWriter_fourcc (*'XVID') out = cv2. VideoWriter ("output_video.avi", fourcc, 20.0, (640, 360)) הדפס out.isOpened () # True = כתיבת סרטון בהצלחה. שקר - לא מצליח לכתוב סרטון. cap.release () out.release ()

בדיקה זו חשובה ביותר. אם ברצונך לעבד קבצי וידאו, יהיה עליך לוודא שאנקונדה / ספיידר IDE תוכל להשתמש ב- FFMPEG (codec video). לקח לי ימים עד שזה הצליח. אבל אני מקווה שזה ייקח לך הרבה פחות זמן!:) הערה: עוד טיפ חשוב מאוד בעת השימוש ב- Anaconda Spyder IDE. הקפד לבדוק את מדריך העבודה הנוכחי (CWD) !!!

שלב 5: צור קוד לזיהוי פנים

צור קוד לזיהוי פנים
צור קוד לזיהוי פנים
צור קוד לזיהוי פנים
צור קוד לזיהוי פנים

מטרה

במפגש זה,

  • נראה את היסודות של זיהוי פנים באמצעות מסווגי מפל המבוססים על Haar Feature
  • אנו נרחיב את אותו הדבר לגילוי עיניים וכו '

Haar-cascade איתור ב- OpenCV

כאן נעסוק באיתור. OpenCV כבר מכיל מסווגים רבים שהוכשרו מראש לפנים, עיניים, חיוך וכו '. קבצי XML אלה מאוחסנים ב- opencv/data/haarcascades/תיקייה. בואו ליצור גלאי פנים ועיניים עם OpenCV. ראשית עלינו לטעון את מסווגי ה- XML הדרושים. לאחר מכן טען את תמונת הקלט שלנו (או וידאו) במצב גווני אפור או שנוכל להשתמש במצלמה (לזיהוי פנים בזמן אמת)

ייבא numpy כמו np

יבוא cv2 face_cascade = cv2. CascadeClassifier ('F:/Program Files/opencv/sources/data/haarcascades/haarcascade_frontalface_default.xml') eye_cascade = cv2. CascadeClassifier ('F:/Program Files/opencv/sources/data/haarcascades.xml ') cap = cv2. VideoCapture (0) בעוד 1: ret, img = cap.read () אפור = cv2.cvtColor (img, cv2. COLOR_BGR2GRAY) פנים = 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] עיניים = eye_cascade.detectMultiScale (roi_gray) עבור (ex, ey, ew, eh) בעיניים: cv2.rectangle (roi_color, (ex, ey), (ex +ew, ey +eh), (0, 255, 0), 2) הדפס "נמצא" +str (len (פרצופים)) +"פנים (ים)" cv2.imshow ('img', img) k = cv2.waitKey (30) & 0xff אם k == 27: break cap.release () cv2.destroyAllWindows ()

שלב 6: צור קוד ליצירת מערך נתונים

צור קוד ליצירת מערך נתונים
צור קוד ליצירת מערך נתונים
צור קוד ליצירת מערך נתונים
צור קוד ליצירת מערך נתונים

אנו מבצעים זיהוי פנים, כך שתצטרך כמה תמונות פנים! אתה יכול ליצור מערך נתונים משלך או להתחיל באחד ממסדי הנתונים של הפנים הזמינים, https://face-rec.org/databases/ נותן לך סקירה עדכנית. שלושה מאגרי מידע מעניינים הם (חלקים מהתיאור מובאים מ-

  • AT & T Facedatabase
  • Yale Facedatabase A
  • Extended Yale Facedatabase B

כאן אני משתמש במערך הנתונים שלי …. בעזרת הקוד המפורט להלן:

ייבא 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 ('enter user id') sampleN = 0; בעוד 1: ret, img = cap.read () אפור = 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) אם מדגם N> 20: לשבור cap.release () cv2.destroyAllWindows ()

שלב 7: צור קוד לאימון המכיר

צור קוד לאימון המכיר
צור קוד לאימון המכיר

צור את הפונקציה להכנת מערך האימונים

כעת, נגדיר פונקציה

getImagesWithID (נתיב)

שלוקח את הנתיב המוחלט למאגר הנתונים של התמונות כארגומנט קלט ומחזיר צמד של 2 רשימות, האחת מכילה את הפרצופים שזוהו והשנייה מכילה את התווית המתאימה לאותה פרצוף. לדוגמה, אם אינדקס ה- ith ברשימת הפרצופים מייצג את האינדיבידואל החמישי במסד הנתונים, אז למיקום ה- ith המתאים ברשימת התוויות יש ערך שווה ל- 5.

כעת הפוך את פני הנתונים (שנוצרים בשלב 6) לקובץ.yml בעזרת הקוד המפורט להלן:

ייבוא מערכת הפעלה

יבוא numpy כמו np יבוא cv2 מתמונת ייבוא PIL # לזיהוי פנים נציג את מזהה LBPH זיהוי הפנים = cv2.createLBPHFaceRecognizer (); path = "F:/Program Files/projects/face_rec/facesData" def getImagesWithID (path): imagePaths = [os.path.join (path, f) for f in os.listdir (path)] # print image_path #getImagesWithID (נתיב) פנים = מזהים = עבור imagePath ב- imagePaths: # קרא את התמונה והמיר לפנים בגווני אפור Img = Image.open (imagePath).convert ('L') faceNP = np.array (facesImg, 'uint8') # קבל את התווית של מזהה התמונה = int (os.path.split (imagePath) [-1].split (".") [1]) # זיהוי הפנים בתמונה face.append (faceNP) IDs.append (מזהה) cv2.imshow ("הוספת פרצופים לטרנינג", faceNP) cv2.waitKey (10) החזר np.array (מזהים), פנים מזהים, פנים = getImagesWithID (נתיב) מזהה.טרנינג (פנים, מזהים) מזהה.שמור ("F:/Program Files/projects/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.createLBPHFaceR; 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 () אפור = cv2.cvtColor (img, cv2. COLOR_BGR2GRAY) פנים = face_cascade.detectMultiScale (אפור, 1.5, 5) עבור (x, y, w, h) בפנים: cv2.lectangle (img, (x, y), (x+w, y+h), (255, 0, 0), 2) id, conf = rec.predict (אפור [y: y+h, x: x+w]) if (id == 2): id = "alok" if id == 1: id = "alok" if id == 3: id = "anjali" if id == 4: id = "Gaurav" if id = = 5: id = 'rahul' if id == 6: id = "akshay" cv2.cv. PutText (cv2.cv.fromarray (img), str (id), (x, y+h), פונט, 255) cv2.imshow ('img', img) אם cv2.waitKey (1) == ord ('q'): שבירת cap.release ()

cv2.destroyAllWindows ()

ולבסוף התוצאה תגיע מול העיניים שלך … אתה יכול גם להוריד את קובץ ה- zip מתחת לקישור: לחץ כאן להורדת הקודים אז במדריך זה ביצענו את המשימה של זיהוי פנים+זיהוי באמצעות OpenCV ….. אם אתה כמו ההנחיה הזו …. plzzz הירשם לי והצביע עבורי … תודה חברים:)

מוּמלָץ: