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.
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.
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
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
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()))
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.
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.
Ê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.
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!