קורס יסודות בינה מלאכותית RB33-11 : זיהוי פנים

 

חדש בשכונה

אימון בינה מלאכותית – לראות דרך קירות

https://www.facebook.com/reel/2095486234566653

חלק א : יצירת  וידאו  מטקסט – שיווק מוצר עם בינה מלאכותית

pika.art

text to video

 

 

 

יצירת  וידאו : מתמונה וטקסט – שיווק מוצר עם בינה מלאכותית

 

1.תרגיל כיתה

  1. צור סרטון וידאו לפי רעיון משלך  או גיפ נוסע בים או טיגרס  הופך לנשר

 

 


חלק ב : זיהוי פנים בעזרת בינה מלאכותית

 

 

 

 

 



 

InsightFace: מערכת זיהוי וניתוח פנים מבוססת בינה מלאכותית

מה זה InsightFace?

InsightFace היא ספריית בינה מלאכותית לניתוח פנים בתמונה או וידאו.
היא מאפשרת לבצע כמה פעולות חשובות:

  • זיהוי פנים בתמונה
  • ציור קופסה סביב כל פנים
  • מציאת נקודות פנים
  • זיהוי אדם לפי פנים
  • יצירת וקטור Face Embedding
  • הערכת גיל ומין
  • השוואה בין שתי תמונות פנים
  • חיפוש אדם בתוך מאגר תמונות

InsightFace לא משתמשת במודל אחד בלבד.
בפועל היא מפעילה כמה תתי־מודלים, כאשר כל תת־מודל אחראי על פעולה אחרת.

לדוגמה:

מה זה FaceAnalysis?

FaceAnalysis היא מחלקה בפייתון שמפעילה את כל תהליך ניתוח הפנים בצורה פשוטה.

במקום להריץ כל מודל בנפרד, כותבים:

והספרייה עושה מאחורי הקלעים כמה שלבים:

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

מה זה ONNX בתוך InsightFace?

רוב המודלים המוכנים של InsightFace מגיעים כקבצי:

ONNX הוא פורמט שמאפשר לשמור מודל AI מוכן ולהריץ אותו עם מנוע שנקרא:

כלומר InsightFace משתמשת במודלים מוכנים, למשל:

כל קובץ כזה הוא מודל AI אחר.

תתי־המודלים המרכזיים ב־InsightFace

1. Face Detection Model

זה המודל הראשון שפועל.

המטרה שלו היא למצוא פנים בתוך תמונה.

הקלט:

הפלט:

לדוגמה:

המודל הנפוץ לזיהוי פנים בחבילות החדשות הוא ממשפחת SCRFD.

שימושים:

  • זיהוי פנים בתמונה
  • זיהוי פנים ממצלמה בזמן אמת
  • ספירת אנשים
  • חיתוך פנים מתוך תמונה
  • שלב ראשון לפני זיהוי אדם

דוגמה לפלט:

המשמעות: נמצאו פנים במיקום הזה בתמונה, עם ביטחון גבוה.

2. Face Landmark Model — נקודות פנים

לאחר שמצאנו פנים, צריך להבין את המבנה שלהן.

מודל Landmark מזהה נקודות חשובות בפנים:

  • עיניים
  • אף
  • פה
  • סנטר
  • קווי פנים

ב־InsightFace קיימים מודלים כמו:

2D Landmarks

מודל 2D מחזיר נקודות על הפנים במישור התמונה.

לדוגמה:

שימושים:

  • יישור פנים לפני זיהוי
  • ציור נקודות פנים
  • ניתוח הבעה בסיסי
  • בדיקה אם הפנים פונות קדימה או הצידה

3D Landmarks

מודל 3D מנסה להעריך גם עומק ומבנה תלת־ממדי של הפנים.

שימושים:

  • הערכת זווית ראש
  • ניתוח תנוחת פנים
  • יישור מדויק יותר
  • יישומים מתקדמים ב־AR / VR

3. Face Recognition Model

