תוכן עניינים:
- שלב 1: התקן את אנקונדה
- שלב 2: הורד את חבילת קורות חיים פתוחים
- שלב 3: הגדר משתנים סביבתיים
- שלב 4: בדוק כדי לאשר
- שלב 5: צור קוד לזיהוי פנים
- שלב 6: צור קוד ליצירת מערך נתונים
- שלב 7: צור קוד לאימון המכיר
- שלב 8: צור קוד כדי לזהות את הפנים והתוצאה
וִידֵאוֹ: זיהוי פנים+זיהוי: 8 שלבים (עם תמונות)
2024 מְחַבֵּר: John Day | [email protected]. שונה לאחרונה: 2024-01-30 09:17
זוהי דוגמה פשוטה לריצת זיהוי פנים וזיהוי באמצעות 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 הירשם לי והצביע עבורי … תודה חברים:)
מוּמלָץ:
מראה זיהוי פנים עם תא סודי: 15 שלבים (עם תמונות)
מראה זיהוי פנים עם תא סודי: תמיד סיקרן אותי התא הסודי היצירתי המשמש בסיפורים, סרטים וכדומה. לכן, כשראיתי את התחרות הסודית החלטתי להתנסות בעצמי ברעיון ולעשות מראה רגילה למראה הפותחת
זיהוי פנים וזיהוי - מזהה פנים Arduino באמצעות OpenCV Python ו- Arduino .: 6 שלבים
זיהוי פנים וזיהוי | מזהה פנים Arduino באמצעות OpenCV Python ו- Arduino .: זיהוי פנים AKA זיהוי פנים הוא אחת התכונות החשובות ביותר בטלפונים ניידים בימינו. אז הייתה לי שאלה " האם אפשר לקבל מזהה פנים לפרוייקט Arduino שלי " והתשובה היא כן … המסע שלי התחיל כדלקמן: שלב 1: גישה אלינו
פעמון דלת עם זיהוי פנים: 7 שלבים (עם תמונות)
פעמון דלת עם זיהוי פנים: מוטיבציה לאחרונה, היה גל של שוד בארצי שמכוון לאנשים מבוגרים בבתיהם. בדרך כלל, הגישה ניתנת על ידי הדיירים עצמם מכיוון שהמבקרים משכנעים אותם שהם מטפלים/אחיות. זה
זיהוי פנים בזמן אמת ב- RaspberryPi-4: 6 שלבים (עם תמונות)
זיהוי פנים בזמן אמת ב- RaspberryPi-4: במדריך זה אנו הולכים לבצע זיהוי פנים בזמן אמת ב- Raspberry Pi 4 עם Shunya O/S באמצעות ספריית Shunyaface. תוכל להשיג קצב מסגרות זיהוי של 15-17 ב- RaspberryPi-4 על ידי ביצוע הדרכה זו
מערכת אבטחת זיהוי פנים למקרר עם פטל פטל: 7 שלבים (עם תמונות)
מערכת אבטחת זיהוי פנים למקרר עם פטל פטל: גלישה באינטרנט גיליתי שמחירי מערכות אבטחה משתנים בין 150 $ ל 600 $ ומעלה, אך לא ניתן לשלב את כל הפתרונות (אפילו היקרים מאוד) עם אחרים כלים חכמים בביתך! לדוגמה, אינך יכול להגדיר