- רכיבים נדרשים
- התקנת OpenCV ב- Raspberry Pi
- כיצד לזהות את חלקי הפנים באמצעות dlib
- תכנות ה- Raspberry Pi לזיהוי ציוני דרך פנים
- בדיקת זיהוי חלקי הפנים
איתור ציוני דרך בפנים הוא תהליך של גילוי חלקים שונים בפנים כמו הגבות, העיניים, האף, הפה והלסת. ישנם יישומים רבים המשתמשים בטכניקות זיהוי פנים ציון דרך.
בעבר בנינו מערכת זיהוי פנים באמצעות OpenCV, היום נשתמש באותה OpenCV עם Raspberry Pi לזיהוי נקודות ציון פנים. מודול גלאי ציוני פנים מאומן מראש מספריית ה- dlib ישמש לזיהוי מיקום מבני הפנים העיקריים על הפנים ופייתון OpenCV ישמש להדמיית חלקי הפנים שזוהו.
רכיבים נדרשים
רכיבי חומרה
- פטל פי 3
- מודול מצלמת פי
תוכנה ושירותים מקוונים
- OpenCV
- דליב
- פייתון 3
לפני שנמשיך בזיהוי ציוני דרך פנים של Raspberry Pi 3 , ראשית, עלינו להתקין בפרויקט זה OpenCV, imutils, dlib, Numpy ועוד כמה תלות. OpenCV משמש כאן לעיבוד תמונה דיגיטלית. היישומים הנפוצים ביותר של עיבוד תמונה דיגיטלי הם זיהוי אובייקטים, זיהוי פנים ומונה אנשים.
למידע נוסף על אופן הממשק של מצלמת Pi עם Raspberry Pi, עקוב אחר ההדרכות הקודמות שלנו.
התקנת OpenCV ב- Raspberry Pi
כאן תשמש ספריית OpenCV לסורק QR Raspberry Pi. כדי להתקין את OpenCV, עדכן תחילה את ה- Raspberry Pi.
עדכון sudo apt-get
לאחר מכן התקן את התלות הנדרשת להתקנת OpenCV ב- Raspberry Pi שלך.
sudo apt-get install libhdf5-dev -y sudo apt-get install libhdf5-serial-dev –y sudo apt-get install libatlas-base-dev –y sudo apt-get install libjasper-dev -y sudo apt-get install libqtgui4 –Y sudo apt-get install libqt4-test –y
לאחר מכן, התקן את OpenCV ב- Raspberry Pi באמצעות הפקודה שלהלן.
pip3 להתקין opencv-contrib-python == 4.1.0.25
בעבר השתמשנו ב- OpenCV עם Raspberry pi ויצרנו עליו הרבה מדריכים.
- התקנת OpenCV ב- Raspberry Pi באמצעות CMake
- זיהוי פנים בזמן אמת עם Raspberry Pi ו- OpenCV
- זיהוי לוחית רישוי באמצעות Raspberry Pi ו- OpenCV
- הערכת גודל ההמון באמצעות OpenCV ו- Raspberry Pi
יצרנו גם סדרה של מדריכי OpenCV החל מרמת המתחילים.
התקנת imutils : imutils משמש לביצוע כמה פונקציות עיבוד תמונה נחוצות כגון תרגום, סיבוב, שינוי גודל, השלד והצגת תמונות Matplotlib קלות יותר באמצעות OpenCV. אז התקן imutils באמצעות הפקודה הבאה:
pip3 להתקין imutils
התקנת dlib: dlib הוא ערכת הכלים המודרנית המכילה אלגוריתמים של Machine Learning וכלים לבעיות בעולם האמיתי. השתמש בפקודה הבאה כדי להתקין את ה- dlib.
pip3 להתקין dlib
התקנת NumPy : NumPy היא ספריית הליבה למחשוב מדעי המכילה אובייקט רב-ממדי n חזק, מספק כלים לשילוב C, C ++ וכו '.
Pip3 התקן קהה
כיצד לזהות את חלקי הפנים באמצעות dlib
אנו נשתמש בגלאי ציון הפנים הפנים של ספריית dlib כדי לזהות את המיקום של 68 (x, y) -קואורדינטות הממפות למבני פנים על הפנים. מנבא ציוני דרך של dlib מאומן במערך הנתונים iBUG 300-W. תמונה המכילה את האינדקסים של 68 הקואורדינטות מוצגת להלן:
תכנות ה- Raspberry Pi לזיהוי ציוני דרך פנים
קוד פיתון מלא לזיהוי חלקי פנים עם גלאי נקודות ציון הפנים של ה- dlib ניתן בסוף העמוד. כאן אנו מסבירים כמה חלקים חשובים בקוד להבנה טובה יותר.
לכן, כרגיל, התחל את הקוד על ידי הכללת כל הספריות הנדרשות.
מ imutils יבוא face_utils ייבוא מטומטם כמו np יבוא argparse יבוא imutils ייבוא dlib ייבוא cv2 מ- picamera.array ייבוא PiRGBArray מ picamera ייבוא PiCamera
לאחר מכן אתחל את אובייקט המצלמה והגדר את הרזולוציה על (640, 480) וקצב המסגרות על 30 fps
camera = PiCamera () camera.resolution = (640, 480) camera.framerate = 30
עכשיו בשורות הבאות, השתמש בניתוח הטיעונים כדי לספק את הנתיב לחיזוי ציוני פנים.
ap = argparse.ArgumentParser () ap.add_argument ("- p", "- Shape-Predictor", חובה = נכון, עזרה = "נתיב חיזוי ציון פנים") args = vars (ap.parse_args ())
בשורות הבאות, אתחל את גלאי הפנים המאומנים מראש של ה- DOG המבוסס על HOG והעמיס את מנבא ציוני הפנים שעבר הכשרה מוקדמת.
גלאי = dlib.get_frontal_face_detector () מנבא = dlib.shape_predictor (args)
ואז השתמש בפונקציה capture_continuous כדי להתחיל לצלם את המסגרות ממצלמת ה- Raspberry Pi.
למסגרת במצלמה. capture_continuous (rawCapture, format = "bgr", use_video_port = True): image = frame.array cv2.imshow ("Frame", image) key = cv2.waitKey (1) & 0xFF rawCapture.truncate (0)
השתמש במקש המקלדת 'S' כדי ללכוד מסגרת מסוימת. לאחר מכן שנה את גודל התמונה שצולמה והמיר אותה לגודל אפור.
אם מקש == ord ("s"): תמונה = imutils.resize (תמונה, רוחב = 400) אפור = cv2.cvtColor (תמונה, cv2.COLOR_BGR2GRAY)
השתמש בפונקציית הגלאי של ספריית ה- dlib כדי לזהות את הפרצופים בתמונה שצולמה.
rects = גלאי (אפור, 1)
צלם את התמונה בה בוצעה איתור פנים, קבע את ציוני הפנים והמיר את 68 הנקודות למערך NumPy. דלג על כל אחד מאזורי הפנים בנפרד.
עבור (i, rect) במניין (rects): צורה = מנבא (אפור, ישר) צורה = face_utils.shape_to_np (צורה)
לאחר מכן, קח עותק של התמונה המקורית והשתמש בה לולאה כדי לצייר את שם חלק הפנים על התמונה. צבע הטקסט יהיה אדום, תוכלו לשנות אותו לצבע אחר על ידי שינוי ערכי ה- RGB.
עבור (שם, (i, j)) ב- face_utils.FACIAL_LANDMARKS_IDXS.items (): clone = image.copy () cv2.putText (clone, name, (10, 30), cv2.FONT_HERSHEY_SIMPLEX, 0.7, (0, 0, 255), 2)
כעת נעבור על חלקי הפנים שזוהו ונשתמש בפונקציית הציור של OpenCV כדי לצייר מעגלים על חלקי פנים אלה. אתה יכול לעקוב אחר מסמך OpenCV זה למידע נוסף על פונקציות הציור
עבור (x, y) בצורה: cv2.circle (שיבוט, (x, y), 1, (0, 0, 255), -1)
כעת בשורות הבאות, נחלץ כל חלק פנים כתמונה נפרדת על ידי חישוב תיבת התוחם של הקואורדינטות של חלק פנים ספציפי. גודל התמונה שחולצה ישתנה ל -250 פיקסלים.
(x, y, w, h) = cv2.boundingRect (np.array (])) roi = image roi = imutils.resize (roi, width = 250, inter = cv2.INTER_CUBIC)
כעת בשורות הקוד של הקוד, הציגו את חלקי הפנים עם שמם ותמונה נפרדת של אותו חלק. השתמש במקש ESC כדי לשנות את אזור הפנים.
cv2.imshow ("ROI", roi) cv2.imshow ("תמונה", שיבוט) cv2.waitKey (0)
בדיקת זיהוי חלקי הפנים
כדי לבדוק את הפרויקט, צור ספריה ונווט אליו באמצעות הפקודות הבאות:
mkdir face-part-detector cd cd-face-part-detector
הורד כעת את הקובץ shape_predictor_68_face_landmarks.dat מקישור זה, ואז חילץ והעתק את הקובץ shape_predictor_68_face_landmarks.dat בתוך ספרייה זו, ואז פתח קובץ חדש בשם detect.py והדבק את הקוד שמופיע למטה.
כעת הפעל את קוד הפיתון באמצעות הפקודה הבאה:
python3 detect.py - צורת-מנבא צורה_נבואה_68_פנים_דגמים.dat
תראה חלון המציג תצוגה חיה מהמצלמה שלך. לאחר מכן לחץ על מקש 'S' כדי לבחור מסגרת מהזרם החי. תראה נקודות אדומות באזור הפה שלך. השתמש במקש ESC כדי לראות את חלקי הפנים האחרים.
קוד פיתון מלא וסרטון הדגמה מופיעים להלן.