המשימה 'מסווג תמונות של MediaPipe' מאפשרת לכם לבצע סיווג של תמונות. אפשר להשתמש במשימה הזאת כדי להבין מה תמונה מייצגת בקבוצה של קטגוריות מוגדרות בזמן האימון. ההוראות הבאות מראות איך להשתמש במסווג התמונות ב-Python.
אפשר לראות את המשימה הזו באתר . עבור לקבלת מידע נוסף על היכולות, המודלים ואפשרויות התצורה של במשימה הזאת, עיינו בסקירה כללית.
קוד לדוגמה
הקוד לדוגמה של מסווג התמונות מספק הטמעה מלאה של ב-Python, לעיונך. הקוד הזה עוזר לכם לבדוק את המשימה הזו ולקבל התחלתם ליצור מסַווג תמונות משלכם. ניתן להציג, להריץ ולערוך דוגמה למסווג תמונות קוד באמצעות דפדפן האינטרנט בלבד.
אם אתם מטמיעים את מסווג התמונות עבור Raspberry Pi, יש לעיין דוגמה ל-Raspberry Pi app.
הגדרה
בקטע הזה מתוארים השלבים העיקריים להגדרת סביבת הפיתוח פרויקטים של קוד במיוחד לשימוש במסווג תמונות. למידע כללי על להגדיר את סביבת הפיתוח לשימוש במשימות של MediaPipe, כולל הדרישות לגרסאות הפלטפורמה זמינות במדריך ההגדרה עבור Python.
חבילות
המשימה של מסווג התמונות היא חבילת ה-Mediapipe Pip. אפשר להתקין את או תלות בישויות הבאות:
$ python -m pip install mediapipe
``` ### Imports
Import the following classes to access the Image Classifier task functions:
```python
import mediapipe as mp
from mediapipe.tasks import python
from mediapipe.tasks.python import vision
דגם
למשימה של מסווג תמונות של MediaPipe נדרש מודל מאומן התואם למשימה הזו. מידע נוסף על מודלים זמינים מאומנים של מסווג תמונות זמין בכתובת בסקירה הכללית על המשימה בקטע 'מודלים'.
בוחרים מודל ומורידים אותו, ולאחר מכן שומרים אותו בספרייה מקומית. אפשר להשתמש המומלצים EfficientNet-Lite0 מודל טרנספורמר.
model_path = '/absolute/path/to/efficientnet_lite0_int8_2.tflite'
מציינים את הנתיב של המודל בתוך הפרמטר 'שם המודל', כמו בדוגמה הבאה:
base_options = BaseOptions(model_asset_path=model_path)
יצירת המשימה
כדי ליצור את המשימה, צריך להשתמש בפונקציה create_from_options
.
הפונקציה create_from_options
מקבלת אפשרויות הגדרה כולל הרצה
מצב, שם תצוגה, לוקאל, מספר מקסימלי של תוצאות, סף מהימנות,
רשימת הקטגוריות המותרות ורשימת הישויות שנחסמו. מידע נוסף על הגדרות אישיות
אפשרויות נוספות, ראו סקירה כללית של ההגדרות.
במשימה של מסווג תמונות יש תמיכה ב-3 סוגים של נתוני קלט: תמונות סטילס וקובצי וידאו בסטרימינג של וידאו בשידור חי. צריך לבחור את הכרטיסייה שתואמת לסוג נתוני הקלט כדי איך ליצור את המשימה ולהריץ הסקת מסקנות.
תמונה
import mediapipe as mp BaseOptions = mp.tasks.BaseOptions ImageClassifier = mp.tasks.vision.ImageClassifier ImageClassifierOptions = mp.tasks.vision.ImageClassifierOptions VisionRunningMode = mp.tasks.vision.RunningMode options = ImageClassifierOptions( base_options=BaseOptions(model_asset_path='/path/to/model.tflite'), max_results=5, running_mode=VisionRunningMode.IMAGE) with ImageClassifier.create_from_options(options) as classifier: # The classifier is initialized. Use it here. # ...
וידאו
import mediapipe as mp BaseOptions = mp.tasks.BaseOptions ImageClassifier = mp.tasks.vision.ImageClassifier ImageClassifierOptions = mp.tasks.vision.ImageClassifierOptions VisionRunningMode = mp.tasks.vision.RunningMode options = ImageClassifierOptions( base_options=BaseOptions(model_asset_path='/path/to/model.tflite'), max_results=5, running_mode=VisionRunningMode.VIDEO) with ImageClassifier.create_from_options(options) as classifier: # The classifier is initialized. Use it here. # ...
שידור חי
import mediapipe as mp BaseOptions = mp.tasks.BaseOptions ImageClassifierResult = mp.tasks.vision.ImageClassifier.ImageClassifierResult ImageClassifier = mp.tasks.vision.ImageClassifier ImageClassifierOptions = mp.tasks.vision.ImageClassifierOptions VisionRunningMode = mp.tasks.vision.RunningMode def print_result(result: ImageClassifierResult, output_image: mp.Image, timestamp_ms: int): print('ImageClassifierResult result: {}'.format(result)) options = ImageClassifierOptions( base_options=BaseOptions(model_asset_path='/path/to/model.tflite'), running_mode=VisionRunningMode.LIVE_STREAM, max_results=5, result_callback=print_result) with ImageClassifier.create_from_options(options) as classifier: # The classifier is initialized. Use it here. # ...
לדוגמה מלאה ליצירת מסווג תמונות לשימוש עם תמונות: את הקוד דוגמה.
אפשרויות תצורה
המשימה הזו כוללת את אפשרויות ההגדרה הבאות לאפליקציות Python:
שם האפשרות | תיאור | טווח ערכים | ערך ברירת מחדל |
---|---|---|---|
running_mode |
מגדיר את מצב הריצה של המשימה. יש שלושה סוגים
מצבים: IMAGE: המצב לקלט של תמונה יחידה. סרטון: המצב של פריימים מפוענחים בסרטון. LIVE_STREAM: המצב לשידור חי של קלט נתונים ממצלמה, במצב הזה, resultListener חייב להיות נשלחה קריאה כדי להגדיר אוזן כדי לקבל תוצאות באופן אסינכרוני. |
{IMAGE, VIDEO, LIVE_STREAM } |
IMAGE |
display_names_locale |
מגדיר את השפה של תוויות שישמשו לשמות לתצוגה שסופקו
של מודל המשימה, אם יש כאלה. ברירת המחדל היא en עבור
אנגלית. אפשר להוסיף תוויות שמותאמות לשוק המקומי למטא-נתונים של מודל מותאם אישית
באמצעות TensorFlow Lite Metadata Writer API |
קוד שפה | en |
max_results |
מגדיר את המספר המקסימלי האופציונלי של תוצאות סיווג מובילות ל- החזרה. אם < 0, כל התוצאות הזמינות יוחזרו. | מספרים חיוביים כלשהם | -1 |
score_threshold |
הגדרת סף הציון של התחזית שמבטל את הסף שצוין ב את המטא-נתונים של המודל (אם יש). תוצאות מתחת לערך הזה נדחות. | כל מספר ממשי (float) | לא מוגדר |
category_allowlist |
מגדיר את הרשימה האופציונלית של שמות קטגוריות מותרות. אם השדה לא ריק,
תוצאות הסיווג שבהן שם הקטגוריה לא נמצא בקבוצה הזו יהיו
מסונן. המערכת מתעלמת משמות קטגוריות כפולים או לא ידועים.
האפשרות הזו בלעדית למשתמשי category_denylist ומשתמשים
ושניהם יובילו לשגיאה. |
כל מחרוזת | לא מוגדר |
category_denylist |
מגדיר את הרשימה האופציונלית של שמות קטגוריות שאינם מותרים. אם המיקום
לא ריקות, תוצאות סיווג שבהן שם הקטגוריה נמצא בקבוצה זו יסוננו
החוצה. המערכת מתעלמת משמות קטגוריות כפולים או לא ידועים. האפשרות הזו מקבילה
בלעדי ל-category_allowlist ושימוש בשתי התוצאות עלול לגרום לשגיאה. |
כל מחרוזת | לא מוגדר |
result_callback |
מגדיר את אוזן התוצאות לקבל את תוצאות הסיווג
באופן אסינכרוני כש'סיווג התמונות' נמצא בשידור החי
במצב תצוגה. אפשר להשתמש באפשרות הזו רק כשמצב הריצה מוגדר ל-LIVE_STREAM |
לא רלוונטי | לא מוגדר |
הכנת נתונים
מכינים את הקלט כקובץ תמונה או כמערך נומרי, ואז ממירים אותו
אובייקט mediapipe.Image
. אם הקלט הוא קובץ וידאו או שידור חי
מצלמת אינטרנט, אפשר להשתמש בספרייה חיצונית כמו
OpenCV לטעינת פריימים של קלט בתור numpy
מערכים מגוונים.
בדוגמאות הבאות מוסבר איך להכין את הנתונים לעיבוד, כל אחד מסוגי הנתונים הזמינים
תמונה
import mediapipe as mp # Load the input image from an image file. mp_image = mp.Image.create_from_file('/path/to/image') # Load the input image from a numpy array. mp_image = mp.Image(image_format=mp.ImageFormat.SRGB, data=numpy_image)
וידאו
import mediapipe as mp # Use OpenCV’s VideoCapture to load the input video. # Load the frame rate of the video using OpenCV’s CV_CAP_PROP_FPS # You’ll need it to calculate the timestamp for each frame. # Loop through each frame in the video using VideoCapture#read() # Convert the frame received from OpenCV to a MediaPipe’s Image object. mp_image = mp.Image(image_format=mp.ImageFormat.SRGB, data=numpy_frame_from_opencv)
שידור חי
import mediapipe as mp # Use OpenCV’s VideoCapture to start capturing from the webcam. # Create a loop to read the latest frame from the camera using VideoCapture#read() # Convert the frame received from OpenCV to a MediaPipe’s Image object. mp_image = mp.Image(image_format=mp.ImageFormat.SRGB, data=numpy_frame_from_opencv)
הרצת המשימה
אפשר לקרוא לפונקציה classify שתואמת למצב הריצה כדי להפעיל מסקנות. ה-Image Classifier API יחזיר את הקטגוריות האפשריות בתוך התמונה או המסגרת של הקלט.
תמונה
# Perform image classification on the provided single image. classification_result = classifier.classify(mp_image)
וידאו
# Calculate the timestamp of the current frame frame_timestamp_ms = 1000 * frame_index / video_file_fps # Perform image classification on the video frame. classification_result = classifier.classify_for_video(mp_image, frame_timestamp_ms)
שידור חי
# Send the latest frame to perform image classification. # Results are sent to the `result_callback` provided in the `ImageClassifierOptions`. classifier.classify_async(mp_image, frame_timestamp_ms)
שימו לב לנקודות הבאות:
- כשמפעילים את מצב וידאו או שידור חי, צריך גם צריך לציין למשימת מסווג התמונות את חותמת הזמן של מסגרת הקלט.
- כשמפעילים בתמונה או במודל הסרטון, המשימה של מסווג התמונות לחסום את השרשור הנוכחי עד שיסיים לעבד את תמונת הקלט מסגרת.
- כשעובדים במצב שידור חי, המשימה של מסווג התמונות לא תיחסם
השרשור הנוכחי, אבל חוזר מיד. הוא יפעיל את התוצאה שלו
מאזין עם תוצאת הסיווג בכל פעם שהוא מסתיים
בעיבוד מסגרת קלט. אם נשלחת קריאה לפונקציה
classifyAsync
כאשר במשימה של מסווג התמונות עסוקים בעיבוד פריים אחר. המשימה מתעלמת למסגרת הקלט החדשה.
לדוגמה מלאה ליצירת מסווג תמונות לשימוש עם תמונות: את הקוד דוגמה.
טיפול בתוצאות והצגתן
כשמריצים את ההסקה, המשימה 'מסווג תמונות' מחזירה
אובייקט ImageClassifierResult
שמכיל את רשימת הקטגוריות האפשריות
לאובייקטים בתמונה או במסגרת הקלט.
בדוגמה הבאה אפשר לראות את נתוני הפלט מהמשימה:
ImageClassifierResult:
Classifications #0 (single classification head):
head index: 0
category #0:
category name: "/m/01bwb9"
display name: "Passer domesticus"
score: 0.91406
index: 671
category #1:
category name: "/m/01bwbt"
display name: "Passer montanus"
score: 0.00391
index: 670
התוצאה הזו התקבלה באמצעות הפעלה של Bird Classifier ב:
הקוד לדוגמה של מסווג התמונות מדגים איך להציג את הסיווג של התוצאות שהוחזרו מהמשימה, ראו קוד דוגמה לקבלת פרטים.