מדריך לזיהוי של זיהוי פנים לאתרים

המשימה 'ציון פנים' של MediaPipe מאפשרת לזהות ציוני דרך והבעות פנים בתמונות ובסרטונים. בעזרת המשימה הזו אפשר לזהות הבעות פנים אנושיות, להחיל פילטרים ואפקטים לפנים וליצור דמויות וירטואליות. במשימה הזו נעשה שימוש במודלים של למידת מכונה (ML) שיכולים לעבוד עם תמונות בודדות או עם רצף רציף של תמונות. המשימה מפיקה ציוני פנים תלת ממדיים, ציוני מיזוג (מקדמים שמייצגים הבעה של פנים) להסקת משטחי פנים מפורטים בזמן אמת ומטריצות טרנספורמציה כדי לבצע את הטרנספורמציות שנדרשות ליצירת האפקטים.

בהוראות האלה מוסבר איך להשתמש ב-Face Scoreer לאפליקציות אינטרנט ו-JavaScript. למידע נוסף על היכולות, המודלים ואפשרויות ההגדרה של המשימה הזו, קראו את הסקירה הכללית.

קוד לדוגמה

הקוד לדוגמה של Face Looker מספק יישום מלא של המשימה הזו ב-JavaScript, לעיונך. הקוד הזה עוזר לכם לבדוק את המשימה הזו ולהתחיל ליצור אפליקציה משלכם לזיהוי הפנים. תוכלו להציג, להריץ ולערוך את קוד לדוגמה של Face Unlocker באמצעות דפדפן האינטרנט בלבד.

הגדרה

בקטע הזה מתוארים שלבי המפתח להגדרת סביבת הפיתוח באופן ספציפי לשימוש ב-Face Scoreer. למידע כללי על הגדרת סביבת הפיתוח של האתר ושל JavaScript, כולל הדרישות לגרסת הפלטפורמה, קראו את מדריך ההגדרה לאתרים.

חבילות JavaScript

הקוד של Face Looker זמין דרך חבילת @mediapipe/tasks-vision NPM של MediaPipe. אפשר למצוא ולהוריד את הספריות האלה לפי ההוראות במדריך ההגדרה של הפלטפורמה.

אתם יכולים להתקין את החבילות הנדרשות דרך NPM, באמצעות הפקודה הבאה:

npm install @mediapipe/tasks-vision

אם רוצים לייבא את קוד המשימה דרך שירות של רשת להעברת תוכן (CDN), מוסיפים את הקוד הבא בתג <head> בקובץ ה-HTML:

<!-- You can replace JSDeliver with another CDN if you prefer to -->
<head>
  <script src="https://cdn.jsdelivr.net/npm/@mediapipe/tasks-vision/vision_bundle.js"
    crossorigin="anonymous"></script>
</head>

מודל

למשימה MediaPipe Face Looker נדרשת מודל מאומן שתואם למשימה הזו. למידע נוסף על המודלים הזמינים המאומנים לשימוש ב-Face Unlocker, עיינו בסקירה הכללית על המשימות בקטע 'מודלים'.

בחרו והורידו מודל, ולאחר מכן שמרו אותו בספריית הפרויקט שלכם:

<dev-project-root>/app/shared/models/

יצירת המשימה

השתמשו באחת מהפונקציות של Face Looker createFrom...() כדי להכין את המשימה להרצת מסקנות. השתמשו בפונקציה createFromModelPath() עם נתיב יחסי או מוחלט לקובץ המודל שעבר אימון. אם המודל שלכם כבר נטען בזיכרון, אתם יכולים להשתמש בשיטה createFromModelBuffer().

הקוד לדוגמה הבא מדגים את השימוש בפונקציה createFromOptions() כדי להגדיר את המשימה. הפונקציה createFromOptions מאפשרת להתאים אישית את Face landmarker באמצעות אפשרויות הגדרה. למידע נוסף, קראו את המאמר אפשרויות ההגדרה.

הקוד הבא מדגים איך ליצור ולהגדיר את המשימה עם אפשרויות בהתאמה אישית:

const vision = await FilesetResolver.forVisionTasks(
  // path/to/wasm/root
  "https://cdn.jsdelivr.net/npm/@mediapipe/tasks-vision@latest/wasm"
);
const faceLandmarker = await faceLandmarker.createFromOptions(
    vision,
    {
      baseOptions: {
        modelAssetPath: "path/to/model"
      },
      runningMode: runningMode
    });

אפשרויות הגדרה

המשימה הזו כוללת את אפשרויות ההגדרה הבאות לאפליקציות אינטרנט ו-JavaScript:

שם האפשרות תיאור טווח ערכים ערך ברירת מחדל
running_mode מגדיר את מצב הריצה של המשימה. יש שני מצבים:

IMAGE: המצב שבו ניתן להזין תמונה יחידה.

