您可以使用 MediaPipe 圖片區隔器工作,根據預先定義的類別將圖片分割成區域,以便套用背景模糊處理等視覺效果。本操作說明將說明如何使用 Node 和網頁應用程式的圖片區塊分割器。如要進一步瞭解這項工作的功能、模型和設定選項,請參閱總覽。
程式碼範例
圖片區隔器的範例程式碼會在 JavaScript 中提供此工作的完整實作方式,供您參考。這段程式碼可協助您測試這項工作,並開始建構自己的圖片分割應用程式。您只需使用網路瀏覽器,即可查看、執行及編輯圖片分割器範例程式碼。您也可以在 GitHub 上查看這個範例的程式碼。
設定
本節將說明設定開發環境和程式碼專案的關鍵步驟,以便使用圖片分割器。如要進一步瞭解如何設定開發環境以使用 MediaPipe 工作,包括平台版本需求,請參閱 網頁版設定指南。
JavaScript 套件
您可以透過 MediaPipe @mediapipe/tasks-vision
NPM 套件取得圖片分割器程式碼。您可以透過平台設定指南中的連結,尋找及下載這些程式庫。
您可以使用下列指令,透過下列本機暫存程式碼安裝必要套件:
npm install --save @mediapipe/tasks-vision
如要透過內容傳遞聯播網 (CDN) 服務匯入工作程式碼,請在 HTML 檔案的 標記中加入下列程式碼:
<head>
<script src="https://cdn.jsdelivr.net/npm/@mediapipe/tasks-vision/vision_bundle.js"
crossorigin="anonymous"></script>
</head>
型號
MediaPipe 圖片區塊劃分器工作需要訓練的模型,且必須與此工作相容。如要進一步瞭解可用訓練模型的圖片區隔器,請參閱任務總覽的「模型」一節。
選取並下載模型,然後將模型儲存在專案目錄中:
<dev-project-root>/app/shared/models/
建立工作
請使用其中一個圖片區隔器 createFrom...()
函式,準備執行推論的工作。使用 createFromModelPath()
函式搭配訓練模型檔案的相對或絕對路徑。如果模型已載入至記憶體,您可以使用 createFromModelBuffer()
方法。
以下程式碼範例示範如何使用 createFromOptions()
函式設定工作。createFromOptions
函式可讓您使用設定選項自訂圖片區隔器。如要進一步瞭解工作設定,請參閱「設定選項」。
以下程式碼示範如何使用自訂選項建構及設定工作:
runningMode = "IMAGE";
async function createImageSegmenter() {
const vision = await FilesetResolver.forVisionTasks(
"https://cdn.jsdelivr.net/npm/@mediapipe/tasks-vision@latest/wasm"
);
imageSegmenter = await ImageSegmenter.createFromOptions(vision, {
baseOptions: {
modelAssetPath:
"https://storage.googleapis.com/mediapipe-assets/deeplabv3.tflite?generation=1661875711618421",
},
outputCategoryMask: true,
outputConfidenceMasks: false
runningMode: runningMode
});
}
createImageSegmenter();
如要進一步瞭解如何建立 Image Segmenter 工作,請參閱程式碼範例。
設定選項
此工作包含下列網頁應用程式設定選項:
選項名稱 | 說明 | 值範圍 | 預設值 |
---|---|---|---|
outputCategoryMask |
如果設為 True ,輸出內容會包含分割遮罩,做為 uint8 圖片,其中每個像素值都會指出勝出的類別值。 |
{True, False } |
False |
outputConfidenceMasks |
如果設為 True ,輸出內容會包含分割遮罩,做為浮點值圖片,其中每個浮點值代表類別的信心分數對應。 |
{True, False } |
True |
displayNamesLocale |
設定標籤語言,用於工作模型中繼資料中提供的顯示名稱 (如有)。預設值為英文的 en 。您可以使用 TensorFlow Lite Metadata Writer API,在自訂模型的中繼資料中新增本地化標籤 |
語言代碼 | en |
resultListener |
在圖片分割器處於 LIVE_STREAM 模式時,將結果事件監聽器設為以非同步方式接收分割結果。只有在執行模式設為 LIVE_STREAM 時,才能使用 |
不適用 | 不適用 |
準備資料
圖像區隔器可使用主機瀏覽器支援的任何格式,區隔圖像中的物件。此工作也會處理資料輸入預先處理作業,包括調整大小、旋轉和值正規化。
對圖片區塊處理器 segment()
和 segmentForVideo()
方法的呼叫會同步執行,並封鎖使用者介面執行緒。如果您要從裝置相機的影片影格中區隔物件,每個區隔作業都會阻斷主執行緒。如要避免這種情況,您可以實作網路工作者,在另一個執行緒上執行 segment()
和 segmentForVideo()
。
執行工作
圖片區塊判斷器會使用 segment()
方法搭配圖片模式,以及 segmentForVideo()
方法搭配 video
模式,觸發推論。圖片區隔器會將偵測到的區隔以圖片資料的形式,傳回至您在為工作執行推論時設定的回呼函式。
以下程式碼示範如何使用工作模型執行處理作業:
圖片
const image = document.getElementById("image") as HTMLImageElement; imageSegmenter.segment(image, callback);
影片
async function renderLoop(): void { const video = document.getElementById("video"); let startTimeMs = performance.now(); imageSegmenter.segmentForVideo(video, startTimeMs, callbackForVideo); requestAnimationFrame(() => { renderLoop(); }); }
如要進一步瞭解如何執行 Image Segmenter 工作,請參閱程式碼範例。
處理及顯示結果
在執行推論時,圖片區隔器工作會將區隔圖片資料傳回至回呼函式。輸出內容取決於您在設定任務時設定的 outputType
。
以下各節會列舉此工作輸出資料的範例:
類別可信度
以下圖片顯示類別信心遮罩的工作輸出結果視覺化資訊。信心遮罩輸出內容包含 [0, 1]
之間的浮點值。
原始圖片和類別信心遮罩輸出結果。Pascal VOC 2012 資料集的原始圖片。
類別值
下圖顯示類別值遮罩的工作輸出結果視覺化資訊。類別遮罩範圍為 [0, 255]
,每個像素值代表模型輸出的獲勝類別索引。勝出的類別索引是模型可辨識的類別中分數最高者。
原始圖片和類別遮罩輸出結果。Pascal VOC 2012 資料集的原始圖片。
圖片區塊分割器範例程式碼示範如何顯示工作傳回的區塊分割結果,詳情請參閱程式碼範例。