Udhëzues për segmentimin e imazheve për Python

Detyra MediaPipe Image Segmenter ju lejon të ndani imazhet në rajone bazuar në kategoritë e paracaktuara për aplikimin e efekteve vizuale të tilla si mjegullimi i sfondit. Këto udhëzime ju tregojnë se si të përdorni Segmenterin e Imazheve me gjuhën Python. Për më shumë informacion rreth aftësive, modeleve dhe opsioneve të konfigurimit të kësaj detyre, shihni Përmbledhjen .

Shembull kodi

Shembulli i kodit për Segmenterin e imazhit ofron një zbatim të plotë të kësaj detyre në Python për referencën tuaj. Ky kod ju ndihmon të testoni këtë detyrë dhe të filloni ndërtimin e aplikacionit tuaj të segmentimit të imazhit. Mund të shikoni, ekzekutoni dhe modifikoni kodin e shembullit të Segmenterit të Imazhit duke përdorur vetëm shfletuesin tuaj të internetit.

Konfigurimi

Ky seksion përshkruan hapat kryesorë për konfigurimin e mjedisit tuaj të zhvillimit dhe projekteve të kodit në mënyrë specifike për të përdorur Segmenterin e Imazhit. Për informacion të përgjithshëm mbi konfigurimin e mjedisit tuaj të zhvillimit për përdorimin e detyrave të MediaPipe, duke përfshirë kërkesat e versionit të platformës, shihni udhëzuesin e konfigurimit për Python . Mund të rishikoni kodin burimor për këtë shembull në GitHub

Paketat

Detyra MediaPipe Image Segmenter kërkon paketën mediapipe . Ju mund të instaloni varësitë e kërkuara me komandën e mëposhtme:

$ python -m pip install mediapipe

Importet

Importoni klasat e mëposhtme për të hyrë në funksionet e detyrave të Segmenterit të Imazhit:

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

Model

Detyra MediaPipe Image Segmenter kërkon një model të trajnuar që është në përputhje me këtë detyrë. Për më shumë informacion mbi modelet e trajnuara të disponueshme për Segmenterin e Imazhit, shihni seksionin Modelet e përmbledhjes së detyrave.

Zgjidhni dhe shkarkoni modelin dhe më pas ruajeni në direktorinë e projektit tuaj:

model_path = '/absolute/path/to/model.tflite'

Specifikoni rrugën e modelit brenda parametrit Emri i modelit, siç tregohet më poshtë:

base_options = BaseOptions(model_asset_path=model_path)

Krijo detyrën

Detyra MediaPipe Image Segmenter përdor funksionin create_from_options për të vendosur detyrën. Funksioni create_from_options pranon vlera për opsionet e konfigurimit që duhen trajtuar. Për më shumë informacion mbi konfigurimin e detyrës, shihni Opsionet e konfigurimit .

Këto mostra tregojnë gjithashtu variacionet e ndërtimit të detyrës për imazhe, skedarë video dhe transmetime video të drejtpërdrejta.

Imazhi

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:
  

Video

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:
  

Transmetim i drejtpërdrejtë

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:
    

Opsionet e konfigurimit

Kjo detyrë ka opsionet e mëposhtme të konfigurimit për aplikacionet Python:

Emri i opsionit Përshkrimi Gama e vlerave Vlera e paracaktuar
running_mode Vendos modalitetin e ekzekutimit për detyrën. Ekzistojnë tre mënyra:

IMAGE: Modaliteti për hyrjet e një imazhi të vetëm.

VIDEO: Modaliteti për kornizat e dekoduara të një videoje.

LIVE_STREAM: Modaliteti për një transmetim të drejtpërdrejtë të të dhënave hyrëse, si p.sh. nga një aparat fotografik. Në këtë modalitet, resultListener duhet të thirret për të vendosur një dëgjues për të marrë rezultatet në mënyrë asinkrone.
{ IMAGE, VIDEO, LIVE_STREAM } IMAGE
output_category_mask Nëse vendoset në True , dalja përfshin një maskë segmentimi si një imazh uint8, ku çdo vlerë piksel tregon vlerën e kategorisë fituese. { True, False } False
output_confidence_masks Nëse vendoset në True , dalja përfshin një maskë segmentimi si një imazh me vlerë notuese, ku çdo vlerë notuese përfaqëson hartën e rezultateve të besimit të kategorisë. { True, False } True
display_names_locale Vendos gjuhën e etiketave për t'u përdorur për emrat e shfaqur të dhëna në meta të dhënat e modelit të detyrës, nëse disponohet. Parazgjedhja është en për anglisht. Ju mund të shtoni etiketa të lokalizuara në meta të dhënat e një modeli të personalizuar duke përdorur API-në e shkrimtarit metadata TensorFlow Lite Kodi lokal sq
result_callback Vendos dëgjuesin e rezultateve që të marrë rezultatet e segmentimit në mënyrë asinkrone kur segmentuesi i imazhit është në modalitetin LIVE_STREAM . Mund të përdoret vetëm kur modaliteti i ekzekutimit është caktuar në LIVE_STREAM N/A N/A