זה אחד המודלים החשובים ביותר ב־InsightFace.

המטרה שלו היא לא רק למצוא פנים, אלא להבין מי האדם.

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

לדוגמה, המודל יכול להחזיר וקטור בגודל 512 מספרים.

ה־embedding הוא כמו “טביעת אצבע מתמטית” של הפנים.

אם שתי תמונות שייכות לאותו אדם, הווקטורים שלהן יהיו קרובים זה לזה.

אם הן שייכות לאנשים שונים, הווקטורים יהיו רחוקים יותר.

שימושים:

  • זיהוי אדם לפי תמונה
  • השוואה בין שתי תמונות פנים
  • חיפוש אדם בתוך מאגר
  • מערכת כניסה לפי פנים
  • סידור אלבום תמונות לפי אנשים

דוגמה:

4. Gender and Age Model

מודל זה מקבל פנים ומנסה להעריך:

לדוגמה:

שימושים:

  • סטטיסטיקה כללית
  • ניתוח קהל
  • מערכות דמו
  • מחקר
  • מיון כללי של תמונות

חשוב להבין: זה לא מדויק ב־100%.
הערכת גיל ומין היא חיזוי סטטיסטי, לא עובדה מוחלטת.

5. Face Swap Model

InsightFace כוללת גם שימושים בתחום החלפת פנים, למשל עם מודלים כמו:

מודל כזה מקבל פנים מקור ופנים יעד, ומנסה להחליף פנים בתמונה.

שימושים:

  • יצירת תוכן
  • וידאו ואפקטים
  • מחקר
  • אפליקציות בידור

חשוב להשתמש בזה בזהירות, עם הסכמה, וללא הטעיה או פגיעה בפרטיות.

חבילות מודלים נפוצות ב־InsightFace

InsightFace מספקת model packs, כלומר חבילות מוכנות של כמה מודלים יחד.

buffalo_l

זו אחת החבילות הנפוצות ביותר.

כוללת בדרך כלל:

מתאימה לרוב הפרויקטים.

יתרונות:

  • דיוק טוב
  • נוחה לשימוש
  • יורדת אוטומטית בספרייה
  • מתאימה ללמידה ולפיתוח

חסרונות:

  • כבדה יותר ממודלים קטנים
  • פחות מתאימה למיקרו־בקרים כמו ESP32

buffalo_s

חבילה קטנה ומהירה יותר.

מתאימה כאשר רוצים מהירות גבוהה יותר או מחשב חלש יותר.

שימושים:

  • מחשב חלש
  • אב־טיפוס מהיר
  • הרצה בזמן אמת עם פחות עומס

buffalo_sc

חבילה קטנה מאוד.

מתאימה למשימות בסיסיות יותר.

יתרון מרכזי:

חיסרון:

antelopev2

חבילה כבדה ומדויקת יותר.

מתאימה כאשר חשוב דיוק גבוה יותר בזיהוי פנים.

שימושים:

  • מחקר
  • מערכות עם מחשב חזק
  • השוואת פנים מדויקת יותר
  • בדיקות איכות

איך עובד התהליך המלא?

נניח שיש לנו תמונה עם כמה אנשים.

השלב הראשון הוא Detection:

לאחר מכן:

לאחר מכן:

לאחר מכן:

לבסוף:

התהליך המלא:

דוגמה בסיסית בפייתון

מה מחזיר האובייקט face?

כאשר מריצים:

מקבלים רשימה של פנים.

כל פנים יכולה להכיל:

שימוש רק בזיהוי פנים

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

זה מהיר יותר כי נטען רק מודל detection.

שימוש רק בזיהוי אדם

אם רוצים לזהות מי האדם, צריך לפחות:

בפועל כדאי גם להשתמש ב־Landmarks כדי ליישר את הפנים לפני יצירת embedding.

שימושים מעשיים של InsightFace

1. מערכת נוכחות

מצלמה מצלמת אדם בכניסה.