וידאו: המצב של פריימים מפוענחים של סרטון או בשידור חי של נתוני קלט, למשל ממצלמה.
{IMAGE, VIDEO} IMAGE
numFaces המספר המקסימלי של פנים שניתן לזהות באמצעות FaceLandmarker. ההחלקה מתבצעת רק כאשר הערך של num_faces מוגדר ל-1. Integer > 0 1
minFaceDetectionConfidence ציון הסמך המינימלי שצריך לעמוד בו כדי שזיהוי הפנים ייחשב כמוצלח. Float [0.0,1.0] 0.5
minFacePresenceConfidence ציון המהימנות המינימלי של ציון נוכחות הפנים בזיהוי של ציון הפנים. Float [0.0,1.0] 0.5
minTrackingConfidence ציון הסמך המינימלי הנדרש למעקב אחר זיהוי הפנים כדי להיחשב כמוצלח. Float [0.0,1.0] 0.5
outputFaceBlendshapes האם Face Looker יוצר מיקסים של פנים. שילובים של הפנים משמשים להצגת התבנית התלת-ממדית לזיהוי הפנים. Boolean False
outputFacialTransformationMatrixes האם סמן הפלט הוא פלט של מטריצת טרנספורמציית הפנים. התכונה 'סמן פנים' משתמשת במטריצה כדי לשנות את ציוני הדרך של הפנים מתבנית קנונית לזיהוי פנים לזיהוי הפנים שזוהו. כך המשתמשים יכולים להחיל אפקטים על ציוני הדרך שזוהו. Boolean False

הכנת הנתונים

התכונה 'ציוני פנים' יכולה לזהות פנים בתמונות בכל פורמט שנתמך על ידי הדפדפן המארח. המשימה מטפלת גם בעיבוד מראש של קלט נתונים, כולל שינוי הגודל, סיבוב והנירמול של הערכים. כדי לסמן פנים בסרטונים, תוכלו להשתמש ב-API כדי לעבד במהירות פריים אחד בכל פעם ולהשתמש בחותמת הזמן של הפריים כדי לקבוע מתי הפנים מופיעות בסרטון.

מריצים את המשימה.

'הכלי לציון פנים' משתמש בשיטות detect() (עם מצב ריצה IMAGE) ו-detectForVideo() (עם מצב ריצה VIDEO) כדי ליצור מסקנות. המשימה מעבדת את הנתונים, מנסה לסמן פנים מוכרות ואז מדווחת על התוצאות.

קריאות ל-methods detect() ו-detectForVideo() של Face BrandConnect פועלות באופן סינכרוני וחוסמות את ה-thread של ממשק המשתמש. אם מזהים פנים בפריימים של וידאו ממצלמת המכשיר, כל זיהוי יחסום את התהליכון הראשי. כדי למנוע זאת, אפשר להטמיע עובדי אינטרנט כדי להריץ את השיטות detect() ו-detectForVideo() ב-thread אחר.

הקוד הבא מדגים איך מבצעים את העיבוד באמצעות מודל המשימה:

תמונה

const image = document.getElementById("image") as HTMLImageElement;
const faceLandmarkerResult = faceLandmarker.detect(image);

וידאו

await faceLandmarker.setOptions({ runningMode: "VIDEO" });

let lastVideoTime = -1;
function renderLoop(): void {
  const video = document.getElementById("video");

  if (video.currentTime !== lastVideoTime) {
    const faceLandmarkerResult = faceLandmarker.detectForVideo(video);
    processResults(detections);
    lastVideoTime = video.currentTime;
  }

  requestAnimationFrame(() => {
    renderLoop();
  });
}

להטמעה מלאה יותר של הרצת משימה של Face שבהמשך, ראו את הקוד לדוגמה.

טיפול בתוצאות והצגתן

'מסמן הפנים' מחזיר אובייקט תוצאה בכל הרצת זיהוי. אובייקט התוצאה מכיל רשת פנים לכל פנים שזוהו, עם קואורדינטות לכל ציון פנים. אופציונלי: האובייקט שמתקבל יכול להכיל גם צורות מיזוג שמציינות הבעות פנים, ומטריצת שינוי פנים כדי להחיל אפקטים של זיהוי פנים על ציוני הדרך שזוהו.

דוגמה לנתוני הפלט מהמשימה הזאת:

FaceLandmarkerResult:
  face_landmarks:
    NormalizedLandmark #0:
      x: 0.5971359014511108
      y: 0.485361784696579
      z: -0.038440968841314316
    NormalizedLandmark #1:
      x: 0.3302789330482483
      y: 0.29289937019348145
      z: -0.09489090740680695
    ... (478 landmarks for each face)
  face_blendshapes:
    browDownLeft: 0.8296722769737244
    browDownRight: 0.8096957206726074
    browInnerUp: 0.00035583582939580083
    browOuterUpLeft: 0.00035752105759456754
    ... (52 blendshapes for each face)
  facial_transformation_matrixes:
    [9.99158978e-01, -1.23036895e-02, 3.91213447e-02, -3.70770246e-01]
    [1.66496094e-02,  9.93480563e-01, -1.12779640e-01, 2.27719707e+01]
    ...

התמונה הבאה מציגה המחשה של פלט המשימה:

הקוד לדוגמה של Face BrandConnect מדגים איך להציג את התוצאות שהוחזרו מהמשימה. ראו את הקוד לדוגמה.