وظیفه MediaPipe Image Classifier به شما امکان می دهد تا روی تصاویر طبقه بندی کنید. شما می توانید از این کار برای شناسایی آنچه که یک تصویر در بین مجموعه ای از دسته بندی های تعریف شده در زمان آموزش نشان می دهد استفاده کنید. این دستورالعمل به شما نشان می دهد که چگونه از طبقه بندی کننده تصویر با پایتون استفاده کنید.
می توانید با مشاهده نسخه نمایشی وب، این کار را در عمل مشاهده کنید. برای اطلاعات بیشتر در مورد قابلیتها، مدلها و گزینههای پیکربندی این کار، به نمای کلی مراجعه کنید.
نمونه کد
کد مثال برای Image Classifier اجرای کامل این کار در پایتون را برای مرجع شما ارائه می دهد. این کد به شما کمک می کند تا این کار را آزمایش کنید و شروع به ساخت طبقه بندی کننده تصویر خود کنید. میتوانید کد نمونه طبقهبندی کننده تصویر را فقط با استفاده از مرورگر وب خود مشاهده، اجرا و ویرایش کنید.
اگر در حال پیادهسازی Image Classifier برای Raspberry Pi هستید، به برنامه نمونه Raspberry Pi مراجعه کنید.
راه اندازی
این بخش مراحل کلیدی را برای راه اندازی محیط توسعه و پروژه های کد به طور خاص برای استفاده از طبقه بندی تصویر توضیح می دهد. برای اطلاعات کلی در مورد تنظیم محیط توسعه خود برای استفاده از وظایف MediaPipe، از جمله الزامات نسخه پلت فرم، به راهنمای راه اندازی برای Python مراجعه کنید.
بسته ها
وظیفه طبقه بندی کننده تصویر بسته pip mediapipe است. می توانید وابستگی را با موارد زیر نصب کنید:
$ 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 Image Classifier به یک مدل آموزش دیده نیاز دارد که با این کار سازگار باشد. برای اطلاعات بیشتر در مورد مدلهای آموزشدیده موجود برای Image Classifier، بخش مدلهای نمای کلی کار را ببینید.
یک مدل را انتخاب و دانلود کنید و سپس آن را در یک فهرست محلی ذخیره کنید. می توانید از مدل توصیه شده EfficientNet-Lite0 استفاده کنید.
model_path = '/absolute/path/to/efficientnet_lite0_int8_2.tflite'
مسیر مدل را در پارامتر Model Name مانند شکل زیر مشخص کنید:
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. # ...
برای یک مثال کامل از ایجاد یک طبقهبندی کننده تصویر برای استفاده با یک تصویر، به مثال کد مراجعه کنید.
گزینه های پیکربندی
این کار دارای گزینه های پیکربندی زیر برای برنامه های پایتون است:
نام گزینه | توضیحات | محدوده ارزش | مقدار پیش فرض |
---|---|---|---|
running_mode | حالت اجرا را برای کار تنظیم می کند. سه حالت وجود دارد: IMAGE: حالت برای ورودی های تک تصویر. VIDEO: حالت برای فریم های رمزگشایی شده یک ویدیو. LIVE_STREAM: حالت پخش زنده داده های ورودی، مانند دوربین. در این حالت، resultListener باید فراخوانی شود تا شنونده ای را برای دریافت نتایج به صورت ناهمزمان تنظیم کند. | { IMAGE, VIDEO, LIVE_STREAM } | IMAGE |
display_names_locale | زبان برچسبها را برای استفاده برای نامهای نمایشی ارائه شده در فراداده مدل کار، در صورت وجود، تنظیم میکند. پیش فرض برای انگلیسی en است. با استفاده از TensorFlow Lite Metadata Writer API میتوانید برچسبهای محلی را به ابرداده یک مدل سفارشی اضافه کنید. | کد محلی | en |
max_results | حداکثر تعداد اختیاری نتایج طبقه بندی با امتیاز بالا را برای بازگشت تنظیم می کند. اگر < 0 باشد، تمام نتایج موجود برگردانده خواهند شد. | هر عدد مثبت | -1 |
score_threshold | آستانه امتیاز پیشبینی را تنظیم میکند که بر آستانه ارائهشده در فراداده مدل (در صورت وجود) لغو میشود. نتایج زیر این مقدار رد می شوند. | هر شناور | تنظیم نشده است |
category_allowlist | فهرست اختیاری نامهای دستهبندی مجاز را تنظیم میکند. در صورت خالی نبودن، نتایج طبقه بندی که نام دسته آنها در این مجموعه نیست فیلتر می شود. نامهای دستهبندی تکراری یا ناشناخته نادیده گرفته میشوند. این گزینه با category_denylist منحصر به فرد است و از هر دو نتیجه در یک خطا استفاده می کند. | هر رشته | تنظیم نشده است |
category_denylist | فهرست اختیاری نامهای دستههایی را که مجاز نیستند را تنظیم میکند. در صورت خالی نبودن، نتایج طبقه بندی که نام دسته آنها در این مجموعه است فیلتر می شود. نامهای دستهبندی تکراری یا ناشناخته نادیده گرفته میشوند. این گزینه با category_allowlist منحصر به فرد است و از هر دو نتیجه در یک خطا استفاده می کند. | هر رشته | تنظیم نشده است |
result_callback | شنونده نتیجه را طوری تنظیم میکند که وقتی طبقهبندی کننده تصویر در حالت پخش زنده است، نتایج طبقهبندی را به صورت ناهمزمان دریافت کند. فقط زمانی قابل استفاده است که حالت اجرا روی LIVE_STREAM تنظیم شده باشد | N/A | تنظیم نشده است |
داده ها را آماده کنید
ورودی خود را به عنوان یک فایل تصویری یا یک آرایه numpy آماده کنید، سپس آن را به یک شی mediapipe.Image
تبدیل کنید. اگر ورودی شما یک فایل ویدیویی یا پخش زنده از یک وب کم است، می توانید از یک کتابخانه خارجی مانند OpenCV برای بارگیری فریم های ورودی خود به عنوان آرایه های ناتوان استفاده کنید.
مثالهای زیر نحوه آمادهسازی دادهها را برای پردازش برای هر یک از انواع دادههای موجود توضیح میدهند و نشان میدهند
تصویر
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)
وظیفه را اجرا کنید
میتوانید تابع طبقهبندی مربوط به حالت در حال اجرا خود را برای استنتاج فراخوانی کنید. 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
زمانی فراخوانی شود که وظیفه طبقهبندی کننده تصویر مشغول پردازش فریم دیگری است، کار فریم ورودی جدید را نادیده میگیرد.
برای یک مثال کامل از ایجاد یک طبقهبندی کننده تصویر برای استفاده با یک تصویر، به مثال کد مراجعه کنید.
کنترل و نمایش نتایج
پس از اجرای استنتاج، وظیفه Image Classifier یک شی 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 در موارد زیر به دست آمده است:
کد نمونه طبقهبندی کننده تصویر نحوه نمایش نتایج طبقهبندی برگشتی از کار را نشان میدهد، برای جزئیات به مثال کد مراجعه کنید.