המערכת מזהה פנים, יוצרת embedding, ומשווה מול מאגר עובדים.

2. פתיחת דלת לפי פנים

אפשר להשתמש בזיהוי פנים כדי לזהות משתמש מורשה.

חשוב להוסיף מנגנון אבטחה נוסף, למשל כרטיס, סיסמה או liveness detection.

3. סידור אלבום תמונות

אפשר לסרוק תיקיית תמונות ולחלק את התמונות לפי אנשים.

4. חיפוש אדם במאגר

נותנים תמונה אחת של אדם, והמערכת מחפשת תמונות דומות במאגר.

5. ניתוח וידאו

אפשר להריץ את InsightFace על פריימים מווידאו:

6. בדיקות מחקר

אפשר להשתמש ב־InsightFace כדי ללמוד:

  • איך עובד embedding
  • איך משווים וקטורים
  • איך בונים מערכת זיהוי פנים
  • איך משלבים ONNX Runtime בפרויקט AI

האם InsightFace מתאים ל־ESP32?

בדרך כלל לא.

המודלים של InsightFace, במיוחד buffalo_l ו־antelopev2, כבדים מדי למיקרו־בקרים כמו ESP32 רגיל.

הם מתאימים יותר ל:

ל־ESP32 עדיף להשתמש במודלים קטנים מאוד כמו TinyML, או לבצע את הזיהוי במחשב/שרת ולשלוח רק את התמונה או הנתונים מה־ESP32.

האם אפשר להריץ InsightFace ב־C או C++?

כן, אבל לא דרך FaceAnalysis של פייתון.

ב־C/C++ אפשר להריץ את קבצי ONNX ישירות בעזרת ONNX Runtime, אבל צריך לבנות לבד:

בפייתון זה פשוט יותר כי FaceAnalysis עושה את רוב העבודה לבד.

נקודה חשובה: פרטיות ורישוי

זיהוי פנים הוא תחום רגיש.

לפני שימוש במערכת כזאת במוצר אמיתי, חשוב לבדוק:

  • האם יש הסכמה של האנשים המצולמים
  • איפה נשמרות התמונות
  • איפה נשמרים ה־embeddings
  • האם השימוש חוקי במדינה שלך
  • האם מותר להשתמש במודלים למטרה מסחרית

בנוסף, הקוד של InsightFace פתוח, אבל חלק מהמודלים המוכנים מוגבלים לשימוש מחקרי לא־מסחרי, אלא אם מקבלים רישיון מתאים.

סיכום

InsightFace היא מערכת חזקה מאוד לניתוח וזיהוי פנים.

היא בנויה מכמה תתי־מודלים:

הכוח של InsightFace הוא שהיא מחברת את כל השלבים האלו לממשק פשוט:

מאחורי שורה אחת כזאת פועלים כמה מודלי AI שונים.

לכן InsightFace מתאימה מאוד ללימוד, מחקר, אב־טיפוס, מערכות זיהוי פנים, אלבומי תמונות חכמים, חיפוש פנים, ומערכות ראייה ממוחשבת מתקדמות.

 


מה זה ONNX ולמה משתמשים בו במודלים של בינה מלאכותית?

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

לדוגמה:

או:

כאן נכנס לתמונה פורמט חשוב מאוד שנקרא ONNX.

מה זה ONNX?

ONNX הוא קיצור של:

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

במילים פשוטות, ONNX הוא כמו “קובץ אריזה” למודל AI מוכן.
אפשר לאמן מודל ב־TensorFlow או PyTorch, ואז להמיר אותו לקובץ:

לאחר מכן אפשר להריץ את המודל הזה בלי סביבת האימון המקורית.

מה ההבדל בין TensorFlow לבין ONNX?

TensorFlow הוא Framework לבנייה, אימון והרצה של מודלים.
ONNX הוא לא Framework לאימון, אלא פורמט לשמירת מודל מוכן.

