Detyra MediaPipe Image Generator ju lejon të gjeneroni imazhe bazuar në një kërkesë teksti. Kjo detyrë përdor një model tekst-në-imazh për të gjeneruar imazhe duke përdorur teknikat e difuzionit.
Detyra pranon një kërkesë teksti si hyrje, së bashku me një imazh të gjendjes opsionale që modeli mund ta shtojë dhe ta përdorë si referencë për gjenerim. Gjeneruesi i imazheve mund të gjenerojë gjithashtu imazhe bazuar në koncepte specifike që i janë dhënë modelit gjatë trajnimit ose rikualifikimit. Për më shumë informacion, shihni personalizo me LoRA .
Shembulli i kodit i përshkruar në këto udhëzime është i disponueshëm në GitHub . Për më shumë informacion rreth aftësive, modeleve dhe opsioneve të konfigurimit të kësaj detyre, shihni Përmbledhjen .
Shembull kodi
Kodi i shembullit të MediaPipe Tasks është një zbatim bazë i një aplikacioni të Gjeneratorit të Imazheve për Android. Mund ta përdorni aplikacionin si pikënisje për aplikacionin tuaj Android ose t'i referoheni kur modifikoni një aplikacion ekzistues. Shembulli i kodit të Gjeneratorit të Imazhit është pritur në GitHub .
Shkarkoni kodin
Udhëzimet e mëposhtme ju tregojnë se si të krijoni një kopje lokale të kodit shembull duke përdorur mjetin e linjës së komandës git .
Për të shkarkuar kodin shembull:
- Klononi depon e git duke përdorur komandën e mëposhtme:
git clone https://github.com/google-ai-edge/mediapipe-samples
- Opsionale, konfiguroni shembullin tuaj të git për të përdorur arkëtimin e rrallë, në mënyrë që të keni vetëm skedarët për shembullin e aplikacionit të Gjeneratorit të Imazheve:
cd mediapipe git sparse-checkout init --cone git sparse-checkout set examples/image_generation/android
Pas krijimit të një versioni lokal të kodit shembull, mund ta importoni projektin në Android Studio dhe të ekzekutoni aplikacionin. Për udhëzime, shihni Udhëzuesin e konfigurimit për Android .
Komponentët kryesorë
Skedarët e mëposhtëm përmbajnë kodin vendimtar për këtë aplikacion shembulli të gjenerimit të imazheve:
- ImageGenerationHelper.kt : Inicializon detyrën dhe trajton gjenerimin e imazhit.
- DiffusionActivity.kt : Gjeneron imazhe kur shtojcat ose peshat LoRA nuk janë të aktivizuara.
- PluginActivity.kt : Zbaton modelet e shtojcave, të cilat u mundësojnë përdoruesve të ofrojnë një imazh të gjendjes si hyrje.
- LoRAWeightActivity.kt : Qas dhe trajton peshat LoRA, të cilat përdoren për të personalizuar modelet e themelit dhe për t'u mundësuar atyre të gjenerojnë imazhe të koncepteve specifike.
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 Gjeneratorin e Imazheve. 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 Android .
varësitë
Detyra "Generatori i imazheve" përdor bibliotekën com.google.mediapipe:tasks-vision-image-generator
. Shtoni këtë varësi në skedarin build.gradle
të aplikacionit tuaj Android:
dependencies {
implementation 'com.google.mediapipe:tasks-vision-image-generator:latest.release'
}
Për pajisjet me Android 12 (API 31) ose më të lartë, shtoni varësinë origjinale të bibliotekës OpenCL. Për më shumë informacion, shihni dokumentacionin në etiketën uses-native-library
.
Shtoni etiketat e mëposhtme uses-native-library
në skedarin AndroidManifest.xml
:
<uses-native-library android:name="libOpenCL.so" android:required="false" />
<uses-native-library android:name="libOpenCL-car.so" android:required="false"/>
<uses-native-library android:name="libOpenCL-pixel.so" android:required="false" />
Model
Detyra MediaPipe Image Generator kërkon një model themeli të trajnuar që është në përputhje me këtë detyrë. Pasi të keni shkarkuar një model, instaloni varësitë e kërkuara dhe shndërroni modelin në një format të përshtatshëm. Më pas, shtyjeni modelin e konvertuar në pajisjen Android.
Për më shumë informacion mbi modelet e trajnuara të disponueshme për Gjeneratorin e Imazheve, shihni seksionin Modelet e përmbledhjes së detyrave.
Shkarkoni modelin e fondacionit
Gjeneruesi i imazhit kërkon që modeli i themelit të përputhet me formatin e modelit runwayml/stable-diffusion-v1-5 EMA-only
, bazuar në modelin e mëposhtëm: runwayml/stable-diffusion-v1-5 .
Instaloni varësitë dhe konvertoni modelin
$ pip install torch typing_extensions numpy Pillow requests pytorch_lightning absl-py
Ekzekutoni skriptin convert.py
:
$ python3 convert.py --ckpt_path <ckpt_path> --output_path <output_path>
Push modelin e konvertuar në pajisje
Shtyni përmbajtjen e dosjes <output_path>
në pajisjen Android.
$ adb shell rm -r /data/local/tmp/image_generator/ # Remove any previously loaded weights
$ adb shell mkdir -p /data/local/tmp/image_generator/
$ adb push <output_path>/. /data/local/tmp/image_generator/bins
Shkarkoni modelet e shtojcave dhe shtoni peshat LoRA (Opsionale)
Nëse keni ndërmend të përdorni një model shtesë , kontrolloni nëse modeli duhet të shkarkohet. Për shtojcat që kërkojnë një model shtesë, modelet e shtojcave duhet ose të grumbullohen në APK ose të shkarkohen sipas kërkesës. Modelet e shtojcave janë të lehta (~23 MB) dhe mund të bashkohen drejtpërdrejt në APK. Sidoqoftë, ne rekomanduam shkarkimin e modeleve të shtojcave sipas kërkesës.
Nëse keni personalizuar një model me LoRA , shkarkoni ato sipas kërkesës. Për më shumë informacion, shihni modelin e shtojcës së peshave LoRA.
Krijo detyrën
Detyra MediaPipe Image Generator përdor funksionin createFromOptions()
për të konfiguruar detyrën. Funksioni createFromOptions()
pranon vlerat për opsionet e konfigurimit. Për më shumë informacion mbi opsionet e konfigurimit, shihni Opsionet e konfigurimit .
Opsionet e konfigurimit
Kjo detyrë ka opsionet e mëposhtme të konfigurimit për aplikacionet Android:
Emri i opsionit | Përshkrimi | Gama e vlerave |
---|---|---|
imageGeneratorModelDirectory | Drejtoria e modelit të gjeneratorit të imazhit që ruan peshat e modelit. | PATH |
loraWeightsFilePath | Përcakton shtegun për skedarin e peshave LoRA. Opsionale dhe e zbatueshme vetëm nëse modeli është personalizuar me LoRA. | PATH |
errorListener | Vendos një dëgjues opsional gabimi. | N/A |
Detyra gjithashtu mbështet modelet e shtojcave, të cilat i lejojnë përdoruesit të përfshijnë imazhe të kushteve në hyrjen e detyrës, të cilat modeli i themelit mund t'i shtojë dhe t'i përdorë si referencë për gjenerim. Këto imazhe të gjendjes mund të jenë pika referimi të fytyrës, skica të skajeve dhe vlerësime të thellësisë, të cilat modeli i përdor si kontekst dhe informacion shtesë për të gjeneruar imazhe.
Kur shtoni një model shtesë në modelin e themelimit, konfiguroni gjithashtu opsionet e shtojcave. Shtojca shtesë Face pikë referimi përdor faceConditionOptions
, plugin Canny edge përdor edgeConditionOptions
dhe plugin Depth përdor depthConditionOptions
.
Opsione të këndshme të skajeve
Konfiguro opsionet e mëposhtme në edgeConditionOptions
.
Emri i opsionit | Përshkrimi | Gama e vlerave | Vlera e paracaktuar |
---|---|---|---|
threshold1 | Pragu i parë për procedurën e histerezës. | Float | 100 |
threshold2 | Pragu i dytë për procedurën e histerezës. | Float | 200 |
apertureSize | Madhësia e hapjes për operatorin Sobel. Gama tipike është midis 3-7. | Integer | 3 |
l2Gradient | Nëse norma L2 përdoret për të llogaritur madhësinë e gradientit të imazhit, në vend të normës së paracaktuar L1. | BOOLEAN | False |
EdgePluginModelBaseOptions | Objekti BaseOptions që përcakton shtegun për modelin e shtojcave. | Objekti i BaseOptions | N/A |
Për më shumë informacion se si funksionojnë këto opsione konfigurimi, shihni detektorin e skajeve Canny .
Opsionet e pikë referimi të fytyrës
Konfiguro opsionet e mëposhtme në faceConditionOptions
.
Emri i opsionit | Përshkrimi | Gama e vlerave | Vlera e paracaktuar |
---|---|---|---|
minFaceDetectionConfidence | Rezultati minimal i besimit për zbulimin e fytyrës për t'u konsideruar i suksesshëm. | Float [0.0,1.0] | 0.5 |
minFacePresenceConfidence | Rezultati minimal i besimit të rezultatit të pranisë së fytyrës në zbulimin e pikës referimi të fytyrës. | Float [0.0,1.0] | 0.5 |
faceModelBaseOptions | Objekti BaseOptions që përcakton shtegun për modelin që krijon imazhin e kushtit. | Objekti i BaseOptions | N/A |
FacePluginModelBaseOptions | Objekti BaseOptions që përcakton shtegun për modelin e shtojcave. | Objekti i BaseOptions | N/A |
Për më shumë informacion se si funksionojnë këto opsione konfigurimi, shihni detyrën Face Landmarker .
Opsionet e thellësisë
Konfiguro opsionet e mëposhtme në depthConditionOptions
.
Emri i opsionit | Përshkrimi | Gama e vlerave | Vlera e paracaktuar |
---|---|---|---|
depthModelBaseOptions | Objekti BaseOptions që përcakton shtegun për modelin që krijon imazhin e kushtit. | Objekti i BaseOptions | N/A |
depthPluginModelBaseOptions | Objekti BaseOptions që përcakton shtegun për modelin e shtojcave. | Objekti i BaseOptions | N/A |
Krijo vetëm me modelin e themelit
val options = ImageGeneratorOptions.builder()
.setImageGeneratorModelDirectory(modelPath)
.build()
imageGenerator = ImageGenerator.createFromOptions(context, options)
Krijo me shtojca
Nëse po aplikoni një model shtesë shtesë opsionale, vendosni opsionet bazë për modelin e shtojcave me setPluginModelBaseOptions
. Nëse modeli i shtojcës kërkon një model shtesë të shkarkuar për të krijuar imazhin e gjendjes, specifikoni shtegun në BaseOptions
.
Pikë referimi fytyre
val options = ImageGeneratorOptions.builder() .setImageGeneratorModelDirectory(modelPath) .build() val faceModelBaseOptions = BaseOptions.builder() .setModelAssetPath("face_landmarker.task") .build() val facePluginModelBaseOptions = BaseOptions.builder() .setModelAssetPath("face_landmark_plugin.tflite") .build() val faceConditionOptions = FaceConditionOptions.builder() .setFaceModelBaseOptions(faceModelBaseOptions) .setPluginModelBaseOptions(facePluginModelBaseOptions) .setMinFaceDetectionConfidence(0.3f) .setMinFacePresenceConfidence(0.3f) .build() val conditionOptions = ConditionOptions.builder() .setFaceConditionOptions(faceConditionOptions) .build() imageGenerator = ImageGenerator.createFromOptions(context, options, conditionOptions)
Canny Edge
val options = ImageGeneratorOptions.builder() .setImageGeneratorModelDirectory(modelPath) .build() val edgePluginModelBaseOptions = BaseOptions.builder() .setModelAssetPath("canny_edge_plugin.tflite") .build() val edgeConditionOptions = EdgeConditionOptions.builder() .setThreshold1(100.0f) .setThreshold2(100.0f) .setApertureSize(3) .setL2Gradient(false) .setPluginModelBaseOptions(edgePluginModelBaseOptions) .build() val conditionOptions = ConditionOptions.builder() .setEdgeConditionOptions(edgeConditionOptions) .build() imageGenerator = ImageGenerator.createFromOptions(context, options, conditionOptions)
Thellësia
val options = ImageGeneratorOptions.builder() .setImageGeneratorModelDirectory(modelPath) .build() val depthModelBaseOptions = BaseOptions.builder() .setModelAssetPath("depth_model.tflite") .build() val depthPluginModelBaseOptions = BaseOptions.builder() .setModelAssetPath("depth_plugin.tflite") .build() val depthConditionOptions = ConditionOptions.DepthConditionOptions.builder() .setDepthModelBaseOptions(depthModelBaseOptions) .setPluginModelBaseOptions(depthPluginModelBaseOptions) .build() val conditionOptions = ConditionOptions.builder() .setDepthConditionOptions(depthConditionOptions) .build() imageGenerator = ImageGenerator.createFromOptions(context, options, conditionOptions)
Krijoni me pesha LoRA
Nëse jeni duke përfshirë peshat LoRA, përdorni parametrin loraWeightsFilePath
për të treguar vendndodhjen e shtegut.
val options = ImageGeneratorOptions.builder()
.setLoraWeightsFilePath(weightsPath)
.setImageGeneratorModelDirectory(modelPath)
.build()
imageGenerator = ImageGenerator.createFromOptions(context, options)
Përgatitni të dhënat
Gjeneratori i imazhit pranon hyrjet e mëposhtme:
- prompt (kërkohet): Prompt teksti që përshkruan imazhin që do të krijohet.
- përsëritjet (kërkohen): Përsëritjet totale për të gjeneruar imazhin. Një pikënisje e mirë është 20.
- fara (kërkohet): Fara e rastësishme e përdorur gjatë gjenerimit të imazhit.
- imazhi i gjendjes (opsionale): Imazhi që modeli përdor si referencë për gjenerimin. Zbatohet vetëm kur përdorni një model shtesë.
- lloji i gjendjes (opsionale): Lloji i modelit të shtojcës së përdorur me detyrën. Zbatohet vetëm kur përdorni një model shtesë.
Inputet vetëm me modelin e themelit
fun setInput(prompt: String, iteration: Int, seed: Int) {
imageGenerator.setInputs(prompt, iteration, seed)
}
Inputet me shtojca
Nëse po aplikoni një model shtesë shtesë opsionale, përdorni gjithashtu parametrin conditionType
për të zgjedhur modelin e shtojcës dhe parametrin sourceConditionImage
për të gjeneruar imazhin e gjendjes.
Emri i opsionit | Përshkrimi | Vlera |
---|---|---|
conditionType | Modeli i shtojcës aplikohet në modelin e themelit. | {"FACE", "EDGE", "DEPTH"} |
sourceConditionImage | Imazhi burim i përdorur për të krijuar imazhin e kushtit. | Objekti i imazhit MPImage |
Nëse jeni duke përdorur një model plugin, përdorni createConditionImage
për të krijuar imazhin e gjendjes:
fun createConditionImage(
inputImage: MPImage,
conditionType: ConditionType
): Bitmap {
val result =
imageGenerator.createConditionImage(inputImage, conditionType)
return BitmapExtractor.extract(result)
}
Pas krijimit të imazhit të gjendjes, përfshini si hyrje së bashku me kërkesën, fillimin dhe numrin e përsëritjeve.
imageGenerator.setInputs(
prompt,
conditionalImage,
conditionType,
iteration,
seed
)
Inputet me pesha LoRA
Nëse jeni duke përdorur peshat LoRA, sigurohuni që token të jetë në mesazhin e tekstit nëse keni ndërmend të gjeneroni një imazh me konceptin specifik të përfaqësuar nga peshat.
fun setInput(prompt: String, iteration: Int, seed: Int) {
imageGenerator.setInputs(prompt, iteration, seed)
}
Drejtoni detyrën
Përdorni metodën generate()
për të gjeneruar një imazh duke përdorur hyrjet e dhëna në seksionin e mëparshëm. Kjo prodhon një imazh të vetëm të krijuar.
Gjeneroni vetëm me modelin e themelit
fun generate(prompt: String, iteration: Int, seed: Int): Bitmap {
val result = imageGenerator.generate(prompt, iteration, seed)
val bitmap = BitmapExtractor.extract(result?.generatedImage())
return bitmap
}
Gjeneroni me shtojca
fun generate(
prompt: String,
inputImage: MPImage,
conditionType: ConditionType,
iteration: Int,
seed: Int
): Bitmap {
val result = imageGenerator.generate(
prompt,
inputImage,
conditionType,
iteration,
seed
)
val bitmap = BitmapExtractor.extract(result?.generatedImage())
return bitmap
}
Gjeneroni me pesha LoRA
Procesi i gjenerimit të imazheve me një model të personalizuar me pesha LoRA është i ngjashëm me procesin me një model themeli standard. Sigurohuni që token të përfshihet në prompt dhe ekzekutoni të njëjtin kod.
fun generate(prompt: String, iteration: Int, seed: Int): Bitmap {
val result = imageGenerator.generate(prompt, iteration, seed)
val bitmap = BitmapExtractor.extract(result?.generatedImage())
return bitmap
}
Brez përsëritës
Gjeneruesi i imazhit mund të nxjerrë gjithashtu imazhet e ndërmjetme të krijuara gjatë çdo përsëritjeje, siç përcaktohet në parametrin e hyrjes iterations
. Për të parë këto rezultate të ndërmjetme, thirrni metodën setInputs
, më pas thirrni execute()
për të ekzekutuar çdo hap. Vendosni parametrin showResult
në true
për të shfaqur rezultatet e ndërmjetme.
fun execute(showResult: Boolean): Bitmap {
val result = imageGenerator.execute(showResult)
val bitmap =
BitmapExtractor.extract(result.generatedImage())
return bitmap
}
Trajtoni dhe shfaqni rezultatet
Gjeneruesi i imazhit kthen një ImageGeneratorResult
, i cili përfshin imazhin e krijuar, një vulë kohore të kohës së përfundimit dhe imazhin e kushtëzuar nëse një i tillë është dhënë si hyrje.
val bitmap = BitmapExtractor.extract(result.generatedImage())
Imazhi i mëposhtëm u krijua nga inputet e mëposhtme, duke përdorur vetëm një model themeli.
Inputet:
- Njoftim : "një rakun vizatimor shumëngjyrësh i veshur me një kapelë me buzë të gjerë, duke mbajtur një shkop duke ecur nëpër pyll, i animuar, pamje treçerekëshe, pikturë"
- Fara : 312687592
- Përsëritjet : 20
Imazhi i krijuar: