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]
.
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ë.
Dalja origjinale e imazhit dhe maskës së kategorisë. Imazhi burim nga grupi i të dhënave Pascal VOC 2012 .