נושא TensorFlow ONNX
בניית מודל כן לא
אימון מודל כן לא
שמירת מודל מוכן כן כן
הרצת מודל כן כן, עם ONNX Runtime
מתאים למוצר סופי כן, אבל כבד יותר כן, קל ונייד יותר
שפת הרצה בעיקר Python, C++, ועוד Python, C, C++, C#, Java ועוד

מה זה ONNX Runtime?

ONNX הוא הקובץ של המודל.
ONNX Runtime הוא המנוע שמריץ את המודל.

הזרימה נראית כך:

לדוגמה:

למה לא להריץ תמיד ישירות מ־TensorFlow?

אפשר להריץ מודל ישירות מ־TensorFlow, וזה עובד טוב מאוד.

אבל במוצר אמיתי לפעמים רוצים משהו קל יותר, מהיר יותר ונוח יותר להפצה.
למשל:

במקרים כאלה ONNX Runtime יכול להיות פתרון נוח מאוד, כי הוא מאפשר להריץ מודל מוכן בלי כל סביבת האימון של TensorFlow או PyTorch.

דוגמה מעולם זיהוי פנים: InsightFace

ספריית InsightFace משתמשת במודלים מוכנים בפורמט ONNX.

כאשר כותבים בפייתון:

הספרייה יכולה לטעון מודלים כמו:

כל מודל אחראי על פעולה אחרת.

לדוגמה, מודל detection מקבל תמונה ומחזיר קופסאות סביב הפנים:

דוגמה בסיסית:

במקרה הזה, המשתמש לא מאמן מודל חדש.
הוא משתמש במודל מוכן שכבר אומן מראש.

דוגמה עם רשת CNN פשוטה

נניח שאימנו רשת CNN שמזהה האם בתמונה יש חתול או כלב.

בשלב האימון:

לאחר שהמודל מוכן, אפשר להמיר אותו ל־ONNX:

ואז להריץ אותו במוצר:

דוגמה רעיונית לרשת CNN:

הרשת הזאת יכולה ללמוד לסווג תמונות לשתי מחלקות.

אחרי האימון אפשר לשמור את המודל ולהמיר אותו ל־ONNX:

לאחר ההמרה, אפשר להריץ את המודל עם ONNX Runtime:

למה ONNX חשוב? (והקשר ל  דוגמה מעולם זיהוי פנים: InsightFace )

 

 

 

 

ONNX חשוב כי הוא מפריד בין שלב האימון לשלב ההפצה.

בשלב האימון אפשר להשתמש בכלים חזקים כמו:

אבל בשלב ההרצה אפשר להשתמש בקובץ ONNX קל ונוח יותר:

זה מאפשר לקחת מודל שאומן במחשב אחד, ולהריץ אותו במחשב אחר, בשפה אחרת, או במערכת קטנה יותר.

סיכום

ONNX הוא פורמט פתוח למודלים מוכנים של בינה מלאכותית.

הוא לא מחליף את TensorFlow או PyTorch בשלב האימון, אלא עוזר בשלב ההרצה וההפצה.

הדרך הנפוצה היא:

במערכות כמו זיהוי פנים, מצלמות חכמות, רובוטיקה, שרתי AI ומערכות Edge, שימוש ב־ONNX יכול להפוך את המודל לנייד, מהיר ונוח יותר להרצה.

 


תרגיל כיתה 1

  1. צור קוד לקולאב בוא טענים תמונה מה PC 1 ותמונה PC 2 ומשווה בין שתי התמונות
  2. בנה קוד בקולאב שמחפש תמונה בתוך תמונה  0  טען תמונה לחיפוש ותמונה בא מחפשים  את הפנים צור כתוב אם התמונה נמצא או לא
  3.  בקולאב  – מקבלת תמונה ומטשטשטת בשחור את כל הפנים שיש בתמונה   בנה בעזרת מודל     InsightFace
  4. בנה בעזרת a,i studio אפליקציה מבוססת InsightFace

 

 

 


 

 

 


 

 

 

 

 

 

 

 