Përgatitni të dhënat

Përgatitni hyrjen tuaj si një skedar imazhi ose një grup numpy, më pas konvertojeni atë në një objekt mediapipe.Image . Nëse hyrja juaj është një skedar video ose transmetim i drejtpërdrejtë nga një kamerë në internet, mund të përdorni një bibliotekë të jashtme si OpenCV për të ngarkuar kornizat tuaja hyrëse si grupe të pakëndshme.

Imazhi

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

Video

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

Transmetim i drejtpërdrejtë

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

Për një shembull kodi që tregon përgatitjen e të dhënave për Segmenterin e imazhit, shihni shembullin e kodit .

Drejtoni detyrën

Segmentuesi i imazhit përdor funksionet segment , segment_for_video dhe segment_async për të nxjerrë konkluzione. Për segmentimin e imazhit, kjo përfshin parapërpunimin e të dhënave hyrëse, ekzekutimin e modelit të segmentimit dhe paspërpunimin e rezultateve të modelit të papërpunuar në maskat e segmentuara.

Shembujt e mëposhtëm të kodit tregojnë se si të ekzekutohet përpunimi me modelin e detyrës.

Imazhi

# Perform image segmentation on the provided single image.
# The image segmenter must be created with the image mode.
segmented_masks = segmenter.segment(mp_image)
    

Video

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

Transmetim i drejtpërdrejtë

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

Vini re sa vijon:

  • Kur ekzekutoni në modalitetin e videos ose në modalitetin e transmetimit të drejtpërdrejtë, duhet t'i jepni gjithashtu detyrës "Imazh Segmenter" vulën kohore të kornizës së hyrjes.
  • Kur ekzekutohet në imazhin ose modelin e videos, detyra e Segmenterit të imazhit do të bllokojë fillin aktual derisa të përfundojë përpunimin e imazhit ose kornizës hyrëse.

Për një shembull më të plotë të ekzekutimit të konkluzioneve të Segmenterit të imazhit, shihni shembullin e kodit .

Trajtoni dhe shfaqni rezultatet

Segmentuesi i imazhit nxjerr një listë të të dhënave Image . Nëse output_type është CATEGORY_MASK , dalja është një listë që përmban maskë të vetme të segmentuar si një imazh uint8. Pikseli tregon indeksin e kategorisë së njohur të imazhit të hyrjes. Nëse output_type është CONFIDENCE_MASK , dalja është një vektor me madhësinë e numrit të kategorisë. Çdo maskë e segmentuar është një imazh lundrues brenda intervalit [0,1] , që përfaqëson rezultatin e besimit të pikselit që i përket kategorisë.

Seksionet e mëposhtme tregojnë shembuj të të dhënave dalëse nga kjo detyrë:

Besimi i kategorisë

Imazhet e mëposhtme tregojnë një vizualizim të rezultatit të detyrës për një maskë besimi të kategorisë. Dalja e maskës së besimit përmban vlerat float midis [0, 1] .

Dy vajza hipur në kalë dhe një vajzë që ecën pranë kalitMaska e imazhit që përshkruan formën e vajzave dhe kalit nga fotografia e mëparshme. Gjysma e majtë e skicës së figurës kapet, por gjysma e djathtë e figurës jo

Dalja origjinale e maskës së besimit të imazhit dhe kategorisë. Imazhi burim nga grupi i të dhënave Pascal VOC 2012 .

Vlera e kategorisë

Imazhet e mëposhtme tregojnë një vizualizim të daljes së detyrës për një maskë me vlerë kategorie. Gama e maskës së kategorisë është [0, 255] dhe çdo vlerë piksel përfaqëson indeksin e kategorisë fituese të prodhimit të modelit. Indeksi i kategorisë fituese ka rezultatin më të lartë midis kategorive që modeli mund të njohë.

Dy vajza hipur në kalë dhe një vajzë që ecën pranë kalitMaska e imazhit që përshkruan formën e vajzave dhe kalit nga imazhi i mëparshëm. Forma e të tre vajzave dhe kalit janë maskuar me saktësi

Dalja origjinale e imazhit dhe maskës së kategorisë. Imazhi burim nga grupi i të dhënave Pascal VOC 2012 .