MediaPipe Image Segmenter 工作可根據預先定義的選項將圖片分成多個區域 以便套用背景模糊處理等視覺效果這些 指示顯示如何使用 Python 語言使用 Image Segmenter。適用對象 進一步瞭解 請參閱總覽。
程式碼範例
Image Segmenter 範例程式碼提供 執行相關作業這個程式碼可協助您測試這項工作 即可開始建構自己的影像分割應用程式您可以查看、執行 編輯影像分割器 程式碼範例 只要使用網路瀏覽器即可。
設定
本節說明設定開發環境的重要步驟,以及 以及專門使用 Image Segmenter 的程式碼專案如需 設定開發環境以使用 MediaPipe 工作,包括: 平台版本需求,請參閱 Python 設定指南。 您可以查看本範例的原始碼 GitHub
套件
MediaPipe Image Segmenter 工作需要 mediapipe
套件。如要安裝
附加必要的依附元件:
$ python -m pip install mediapipe
匯入
匯入下列類別以存取 Image Segmenter 工作函式:
import mediapipe as mp
from mediapipe.tasks import python
from mediapipe.tasks.python import vision
型號
MediaPipe Image Segmenter 工作需要經過訓練且與此模型相容的模型。 工作。如要進一步瞭解圖片區隔工具可用的已訓練模型,請參閱: 工作總覽的「Models」(模型) 區段。
選取並下載模型,然後將模型儲存在專案目錄中:
model_path = '/absolute/path/to/model.tflite'
在 Model Name 參數中指定模型的路徑,如下所示:
base_options = BaseOptions(model_asset_path=model_path)
建立工作
MediaPipe Image Segmenter 工作會使用 create_from_options
函式來
設定工作。create_from_options
函式接受值
來處理設定選項如要進一步瞭解工作設定
請參閱設定選項。
這些樣本還會顯示圖片的工作建構方式的不同版本, 影片檔案和直播影片串流
圖片
BaseOptions = mp.tasks.BaseOptions ImageSegmenter = mp.tasks.vision.ImageSegmenter ImageSegmenterOptions = mp.tasks.vision.ImageSegmenterOptions VisionRunningMode = mp.tasks.vision.RunningMode # Create a image segmenter instance with the image mode: options = ImageSegmenterOptions( base_options=BaseOptions(model_asset_path='/path/to/model.task'), running_mode=VisionRunningMode.IMAGE, output_category_mask=True) with ImageSegmenter.create_from_options(options) as segmenter:
影片
BaseOptions = mp.tasks.BaseOptions ImageSegmenter = mp.tasks.vision.ImageSegmenter ImageSegmenterOptions = mp.tasks.vision.ImageSegmenterOptions VisionRunningMode = mp.tasks.vision.RunningMode # Create a image segmenter instance with the video mode: options = ImageSegmenterOptions( base_options=BaseOptions(model_asset_path='/path/to/model.task'), running_mode=VisionRunningMode.VIDEO, output_category_mask=True) with ImageSegmenter.create_from_options(options) as segmenter:
直播
BaseOptions = mp.tasks.BaseOptions ImageSegmenter = mp.tasks.vision.ImageSegmenter ImageSegmenterOptions = mp.tasks.vision.ImageSegmenterOptions VisionRunningMode = mp.tasks.vision.RunningMode # Create a image segmenter instance with the live stream mode: def print_result(result: List[Image], output_image: Image, timestamp_ms: int): print('segmented masks size: {}'.format(len(result))) options = ImageSegmenterOptions( base_options=BaseOptions(model_asset_path='/path/to/model.task'), running_mode=VisionRunningMode.VIDEO, output_category_mask=True) with ImageSegmenter.create_from_options(options) as segmenter:
設定選項
這項工作有下列 Python 應用程式設定選項:
選項名稱 | 說明 | 值範圍 | 預設值 |
---|---|---|---|
running_mode |
設定任務的執行模式。在架構中
模式: 圖片:單一圖片輸入模式。 VIDEO:影片已解碼的影格模式。 LIVE_STREAM:輸入串流模式 擷取的資訊等。 在此模式下, resultListener 設定接聽程式來接收結果 以非同步方式載入物件 |
{IMAGE, VIDEO, LIVE_STREAM } |
IMAGE |
output_category_mask |
如果設為 True ,則輸出結果會包含區隔遮罩
視為 uint8 圖片,其中每個像素值都代表勝出的類別
值。 |
{True, False } |
False |
output_confidence_masks |
如果設為 True ,則輸出結果會包含區隔遮罩
視為浮點值圖片,其中各浮點值代表信心值
分數圖。 |
{True, False } |
True |
display_names_locale |
設定標籤語言,供
工作模型的中繼資料 (如有)。以下項目的預設值為 en :
英語。您可以在自訂模型的中繼資料中加入經本地化的標籤
使用 TensorFlow Lite Metadata Writer API |
語言代碼 | en |
result_callback |
設定結果監聽器以接收區隔結果
圖片片段工具處於 LIVE_STREAM 模式時,以非同步方式顯示。
只有在執行模式設為「LIVE_STREAM 」時才能使用 |
不適用 | 不適用 |
準備資料
準備輸入圖片檔案或 numpy 陣列
然後將其轉換為 mediapipe.Image
物件如果輸入內容是影片檔案
或透過網路攝影機直播,可以使用如
OpenCV,會將輸入影格載入為 numpy
陣列。
圖片
# 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)
影片
# Use OpenCV’s VideoCapture to load the input video. # Load the frame rate of the video using OpenCV’s CV_CAP_PROP_FPS # You need the frame rate 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)
直播
# 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 Segmenter 資料準備的程式碼範例,請參閱 程式碼範例。
執行工作
圖片區隔工具使用 segment
、segment_for_video
和 segment_async
函式,用於觸發推論。對影像分割而言
預先處理輸入資料、執行區隔模型和後續處理
原始模型會輸出至分段遮罩
以下程式碼範例顯示如何使用工作模型執行處理程序。
圖片
# Perform image segmentation on the provided single image. # The image segmenter must be created with the image mode. segmented_masks = segmenter.segment(mp_image)
影片
# Perform image segmentation on the provided single image. # The image segmenter must be created with the video mode. segmented_masks = segmenter.segment_for_video(mp_image, frame_timestamp_ms)
直播
# Send live image data to perform image segmentation. # The results are accessible via the `result_callback` provided in # the `ImageSegmenterOptions` object. # The image segmenter must be created with the live stream mode. segmenter.segment_async(mp_image, frame_timestamp_ms)
注意事項:
- 以錄影模式或直播模式執行時,你也必須 提供 Image Segmenter 工作,做為輸入影格的時間戳記。
- 以圖片或影片模型執行時,圖片區隔工具工作 封鎖目前的執行緒,直到處理完成輸入圖片, 相框。
如需更完整的圖像區隔工具推論範例,請參閱 程式碼範例。
處理及顯示結果
圖片區隔工具會輸出 Image
資料清單。如果
output_type
是 CATEGORY_MASK
,輸出值為清單
,以 uint8 圖片呈現單一區隔遮罩。像素代表
辨識出輸入圖片的類別索引。如果 output_type
是
CONFIDENCE_MASK
,輸出是類別編號大小的向量。每項
區段遮罩是 [0,1]
範圍內的浮動圖片,代表
該類別的像素可信度分數。
下列各節說明這項工作的輸出資料範例:
類別可信度
下圖顯示特定類別的工作輸出圖表
以及圖片辨識結果可信度遮罩輸出內容包含介於
[0, 1]
。
原始圖片和類別可信度遮罩輸出內容。來源映像檔 2012 年 Pascal VOC 資料集。
類別值
下圖顯示特定類別的工作輸出圖表
值遮罩。類別遮罩範圍是 [0, 255]
,每個像素值
代表模型輸出的獲勝類別索引。優勝獎項
索引是模型能辨識的類別分數最高。
原始圖片和類別遮罩輸出內容。來源映像檔 2012 年 Pascal VOC 資料集。