Maison  >  Article  >  développement back-end  >  Remplacement uniquement de l'arrière-plan d'une image par la génération d'IA à l'aide de l'API Web de diffusion stable

Remplacement uniquement de l'arrière-plan d'une image par la génération d'IA à l'aide de l'API Web de diffusion stable

Patricia Arquette
Patricia Arquetteoriginal
2024-11-10 02:52:02856parcourir

Introduction

Ce guide montre comment remplacer l'arrière-plan d'une image en utilisant uniquement du code Python, sans recourir à un logiciel de retouche d'image comme Photoshop. Le but est de garder le sujet intact tout en échangeant dans un arrière-plan généré par l'IA.

Bien que cette approche ne soit peut-être pas révolutionnaire, elle répond à un besoin commun, j'espère donc qu'elle sera utile à ceux qui ont des exigences similaires.

Images d'entrée et de sortie

Commençons par les résultats.

L'image de sortie suivante a été générée à partir de l'image d'entrée présentée ci-dessous.

Image d'entrée

Replacing Only the Background of an Image with AI Generation Using the Stable Diffusion Web API

Image de sortie

Replacing Only the Background of an Image with AI Generation Using the Stable Diffusion Web API

Bibliothèques

Installer les requêtes pour gérer les appels API.

$ pip install requests

J'ai vérifié la version comme suit :

$ pip list | grep -e requests
requests                  2.31.0

Clé API

Pour la génération en arrière-plan, nous utiliserons l'API Web de Stability AI.

Pour accéder à cette API, vous devrez obtenir une clé API auprès de leur plateforme de développement. Pour connaître les tarifs, reportez-vous à la page Tarifs.

Pour garder votre clé en sécurité, enregistrez-la en tant que variable d'environnement plutôt que de la coder en dur dans votre code.

Dans mon environnement, j'utilise le fichier de paramètres zshrc.

$ open ~/.zshrc

J'ai enregistré la clé sous le nom STABILITY_API_KEY.

export STABILITY_API_KEY=your_api_key_here

Code

Ici, nous utilisons l'API Remove Background pour isoler le sujet. Nous transmettons ensuite l'image extraite à l'API Inpaint pour créer le nouvel arrière-plan.

L'invite utilisée est "Grandes fenêtres vitrées avec vue sur la métropole derrière"

import os
import requests

# File paths
input_path = './input.png'  # Original image
mask_path = './mask.png'  # Mask image (temporarily generated)
output_path = './output.png'  # Output image

# Check for API Key
api_key = os.getenv("STABILITY_API_KEY")
if api_key is None:
    raise Exception("Missing Stability API key.")

headers = {
    "Accept": "image/*",
    "Authorization": f"Bearer {api_key}"
}

# Call Remove Background API
response = requests.post(
    f"https://api.stability.ai/v2beta/stable-image/edit/remove-background",
    headers=headers,
    files={
        "image": open(input_path, "rb")
    },
    data={
        "output_format": "png"
    },
)

# Save mask image
if response.status_code == 200:
    with open(mask_path, 'wb') as file:
        file.write(response.content)
else:
    raise Exception(str(response.json()))

# Call Inpaint API
response = requests.post(
    "https://api.stability.ai/v2beta/stable-image/edit/inpaint",
    headers=headers,
    files={
        "image": open(mask_path, "rb"),
    },
    data={
        "prompt": "Large glass windows with a view of the metropolis behind",
        "output_format": "png",
        "grow_mask": 0,  # Disable blurring around the mask
    },
)

# Delete mask image
os.remove(mask_path)

# Save output image
if response.status_code == 200:
    with open(output_path, "wb") as file:
        file.write(response.content)
else:
    raise Exception(str(response.json()))

Utiliser remg

Une autre approche pour la suppression de l'arrière-plan consiste à utiliser rembg. Cette méthode ne nécessite qu'un seul appel d'API, ce qui la rend plus rentable, même si elle peut entraîner des différences dans la précision de l'extraction.

Tout d'abord, installez rembg.

$ pip install rembg

J'ai vérifié la version comme suit :

$ pip list | grep -e rembg
rembg                     2.0.59

Voici le code de cette approche :

from rembg import remove
import os
import requests

# File paths
input_path = './input.png'  # Input image path
mask_path = './mask.png'  # Mask image path (temporarily generated)
output_path = './output.png'  # Output image path

# Generate mask image with background removed
with open(input_path, 'rb') as i:
    with open(mask_path, 'wb') as o:
        input_image = i.read()
        mask_image = remove(input_image)
        o.write(mask_image)

# Check for API Key
api_key = os.getenv("STABILITY_API_KEY")
if api_key is None:
    raise Exception("Missing Stability API key.")

# Call Inpaint API
response = requests.post(
    "https://api.stability.ai/v2beta/stable-image/edit/inpaint",
    headers={
        "Accept": "image/*",
        "Authorization": f"Bearer {api_key}"
    },
    files={
        "image": open(mask_path, "rb"),
    },
    data={
        "prompt": "Large glass windows with a view of the metropolis behind",
        "output_format": "png",
        "grow_mask": 0,
    },
)

# Delete mask image
os.remove(mask_path)

# Save output image
if response.status_code == 200:
    with open(output_path, "wb") as file:
        file.write(response.content)
else:
    raise Exception(str(response.json()))

Voici l’image de sortie. Dans ce cas, la précision de l'extraction semble satisfaisante.

Replacing Only the Background of an Image with AI Generation Using the Stable Diffusion Web API

Si vous configurez un environnement de diffusion stable local, vous pouvez éliminer les coûts d'appel d'API, alors n'hésitez pas à explorer cette option si elle répond à vos besoins.

Conclusion

Être capable d'y parvenir grâce au code seul est très pratique.

C'est passionnant de constater les améliorations continues de l'efficacité des flux de travail.

Article japonais original

J'ai utilisé l'API Web de Stable Diffusion pour remplacer uniquement l'arrière-plan par une génération d'IA tout en laissant la personne dans l'image telle quelle.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn