Python 画像セグメンテーション ガイド

MediaPipe Image Segmenter タスクでは、事前定義されたリソースに基づいて画像をリージョンに分割 背景のぼかしなどの視覚効果を適用するカテゴリです。これらの では、Python 言語でイメージ セグメンタを使用する方法を解説します。対象 Google Cloud インフラストラクチャの機能、モデル、構成オプションについて このタスクについては、概要をご覧ください。

サンプルコード

画像セグメンタのコード例は、このコードの完全な実装を示しています。 タスクを示しています。このコードは、このタスクをテストして、 では、独自の画像セグメンタ アプリケーションの構築を始めました。特定のリソースを表示、実行、 画像セグメンテーションの編集 サンプルコード できます。

セットアップ

このセクションでは、開発環境をセットアップする主な手順と 画像セグメンタを使用するためのコード プロジェクトです。一般的な情報については、 MediaPipe タスクを使用するための開発環境の設定 プラットフォーム バージョンの要件については、 Python のセットアップ ガイド この例のソースコードは、 GitHub

<ph type="x-smartling-placeholder">

パッケージ

MediaPipe Image Segmenter タスクには mediapipe パッケージが必要です。kubectl の「get pods」 必要な依存関係を次のコマンドで置き換えてください。

$ python -m pip install mediapipe

インポート

次のクラスをインポートして、画像セグメンテーション タスク関数にアクセスします。

import mediapipe as mp
from mediapipe.tasks import python
from mediapipe.tasks.python import vision

モデル

MediaPipe Image Segmenter タスクには、この変換と互換性のあるトレーニング済みモデルが必要です。 タスクを実行します。画像セグメンタで利用可能なトレーニング済みモデルについて詳しくは、 タスクの概要のモデル セクションを見ていきます。

モデルを選択してダウンロードし、プロジェクト ディレクトリに保存します。

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 タスクの実行モードを設定します。3 つの モード:

IMAGE: 単一画像入力のモード。

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 オブジェクトに変換します。入力が動画ファイルの場合 ライブ ストリームで配信する場合、 入力フレームを numpy として読み込むための OpenCV あります

画像

# 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)
    

画像セグメンタ用のデータの準備を示すコード例については、 コードサンプルをご覧ください。

タスクを実行する

イメージ セグメンタでは、segmentsegment_for_videosegment_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_typeCATEGORY_MASK で、出力はリストです。 uint8 イメージとして単一のセグメント化されたマスクが含まれています。ピクセルは、 入力画像の認識されたカテゴリ インデックス。output_typeCONFIDENCE_MASK の場合、出力はカテゴリ番号のサイズのベクトルです。各 セグメント化されたマスクは [0,1] の範囲内の浮動小数点数の画像で、 カテゴリに属するピクセルの信頼スコア。

次のセクションでは、このタスクからの出力データの例を示します。

カテゴリの信頼度

次の画像は、特定のカテゴリのタスク出力を可視化したものです。 マスクされます。信頼マスクの出力には、次の範囲の浮動小数点値が含まれます。 [0, 1]

元の画像とカテゴリの信頼度マスクの出力。からのソース画像 Pascal VOC(2012 年) 見てみましょう。

カテゴリの値

次の画像は、特定のカテゴリのタスク出力を可視化したものです。 あります。カテゴリマスクの範囲は [0, 255] で、各ピクセル値 モデル出力の成功カテゴリ インデックスを表します。受賞部門 モデルが認識できるカテゴリの中で、最も高いスコアになります。

元の画像とカテゴリマスクの出力。からのソース画像 Pascal VOC(2012 年) 見てみましょう。