Python 適用的圖片分類指南

MediaPipe 圖片分類器工作可讓您對圖片進行分類。別擔心!您可以使用 這項工作能找出圖片在定義的一組類別中所代表的內容 訓練期間以下操作說明會說明如何使用圖片分類器 用 Python 執行程式

如要查看這項工作的實際運作情形,請前往網頁版 示範。適用對象 進一步瞭解 請參閱總覽

程式碼範例

圖片分類器的範例程式碼提供了 執行相關作業這個程式碼可協助您測試這項工作 您就可以開始建立自己的圖片分類器了您可以查看、執行及修改 圖片分類器範例 程式碼 只要使用網路瀏覽器即可。

如果您要實作 Raspberry Pi 專用的 Image Classifier,請參閱 Raspberry Pi 範例 app

設定

本節說明設定開發環境的重要步驟,以及 以及專門使用 Image Classifier 的程式碼專案如需 設定開發環境以使用 MediaPipe 工作,包括: 平台版本需求,請參閱這份指南 Python

套件

Image Classifier 會工作 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 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.
  # ...
    

如需建立圖片分類器與圖片的完整範例,請參閱 程式碼 範例

設定選項

這項工作有下列 Python 應用程式設定選項:

選項名稱 說明 值範圍 預設值
running_mode 設定任務的執行模式。在架構中 模式:

圖片:單一圖片輸入模式。

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 設定用來接收分類結果的結果監聽器 當 Image Classifier 出現在直播時,並以非同步的方式顯示 模式。只有在執行模式設為「LIVE_STREAM」時才能使用 不適用 未設定

準備資料

備妥圖片檔案或 numpy 陣列的輸入內容,然後將其轉換為 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)
    

執行工作

您可以呼叫與執行模式相對應的分類函式來觸發 推論出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 取得 已開啟:

圖片分類器程式碼範例示範如何顯示分類 查看工作傳回的結果,請參閱 示例