MediaPipe Image Generator görevi, metin istemine göre görseller oluşturmanıza olanak tanır. Bu görev, difüzyon teknikleriyle görüntüler oluşturmak için metin-resim modeli kullanır.
Görev, isteğe bağlı bir koşul resmiyle birlikte giriş olarak bir metin istemini kabul eder geliştirebileceği ve referans olarak kullanabileceği bir modeldir. Resim Oluşturucu sırasında modele sağlanan belirli kavramlara dayalı görüntüler de üretebilir. yeniden eğitmektir. Daha fazla bilgi için LoRA olarak değiştirin.
Bu talimatlarda açıklanan kod örneğini şu adreste bulabilirsiniz: GitHub'a gidin. Özellikler, modeller ve yapılandırma seçenekleri hakkında daha fazla bilgi Bu görev hakkında daha fazla bilgi için Genel Bakış'ı inceleyin.
Kod örneği
MediaPipe Tasks örnek kodu, bir Resim Oluşturucu'nun temel uygulamasıdır. Android için uygulama. Uygulamayı kendi Android cihazınız için başlangıç noktası olarak kullanabilirsiniz veya mevcut bir uygulamada değişiklik yaparken ona referansta bulunması iyi olur. Resim Oluşturucu örneği kod şurada barındırılıyor: GitHub'a gidin.
Kodu indirme
Aşağıdaki talimatlarda, örneğin yerel bir kopyasını nasıl oluşturacağınız gösterilmektedir kodu oluşturmak için git komut satırı aracını kullanın.
Örnek kodu indirmek için:
- Aşağıdaki komutu kullanarak git deposunu klonlayın:
git clone https://github.com/google-ai-edge/mediapipe-samples
- İsteğe bağlı olarak, git örneğinizi seyrek ödeme yöntemini kullanacak şekilde yapılandırın. Böylece,
yalnızca Resim Oluşturucu örnek uygulamasına ait dosyaları içerir:
cd mediapipe git sparse-checkout init --cone git sparse-checkout set examples/image_generator/android
Örnek kodun yerel sürümünü oluşturduktan sonra projeyi içe aktarabilirsiniz. Android Studio'ya gidip uygulamayı çalıştırın. Talimatlar için bkz. Android.
Temel bileşenler
Aşağıdaki dosyalarda bu resim oluşturma örneği için önemli bir kod bulunuyor uygulama:
- ImageGenerationHelper.kt: Görevi başlatır ve görüntü oluşturma işlemini tamamlar.
- DiffusionActivity.kt: Eklentiler veya LoRA ağırlıkları etkinleştirilmediğinde resimler oluşturur.
- PluginActivity.kt Kullanıcıların koşul sağlamasına olanak tanıyan eklenti modellerini uygular. kullanabilirsiniz.
- LoRAWeightActivity.kt: Temeli özelleştirmek için kullanılan LoRA ağırlıklarına erişir ve bunları işler ve belirli kavramların resimlerini oluşturmalarını sağlayan araçlardır.
Kurulum
Bu bölümde, geliştirme ortamınızı ve ayarlarınızı yönetmeyle ilgili kullanmak için özel olarak projeleri kodlayın. Şu konularda genel bilgi için: dahil olmak üzere MediaPipe görevlerini kullanmak için geliştirme ortamınızı platform sürümü gereksinimleri hakkında daha fazla bilgi için Android.
Bağımlılıklar
Resim Oluşturucu görevi,
com.google.mediapipe:tasks-vision-image-generator
kitaplığı. Bu bağımlılığı ekle
build.gradle
dosyasına kopyalayın:
dependencies {
implementation 'com.google.mediapipe:tasks-vision-image-generator:latest.release'
}
Android 12 (API 31) veya sonraki sürümleri çalıştıran cihazlar için yerel OpenCL kitaplığını ekleyin
AndroidManifest.xml
bağımlılığı. Daha fazla bilgi için
uses-native-library
kapanış etiketinin hemen öncesine yapıştırın.
Bazı Android cihazlar ek kitaplıklar da gerektirebilir:
<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
MediaPipe Image Generator görevi, uyumlu ve eğitilmiş bir temel modeli gerektirir karar veriyorum. Bir modeli indirdikten sonra gerekli bağımlılıkları yükleyin ve uygun bir biçime dönüştürmesidir. Ardından, dönüştürülmüş model olarak kullanabilirsiniz.
Resim Oluşturucu için eğitilmiş mevcut modeller hakkında daha fazla bilgi için göreve Modeller bölümüne genel bakış.
Temel modeli indir
Resim Oluşturucu, temel modelinin
runwayml/stable-diffusion-v1-5 EMA-only
model biçimi, aşağıdakilere göre
model:
runwayml/stable-diffusion-v1-5.
Bağımlılıkları yükleme ve modeli dönüştürme
$ pip install torch typing_extensions numpy Pillow requests pytorch_lightning absl-py
convert.py
komut dosyası:
$ python3 convert.py --ckpt_path <ckpt_path> --output_path <output_path>
Dönüştürülmüş modeli cihaza aktar
<output_path>
klasörünün içeriğini Android cihaza aktarın.
$ 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
Eklenti modellerini indirin ve LoRA ağırlıklarını ekleyin (İsteğe bağlı)
Eklenti modeli kullanmayı planlıyorsanız modelin indirilmelidir. İlave model gerektiren eklentiler için modellerin APK içinde paketlenmiş olması veya isteğe bağlı olarak indirilmesi gerekir. Eklenti modelleri hafiftir (~23 MB) ve doğrudan APK'nın içinde paketlenebilir. Ancak, eklenti modellerinin isteğe bağlı olarak indirilmesi önerilir.
Bir modeli şununla özelleştirdiyseniz: LoRA, bunları istediğiniz zaman indirebilirsiniz. Daha fazla daha fazla bilgi için LoRA ağırlıkları eklenti modeline bakın.
Görevi oluşturma
MediaPipe Resim Oluşturucu görevi,createFromOptions()
görevi görebilir. createFromOptions()
işlevi, yapılandırma için değerleri kabul eder
seçenekleri vardır. Yapılandırma seçenekleri hakkında daha fazla bilgi edinmek için Yapılandırma
seçenekleri bulabilirsiniz.
Yapılandırma seçenekleri
Bu görev, Android uygulamaları için aşağıdaki yapılandırma seçeneklerini içerir:
Seçenek Adı | Açıklama | Değer Aralığı |
---|---|---|
imageGeneratorModelDirectory |
Model ağırlıklarının depolandığı resim oluşturucu model dizini. | PATH |
loraWeightsFilePath |
LoRA ağırlıkları dosyasının yolunu ayarlar. İsteğe bağlıdır ve yalnızca şu durumlarda geçerlidir model LoRA ile özelleştirildi. | PATH |
errorListener |
İsteğe bağlı bir hata işleyici ayarlar. | N/A |
Görev, kullanıcıların durum resimleri eklemesine olanak tanıyan eklenti modellerini de destekler. görev girişinde yer alır. Temel model bu bilgileri geliştirip referans olarak kullanabilir. üretiliyor. Bu durum resimleri, yüz önemli noktaları, kenar dış çizgileri ve Derinlik tahminleri: Bu tahminler, modelin gerekli bilgileri edinip ve görseller üretmenizi sağlar.
Temel modeline bir eklenti modeli eklerken,
seçenekleri vardır. Face belirgin işaret eklentisi, Canny kenarı olan faceConditionOptions
kullanır.
eklentisi edgeConditionOptions
kullanır ve Depth eklentisi
depthConditionOptions
.
Canny Edge seçenekleri
edgeConditionOptions
içinde aşağıdaki seçenekleri yapılandırın.
Seçenek Adı | Açıklama | Değer Aralığı | Varsayılan Değer |
---|---|---|---|
threshold1 |
Histerezis prosedürü için birinci eşik. | Float |
100 |
threshold2 |
Histerezis prosedürünün ikinci eşiği. | Float |
200 |
apertureSize |
Sobel operatörü için diyafram boyutu. Genel aralık 3-7 arasındadır. | Integer |
3 |
l2Gradient |
Görüntü gradyanının büyüklüğünü hesaplamak için L2 normunun kullanılıp kullanılmadığı, kullanılmasıyla ilgilidir. | BOOLEAN |
False |
EdgePluginModelBaseOptions |
Yolu belirleyen BaseOptions nesnesi
ilişkilendirme modelini kullanır. |
BaseOptions nesne |
N/A |
Bu yapılandırma seçeneklerinin işleyiş şekli hakkında daha fazla bilgi edinmek için Canny kenar dedektörü.
Yüzle ilgili önemli nokta seçenekleri
faceConditionOptions
içinde aşağıdaki seçenekleri yapılandırın.
Seçenek Adı | Açıklama | Değer Aralığı | Varsayılan Değer |
---|---|---|---|
minFaceDetectionConfidence |
Yüz tanıma için gereken minimum güven puanı kabul edilir. | Float [0.0,1.0] |
0.5 |
minFacePresenceConfidence |
Yüz tanımanın minimum güven puanı puanı. | Float [0.0,1.0] |
0.5 |
faceModelBaseOptions |
Yolu belirleyen BaseOptions nesnesi
durum resmini oluşturan model için geçerlidir. |
BaseOptions nesne |
N/A |
FacePluginModelBaseOptions |
Yolu belirleyen BaseOptions nesnesi
ilişkilendirme modelini kullanır. |
BaseOptions nesne |
N/A |
Bu yapılandırma seçeneklerinin işleyiş şekli hakkında daha fazla bilgi edinmek için Yüz İşaretçisi görevi.
Derinlik seçenekleri
depthConditionOptions
içinde aşağıdaki seçenekleri yapılandırın.
Seçenek Adı | Açıklama | Değer Aralığı | Varsayılan Değer |
---|---|---|---|
depthModelBaseOptions |
Yolu belirleyen BaseOptions nesnesi
durum resmini oluşturan model için geçerlidir. |
BaseOptions nesne |
N/A |
depthPluginModelBaseOptions |
Yolu belirleyen BaseOptions nesnesi
ilişkilendirme modelini kullanır. |
BaseOptions nesne |
N/A |
Yalnızca temel modelle oluştur
val options = ImageGeneratorOptions.builder()
.setImageGeneratorModelDirectory(modelPath)
.build()
imageGenerator = ImageGenerator.createFromOptions(context, options)
Eklentilerle oluşturma
İsteğe bağlı bir eklenti modeli uyguluyorsanız,
setPluginModelBaseOptions
ile eklenti modeli. Eklenti modeli,
indirilmiş ek model kullanmak için,
BaseOptions
Yüz belirgin işareti
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)
Kenarlı
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)
Derin
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)
LoRA ağırlıklarıyla oluşturma
LoRA ağırlıklarını dahil ediyorsanız aşağıdaki işlemler için loraWeightsFilePath
parametresini kullanın:
yol konumunu işaret eder.
val options = ImageGeneratorOptions.builder()
.setLoraWeightsFilePath(weightsPath)
.setImageGeneratorModelDirectory(modelPath)
.build()
imageGenerator = ImageGenerator.createFromOptions(context, options)
Verileri hazırlama
Resim Oluşturucu şu girişleri kabul eder:
- prompt (gerekli): Oluşturulacak resmi açıklayan metin istemi.
- iterations (gerekli): Resmi oluşturmak için yapılan toplam iterasyon sayısıdır. CEVAP başlangıç noktası 20’dir.
- seed (gerekli): Görüntü oluşturma sırasında kullanılan rastgele çekirdek.
- condition image (isteğe bağlı): Modelin referans olarak kullandığı görüntü oluşturuyor. Yalnızca eklenti modeli kullanılırken geçerlidir.
- condition type (isteğe bağlı): Görevle kullanılan eklenti modelinin türü. Yalnızca eklenti modeli kullanılırken geçerlidir.
Yalnızca temel modeli içeren girişler
fun setInput(prompt: String, iteration: Int, seed: Int) {
imageGenerator.setInputs(prompt, iteration, seed)
}
Eklentili girişler
İsteğe bağlı bir eklenti modeli uyguluyorsanız ayrıca conditionType
parametresini seçip eklenti modelini ve sourceConditionImage
parametresini
durum görüntüsünü oluşturur.
Seçenek Adı | Açıklama | Değer |
---|---|---|
conditionType |
Temel modele uygulanan eklenti modeli. | {"FACE", "EDGE", "DEPTH"} |
sourceConditionImage |
Durum görüntüsünü oluşturmak için kullanılan kaynak resim. | MPImage nesne |
Eklenti modeli kullanıyorsanızcreateConditionImage
durum resmi:
fun createConditionImage(
inputImage: MPImage,
conditionType: ConditionType
): Bitmap {
val result =
imageGenerator.createConditionImage(inputImage, conditionType)
return BitmapExtractor.extract(result)
}
Durum resmini oluşturduktan sonra, iterasyon, çekirdek ve yineleme sayısı gibi ayrıntıları ifade eder.
imageGenerator.setInputs(
prompt,
conditionalImage,
conditionType,
iteration,
seed
)
LoRA ağırlıkları olan girişler
LoRA ağırlıkları kullanıyorsanız jetonun metin isteminde bulunduğundan emin olun. temsil ettiği spesifik kavramı içeren bir resim oluşturmayı ağırlıklar.
fun setInput(prompt: String, iteration: Int, seed: Int) {
imageGenerator.setInputs(prompt, iteration, seed)
}
Görevi çalıştırma
Şurada sağlanan girişleri kullanarak bir resim oluşturmak için generate()
yöntemini kullanın:
geri dönüp bakarsınız. Bu işlem tek bir oluşturulmuş görüntü üretir.
Yalnızca temel modelle oluştur
fun generate(prompt: String, iteration: Int, seed: Int): Bitmap {
val result = imageGenerator.generate(prompt, iteration, seed)
val bitmap = BitmapExtractor.extract(result?.generatedImage())
return bitmap
}
Eklentilerle oluşturma
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
}
LoRA ağırlıklarıyla oluşturma
LoRA ağırlıklarıyla özelleştirilmiş bir modelle görüntü oluşturma süreci sürecin nasıl ilerlediğini gösterir. Jetonun yer alır ve aynı kodu çalıştırır.
fun generate(prompt: String, iteration: Int, seed: Int): Bitmap {
val result = imageGenerator.generate(prompt, iteration, seed)
val bitmap = BitmapExtractor.extract(result?.generatedImage())
return bitmap
}
Yinelemeli oluşturma
Ayrıca, Resim Oluşturucu, her bir görüntü oluşturma işleminde
iterasyon (iterations
giriş parametresinde tanımlandığı gibi). Bunları görüntülemek için
ara sonuçlar, setInputs
yöntemini çağırın ve ardından execute()
yöntemini çağırın
her bir adımdan oluşur. Ara değeri görüntülemek için showResult
parametresini true
olarak ayarlayın
sonuç.
fun execute(showResult: Boolean): Bitmap {
val result = imageGenerator.execute(showResult)
val bitmap =
BitmapExtractor.extract(result.generatedImage())
return bitmap
}
Sonuçları işleme ve görüntüleme
Resim Oluşturucu, oluşturulanImageGeneratorResult
resmi, tamamlanma zamanının zaman damgası ve varsa koşullu resim
bir giriş olarak sağlandı.
val bitmap = BitmapExtractor.extract(result.generatedImage())
Aşağıdaki resim, yalnızca bir modeli oluşturmaktır.
Girişler:
- İstem: "gevşek geniş kenarlı şapka takmış renkli bir çizgi film rakun ormanda yürüyen bir çubuk tutan, animasyonlu, üç dörtlük görünüm, resim"
- Başlangıç noktası: 312687592
- Yineleme sayısı: 20
Oluşturulan resim: