1. 簡介
什麼是 MediaPipe?
MediaPipe Solutions 可讓您將機器學習 (ML) 解決方案套用至應用程式。並提供用於設定預先建構處理管道的架構,以便向使用者提供立即、引人入勝且實用的輸出內容。您還可以使用 MediaPipe Model Maker 自訂多個解決方案,藉此更新預設模型。
文字轉圖片生成是 MediaPipe Solutions 提供的機器學習工作之一,
在本程式碼研究室中,您將從主要的 Android 應用程式開始,然後逐步完成多個步驟,直到能夠直接在 Android 裝置上生成新圖片。
課程內容
- 如何透過 MediaPipe Tasks 實作在 Android 應用程式本機執行的文字轉圖片產生功能。
軟硬體需求
- 安裝的 Android Studio 版本 (本程式碼研究室是以 Android Studio Giraffe 編寫及測試)。
- 搭載至少 8 GB RAM 的 Android 裝置。
- 對 Android 開發作業及執行預先編寫的 Python 指令碼有基本瞭解。
2. 在 Android 應用程式中加入 MediaPipe 工作
下載 Android 範例應用程式
本程式碼研究室一開始會先提供預製範例,當中包含用於產生基本版圖片的 UI。您可以在這裡的官方 MediaPipe 範例存放區找到啟動應用程式。請點選「程式碼」圖示 >,複製存放區或下載 ZIP 檔案下載 ZIP 檔。
將應用程式匯入 Android Studio
- 開啟 Android Studio。
- 在「Welcome to Android Studio」畫面中,選取右上角的「Open」。

- 前往您複製或下載存放區的位置,然後開啟 codelabs/image_generation_basic/android/start 目錄。
- 在此階段,應用程式不應編譯,因為您尚未加入 MediaPipe Tasks 依附元件。
您將前往 build.gradle 檔案,然後向下捲動至「// Step 1 - Add 相依性」,藉此修正應用程式並順利執行。接著,請加入下列程式碼,然後點選 Android Studio 頂端橫幅中顯示的「Sync Now」按鈕。
// Step 1 - Add dependency
implementation 'com.google.mediapipe:tasks-vision-image-generator:latest.release'
同步完成後,按一下 Android Studio 右上方的綠色「run」箭頭 (
),確認是否已正確開啟及安裝所有項目。您應該會看到應用程式開啟,畫面中有兩個圓形按鈕和一個標示「INITIALIZE」的按鈕。按一下該按鈕,系統會立即將您導向獨立的 UI,其中包含文字提示和其他選項,以及標籤為「GENERATE」的按鈕。

很遺憾的是,有關範例應用程式的情況,請您先瞭解如何完成這個應用程式,並開始在裝置上生成新圖片!
3. 設定圖片產生器
在這個例子中,大多數的圖片生成工作都在 ImageGenerationHelper.kt 檔案中執行。開啟此檔案時,您會看到名為 imageGenerator 的類別頂端的變數。這是 Task 物件,用於執行圖片生成應用程式中的繁重作業。
該物件下方會顯示 InitialImageGenerator() 的函式,並附帶以下註解:// 步驟 2 - 初始化圖片產生器。您可能會猜到,您可以在這裡初始化 ImageGenerator 物件。將該函式主體替換為下列程式碼,以設定圖片產生模型路徑並初始化 ImageGenerator 物件:
// Step 2 - initialize the image generator
val options = ImageGeneratorOptions.builder()
.setImageGeneratorModelDirectory(modelPath)
.build()
imageGenerator = ImageGenerator.createFromOptions(context, options)
您會看見另一個名為 setInput() 的函式。此方法接受三個參數:用於定義生成圖片的「提示」字串、「工作」產生新圖片時應執行的「疊代」數量,以及「種子」值,在使用相同的種子後產生相同圖片時,可根據同樣的提示建立圖片的新版本。這個函式的目的是在您嘗試建立可顯示中繼步驟的圖片時,為圖片產生器設定這些初始參數。
請直接將 setInput() 主體 (也就是您在哪裡查看註解 // 步驟 3 - 接受輸入內容),替換為以下這一行:
// Step 3 - accept inputs
imageGenerator.setInputs(prompt, iteration, seed)
後兩個步驟是產生廣告素材的過程。generate() 函式接受與 setInput 相同的輸入,但會建立不會傳回任何中繼步驟圖片的一次性呼叫。您可以將這個函式的主體 (包含註解 // 步驟 4 - 在不顯示疊代的情況下產生) 替換為以下內容:
// Step 4 - generate without showing iterations
val result = imageGenerator.generate(prompt, iteration, seed)
val bitmap = BitmapExtractor.extract(result?.generatedImage())
return bitmap
請務必瞭解這項工作會同步進行,因此您必須從背景執行緒呼叫函式。稍後您將在本程式碼研究室中進一步瞭解相關資訊。
這個檔案的最後一個步驟是填入 run() 函式 (標示為步驟 5)。此方法接受參數,以指示其是否應傳回中繼圖片,而非針對要使用 ImageGenerator run() 函式執行的單一步驟。將函式主體替換為以下程式碼:
// Step 5 - generate with iterations
val result = imageGenerator.execute(showResult)
if (result == null || result.generatedImage() == null) {
return Bitmap.createBitmap(512, 512, Bitmap.Config.ARGB_8888)
.apply {
val canvas = Canvas(this)
val paint = Paint()
paint.color = Color.WHITE
canvas.drawPaint(paint)
}
}
val bitmap =
BitmapExtractor.extract(result.generatedImage())
return bitmap
以上就是輔助檔案的內容在下一節中,您將填寫用於處理本範例邏輯的 ViewModel 檔案。
4. 將應用程式串連起來
MainViewModel 檔案會處理與這個範例應用程式相關的 UI 狀態和其他邏輯。請立即開啟應用程式
您應該會在檔案頂端看到註解 // 步驟 6 - 設定模型路徑。藉此告知應用程式,其可在哪個位置找到生成圖像所需的模型檔案。在這個範例中,您要將值設為 /data/local/tmp/image_generator/bins/。
// Step 6 - set model path
private val MODEL_PATH = "/data/local/tmp/image_generator/bins/"
然後向下捲動至 generateImage() 函式。這個函式的底部會顯示步驟 7 和步驟 8,分別用來產生含有疊代或無任何疊代的圖片。這兩項作業都是「同步」進行,因此您會發現它們包裝在協同程式中。首先,您可以將 // 步驟 7 - 產生但不顯示疊代作業,但不顯示疊代作業。這個程式碼區塊會從 ImageGenerationHelper 檔案呼叫 generate(),然後更新 UI 狀態。
// Step 7 - Generate without showing iterations
val result = helper?.generate(prompt, iteration, seed)
_uiState.update {
it.copy(outputBitmap = result)
}
步驟 8:由於 run() 函式只會執行「一個」步驟,而非產生圖片的「所有」步驟,因此您必須透過迴圈個別呼叫每個步驟。此外,您也必須決定是否要向使用者顯示目前的步驟。最後,如果應顯示目前的疊代作業,請更新 UI 狀態。你現在可以這麼做了。
// Step 8 - Generate with showing iterations
helper?.setInput(prompt, iteration, seed)
for (step in 0 until iteration) {
isDisplayStep =
(displayIteration > 0 && ((step + 1) % displayIteration == 0))
val result = helper?.execute(isDisplayStep)
if (isDisplayStep) {
_uiState.update {
it.copy(
outputBitmap = result,
generatingMessage = "Generating... (${step + 1}/$iteration)",
)
}
}
}
此時,您應該能夠安裝應用程式、初始化圖片產生器,並根據文字提示建立新圖片
...,但當您嘗試初始化圖片產生器時,應用程式會異常終止。這是因為模型檔案必須複製到裝置上。如要瞭解這類第三方模型的最新資訊、為這項 MediaPipe 工作進行轉換,並將模型複製到裝置上,請參閱官方說明文件相關章節。
除了直接將檔案複製到開發裝置之外,您也能設定 Firebase 儲存空間,在執行期間直接將必要檔案下載到使用者的裝置。
5. 部署及測試應用程式
完成上述操作後,您應該有一個能在裝置上接受文字提示並產生新圖片的正常運作應用程式。請將應用程式部署至實體 Android 裝置以進行測試。不過請注意,建議選擇具有至少 8 GB 記憶體的裝置試試看。
- 按一下 Android Studio 工具列中的「Run」(執行) 圖示
,執行應用程式。 - 選取產生步驟類型 (最終步驟或反覆測試),然後按下「INITIALIZE」按鈕。
- 在下一個畫面設定需要的屬性,然後按一下「產生」按鈕,即可查看這項工具提供的功能。

6. 恭喜!
您做到了!在本程式碼研究室中,您已瞭解如何在 Android 應用程式中新增裝置端的文字轉圖片生成功能。
後續步驟
更多是圖片生成工作
- 使用基本映像檔建構透過外掛程式產生的圖片,或是透過 Vertex AI 訓練額外的 LoRA 權重。
- 使用 Firebase 儲存空間擷取裝置上的模型檔案,不必使用 ADB 工具。
我們很期待看到您在這項實驗性工作中實際打造的成果,日後還有更多來自 MediaPipe 團隊的程式碼研究室和內容,敬請密切留意!