Face Comparison with InsightFace

:embedding vector

mbedding Vector?

  • An embedding is just a list of numbers.

  • These numbers describe the important features of a face (shape of nose, distance between eyes, jawline, etc.).

  • The list is usually long (for InsightFace, often 512 numbers).

  • Together, those numbers create a unique “fingerprint” of the face.


Why is it useful?

  • The raw image (like 100×100 pixels = 10,000 numbers) is too big to compare directly.

  • The embedding reduces this to 512 numbers that keep only the most important face features.

  • Two embeddings from the same person will look very similar.

  • Two embeddings from different people will look very different.


Simple Example

Think of it like describing a person in short words:

  • Instead of writing a full biography, you say:

    • Height: 1.8

    • Hair: 0.3

    • Skin tone: 0.7

    • Nose: 0.5

    • Smile: 0.9

This short list is the embedding vector.
It’s not the full photo, but enough to recognize who it is.

This example shows how to use InsightFace to compare two face images and decide if they belong to the same person. The program uses cosine similarity between face embeddings.

Explanation

  • 512 numbers total → this is the embedding vector.

  • Each number captures some hidden feature of the face.

  • The exact meaning of each number is not human-readable (like “eye width” or “nose length”), but together they form the face fingerprint.

When comparing two faces, InsightFace checks how close these 512-number fingerprints are, usually using cosine similarity.


Step 1 – Imports and setup

import sys
print(sys.executable)

import cv2
import numpy as np
from insightface.app import FaceAnalysis

  • sys.executable prints the Python path in use.

  • cv2 is OpenCV for handling images.

  • numpy is used for math.

  • FaceAnalysis is the InsightFace tool for detection and embeddings.


Step 2 – Load the InsightFace model

app = FaceAnalysis(name="buffalo_l")
app.prepare(ctx_id=-1, det_size=(640, 640))
  • buffalo_l is a strong pre-trained face recognition model.

  • ctx_id=-1 forces CPU usage.

  • det_size=(640,640) sets the detection image size.


Step 3 – Load two images

img1 = cv2.imread(r"d:\temp\trump1.jpeg")
img2 = cv2.imread(r"d:\temp\trump1.jpeg")

if img1 is None or img2 is None:
raise FileNotFoundError("Could not open one of the images.")

  • Loads the two face images from disk.

  • Raises an error if any image cannot be read.


Step 4 – Detect and encode faces

faces1 = app.get(img1)
faces2 = app.get(img2)

if len(faces1) == 0 or len(faces2) == 0:
raise ValueError("No face detected in one of the images.")

embedding1 = faces1[0].embedding
embedding2 = faces2[0].embedding

print("Embedding shape:", embedding1.shape)

  • Detects faces in both images.

  • Each face object contains bounding box, landmarks, and a 512-dimensional embedding.

  • Here we take the first detected face.


Step 5 – Cosine similarity function

def cosine_similarity(a, b):
return np.dot(a, b) / (np.linalg.norm(a) * np.linalg.norm(b))

similarity = cosine_similarity(embedding1, embedding2)
print(f"Cosine similarity: {similarity:.4f}")

  • Cosine similarity measures the angle between two vectors.

  • Value close to 1.0 means the faces are very similar.

  • Value near 0.0 means no relation.


Step 6 – Decision

threshold = 0.35
if similarity > threshold:
print("Result: SAME person")
else:
print("Result: DIFFERENT persons")
  • If similarity is above the threshold, the images are considered the same person.

  • Threshold can be tuned (typical range: 0.3–0.5).


How it works

  1. InsightFace detects and aligns the face.

  2. It encodes the face into a vector of 512 numbers (the embedding).

  3. Cosine similarity compares how close two vectors are.

  4. If the vectors are close enough, the faces are the same person.

 


 

compares Trump1, Trump2, and Obama embeddings, and rewrite it with step-by-step remarks so even someone new can follow

 

 

 

 

תרגיל כיתה 1