You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
openai-cookbook/examples/dalle/How_to_create_dynamic_masks...

598 lines
4.9 MiB
Plaintext

{
"cells": [
{
"cell_type": "markdown",
"metadata": {
"id": "NCiCQizqxBSv"
},
"source": [
"# How to create dynamic masks with DALL·E and Segment Anything\n",
"\n",
"Segment Anything is a model from Meta that can be used to select portions of images. Combined with DALL·E's ability to inpaint specified portions of images, you can use Segment Anything to easily select any part of an image you'd like to alter.\n",
"\n",
"In this notebook, we'll use these tools to become fashion designers and dynamically replace our digital models' outfits with tailored, original creations. The notebook follows this flow:\n",
"- **Setup:** Initialise your libraries and any location directories.\n",
"- **Generate original image:** Make an original image that we'll create dynamic masks from.\n",
"- **Generate mask:** Use Segment Anything to create a dynamic mask.\n",
"- **Create new image:** Generate a new image with the masked area inpainted with a fresh prompt."
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "91E6gN8cxE4e"
},
"source": [
"## Setup\n",
"\n",
"To get started we'll need to follow the [instructions](https://github.com/facebookresearch/segment-anything) for using the Segment Anything (SAM) model open-sourced by Meta. As of May 2023, the key steps are:\n",
"- Install [Pytorch](https://pytorch.org/get-started/locally/) (version 1.7+).\n",
"- Install the library using ```pip install git+https://github.com/facebookresearch/segment-anything.git```.\n",
"- Install dependencies using ```pip install opencv-python pycocotools matplotlib onnxruntime onnx```.\n",
"- Download a [model checkpoint](https://github.com/facebookresearch/segment-anything#model-checkpoints) to use (default size is 2.4 GB).\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"id": "0Qs6pVTvtZIg"
},
"outputs": [],
"source": [
"!pip install torch torchvision torchaudio\n",
"!pip install git+https://github.com/facebookresearch/segment-anything.git\n",
"!pip install opencv-python pycocotools matplotlib onnxruntime onnx\n",
"!pip install requests\n",
"!pip install openai\n",
"!pip install numpy"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"id": "vQC_oUx8tqS1"
},
"outputs": [],
"source": [
"!wget https://dl.fbaipublicfiles.com/segment_anything/sam_vit_h_4b8939.pth"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {
"id": "wBIC4srntdM8"
},
"outputs": [],
"source": [
"import cv2\n",
"import matplotlib.pyplot as plt\n",
"import matplotlib.image as mpimg\n",
"from matplotlib import rcParams\n",
"import numpy as np\n",
"from openai import OpenAI\n",
"import os\n",
"from PIL import Image\n",
"import requests\n",
"from segment_anything import sam_model_registry, SamAutomaticMaskGenerator, SamPredictor\n",
"import torch\n",
"\n",
"# Set directories for generation images and edit images\n",
"base_image_dir = os.path.join(\"images\", \"01_generations\")\n",
"mask_dir = os.path.join(\"images\", \"02_masks\")\n",
"edit_image_dir = os.path.join(\"images\", \"03_edits\")\n",
"\n",
"# Point to your downloaded SAM model\n",
"sam_model_filepath = \"./sam_vit_h_4b8939.pth\"\n",
"\n",
"# Initiate SAM model\n",
"sam = sam_model_registry[\"default\"](checkpoint=sam_model_filepath)\n",
"\n",
"# Initiate openAI client\n",
"client = OpenAI(api_key=os.environ.get(\"OPENAI_API_KEY\", \"<your OpenAI API key if not set as env var>\"))\n"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "6UzsByKRxHZt"
},
"source": [
"## Generate original image\n",
"\n",
"First we'll create an original image which we'll generate masks from."
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {
"id": "KRxf_PHwuDDb"
},
"outputs": [],
"source": [
"def process_dalle_images(response, filename, image_dir):\n",
" # save the images\n",
" urls = [datum.url for datum in response.data] # extract URLs\n",
" images = [requests.get(url).content for url in urls] # download images\n",
" image_names = [f\"{filename}_{i + 1}.png\" for i in range(len(images))] # create names\n",
" filepaths = [os.path.join(image_dir, name) for name in image_names] # create filepaths\n",
" for image, filepath in zip(images, filepaths): # loop through the variations\n",
" with open(filepath, \"wb\") as image_file: # open the file\n",
" image_file.write(image) # write the image to the file\n",
"\n",
" return filepaths"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {
"id": "937VVpQ7uH7M"
},
"outputs": [],
"source": [
"dalle_prompt = '''\n",
"Full length, zoomed out photo of our premium Lederhosen-inspired jumpsuit.\n",
"Showcase the intricate hand-stitched details and high-quality leather, while highlighting the perfect blend of Austrian heritage and modern fashion.\n",
"This piece appeals to a sophisticated, trendsetting audience who appreciates cultural fusion and innovative design.\n",
"'''"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {
"id": "b5nI3PGvuJV6"
},
"outputs": [],
"source": [
"# Generate your images\n",
"generation_response = client.images.generate(\n",
" model = \"dall-e-3\",\n",
" prompt=dalle_prompt,\n",
" n=3,\n",
" size=\"1024x1024\",\n",
" response_format=\"url\",\n",
")"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {
"id": "e6CclNUZuKdb"
},
"outputs": [],
"source": [
"filepaths = process_dalle_images(generation_response, \"generation\", base_image_dir)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"id": "aaJaZWxSuMXG"
},
"outputs": [],
"source": [
"# print the new generations\n",
"for filepath in filepaths:\n",
" print(filepath)\n",
" display(Image.open(filepath))"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "gbnNN_GuxLJP"
},
"source": [
"## Generate Mask\n",
"\n",
"Next we'll load up one of our images and generate masks.\n",
"\n",
"For this demonstration we're picking a UX where we \"click\" on a point on the image to generate masks from. However, there are [example notebooks](https://github.com/facebookresearch/segment-anything/blob/main/notebooks/automatic_mask_generator_example.ipynb) provided by Meta which show how to generate every possible mask for an image, draw a box, and some other useful approaches."
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {
"id": "gGiFFn1Kux6_"
},
"outputs": [],
"source": [
"# Pick one of your generated images\n",
"chosen_image = \"images/01_generations/generation_2.png\""
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {
"id": "94XUO7R-u0Nj"
},
"outputs": [],
"source": [
"# Function to display mask using matplotlib\n",
"def show_mask(mask, ax):\n",
" color = np.array([30 / 255, 144 / 255, 255 / 255, 0.6])\n",
" h, w = mask.shape[-2:]\n",
" mask_image = mask.reshape(h, w, 1) * color.reshape(1, 1, -1)\n",
" ax.imshow(mask_image)\n",
"\n",
"\n",
"# Function to display where we've \"clicked\"\n",
"def show_points(coords, labels, ax, marker_size=375):\n",
" pos_points = coords[labels == 1]\n",
" neg_points = coords[labels == 0]\n",
" ax.scatter(\n",
" pos_points[:, 0],\n",
" pos_points[:, 1],\n",
" color=\"green\",\n",
" marker=\"*\",\n",
" s=marker_size,\n",
" edgecolor=\"white\",\n",
" linewidth=1.25,\n",
" )\n",
" ax.scatter(\n",
" neg_points[:, 0],\n",
" neg_points[:, 1],\n",
" color=\"red\",\n",
" marker=\"*\",\n",
" s=marker_size,\n",
" edgecolor=\"white\",\n",
" linewidth=1.25,\n",
" )\n"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 835
},
"id": "DBdLivJcu1Ha",
"outputId": "15792f47-5bac-423f-bbd0-5053e9f480e9"
},
"outputs": [
{
"data": {
"image/png": "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
"text/plain": [
"<Figure size 1000x1000 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# Load chosen image using opencv\n",
"image = cv2.imread(chosen_image)\n",
"image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)\n",
"\n",
"# Display our chosen image\n",
"plt.figure(figsize=(10, 10))\n",
"plt.imshow(image)\n",
"plt.axis(\"on\")\n",
"plt.show()"
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 835
},
"id": "YWaGwMXhu2GS",
"outputId": "9bc19927-db97-4ce8-e06e-f9a454dcf44a"
},
"outputs": [
{
"data": {
"image/png": "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
"text/plain": [
"<Figure size 1000x1000 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# Set the pixel coordinates for our \"click\" to assign masks\n",
"input_point = np.array([[525, 325]])\n",
"input_label = np.array([1])\n",
"\n",
"# Display the point we've clicked on\n",
"plt.figure(figsize=(10, 10))\n",
"plt.imshow(image)\n",
"show_points(input_point, input_label, plt.gca())\n",
"plt.axis(\"on\")\n",
"plt.show()"
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "H8IRnYNPu270",
"outputId": "531b4cb1-af6e-4d87-fc24-e871e9c83fc0"
},
"outputs": [
{
"data": {
"text/plain": [
"(3, 1024, 1024)"
]
},
"execution_count": 14,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Initiate predictor with Segment Anything model\n",
"predictor = SamPredictor(sam)\n",
"predictor.set_image(image)\n",
"\n",
"# Use the predictor to gather masks for the point we clicked\n",
"masks, scores, logits = predictor.predict(\n",
" point_coords=input_point,\n",
" point_labels=input_label,\n",
" multimask_output=True,\n",
")\n",
"\n",
"# Check the shape - should be three masks of the same dimensions as our image\n",
"masks.shape"
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 1000
},
"id": "ZpMbl7-Ku4IL",
"outputId": "5b039f47-eca3-4c3b-e25c-275f62336827"
},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAxYAAAMxCAYAAAB2FyUpAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAAEAAElEQVR4nOy9efSlWVUe/Ozz3nt/Q01d1Q0NNC1EEZUFMSgSUWJjCwiiolki4oTiFDUaBEVdshQlUXFFkDgkGhQwS0DiQNDlBAIKDlHMpyAEGhS0G6TpsYbfeO979vfH3s/e+62eqmgDDvdoU1X33vc95+zh2dMZRFUV67Zu67Zu67Zu67Zu67Zu67Zud6O1j/QA1m3d1m3d1m3d1m3d1m3d1u0ff1sHFuu2buu2buu2buu2buu2but2t9s6sFi3dVu3dVu3dVu3dVu3dVu3u93WgcW6rdu6rdu6rdu6rdu6rdu63e22DizWbd3Wbd3Wbd3Wbd3Wbd3W7W63dWCxbuu2buu2buu2buu2buu2bne7rQOLdVu3dVu3dVu3dVu3dVu3dbvbbR1YrNu6rdu6rdu6rdu6rdu6rdvdbuvAYt3Wbd3Wbd3Wbd3Wbd3Wbd3udlsHFuu2buv2z6Y96lGPgojgOc95zkd6KOu2buu2buu2bv/k2jqwWLd1W7e7bM95znMgIvHfK17xirt85glPeMLkmfe+973/7wf6EWzveMc78HM/93P45m/+ZjziEY/A9vZ2zP3D1d7+9rfjW7/1W/GJn/iJOHHiBBaLBe5zn/vgoQ99KL7sy74M/+2//Tdcc801H7bx/FNq119/PZ75zGfi4z7u47C1tYVTp07h3/ybf4MXvehFUNW79e5xHPE//sf/wGMe8xhcdtll2NjYwH3ve1885SlPwR/90R/d6bO/8Au/gG/91m/FIx/5SNz//vfHkSNHsLm5iY/6qI/CF37hF+KXf/mX7/T5+9///hM9vb3/HvnIR96t+a3buq3bP6Om67Zu67Zud9G+7/u+TwHEf4997GPv9Pfve9/7dBiGyTPvec97PjyDvZN21VVXKQD9vu/7vv9n7769/z4c7Ud+5Ed0NptN+r3kkkt0a2tr8tlVV131YRnPP6X25je/WS+99NKg4dGjRye0/uzP/mw9ODj4kN599uxZffSjHx3vGoZBT548qa01BaCtNf2RH/mRO3z+yJEjE/6eOHFCF4vFbfT13Llzt/v8/e53PwWgx48f18svv/x2//v8z//8D2lu67Zu6/bPr60rFuu2but2we2yyy7DkSNH8NrXvhbXXXfdHf7u53/+5zGOI+5///t/+Ab3EW6z2QwPetCD8OVf/uV4/vOfj2c84xkftr5/5Vd+Bc961rOwWq3wGZ/xGfid3/kd7O3t4ZZbbsHu7i6uu+46vPzlL8cXfdEXYbFYfNjG9U+hnT59Gp/7uZ+Lm266CR//8R+PP/3TP8XZs2exs7ODn/iJn8B8Psdv//Zv4+lPf/qH9P6v+7qvw2tf+1q01vCDP/iDuOWWW3DzzTfjxhtvxLOe9Sz03vGsZz0Lr371q2/3+a/92q/FS1/6UrzrXe/C/v4+br31Vuzv7+Ov/uqv8C3f8i0AgN/5nd/BM5/5zDsdxwtf+EJ84AMfuN3//tf/+l8f0tzWbd3W7Z9h+0hHNuu2buv2D7+xYnG/+91Pn/rUpyoAfe5zn3uHv3/gAx+oAPQ5z3nOP5uKxWq1mvz7xS9+8YetYvFpn/ZpCkAf/OAH63K5vNPf7u7u/j8fzz+l9uxnP1sB6NbWlv71X//1bb7/wR/8wag0vPOd77yod7/lLW8JGXn6059+u7958pOfrAD0AQ94gI7jeNHjf8pTnhLjPzw8vM33rFi8+MUvvuh3r9u6rdu6nd/WFYt1W7d1u6j21V/91QCAl7zkJbf7/Zve9CZcc801+OiP/mh8xmd8xp2+6y//8i/xnOc8B1dffTU+5mM+BltbWzh+/Dge+tCH4tnPfjZuvPHGO3x2tVrhZ37mZ/CoRz0Kl112GebzOS699FJ83Md9HJ785CfjZ3/2Zy96bi996Usxn88hIvie7/mei3p2GIaL7u/vq/35n/85AOBzPudzMJvN7vS3W1tbd/jdzs4Onv/85+Oqq67CZZddhsVigfve97646qqr8KM/+qO4/vrrb/e5N7zhDXjSk56EK664AhsbG7jsssvwWZ/1WXjxi1+McRxv9xnu23nUox4FAPjlX/5lPPaxj8U973lPtNZus8H+hhtuwLOf/Ww89KEPxYkTJ7C5uYmP/uiPxtd8zdfgbW97253O+e60n//5nwcAfMmXfAn+xb/4F7f5/lu+5Vtw9OhRjOOIX/iFX7iod//Gb/xG/P07vuM7bvc3z3rWswAA7373u/GmN73pot4PAJ/6qZ8KANjb28PNN9980c+v27qt27pdVPtIRzbrtm7r9g+/1YpF710/5mM+RgHo7/3e793mt0972tMUgP7AD/yAvv71r7/TigWzpQB0c3NTT506pSISn11xxRX6jne84zbPrVYrfcxjHnObteUbGxt3urfhzioWP/RDPxRr2n/iJ37iQ6JTbR/OisX29rYC0C/90i/9kN/xZ3/2Z3rllVfGmFtreurUqQlNX/CCF9zmuW/7tm+L70VEL7nkksn+mquvvlrPnDlzm+coU1dddZU+4xnPiOdPnjypwzBMePSa17xGL7nkknjnfD6f7C1YLBb60pe+9HbnxQrbh8KHd7zjHfHsK1/5yjv83eMf/3gFoJ/6qZ96Ue//xm/8xpDdO2o7OzuhE9/zPd9zUe9XVf2iL/qi2BfSe7/N9+uKxbqt27r9fbZ1xWLd1m3dLqqJCL7qq74KAPBzP/dzk+92dnbwyle+Eq21+M2dtauuugoveclL8Dd/8zfY29vDTTfdhP39fbz2ta/Fwx/+cLzvfe/Dl37pl97muZe//OV4zWteg83NTbzoRS/C2bNnceutt2Jvbw/XX389fuVXfgVf9EVfdEHzUVX8h//wH/Dd3/3d2NjYwC/+4i/im7/5my/o2X8o7eEPfzgA4JWvfCVe9rKXofd+Uc9fe+21+OzP/mxce+21uPLKK/GKV7wCZ8+exU033YS9vT287W1vw3Oe8xzc4x73mDz3Ez/xE3jBC14AAPj6r/96vP/978ctt9yC06dP4wUveAFmsxle97rX4eu+7uvusO8/+7M/w/Of/3x853d+J66//nrcfPPN2NnZicrYW9/6Vnz+538+br31Vnzd130d3v72t2Nvbw/nzp3D3/zN3+CbvumbcHh4iK/5mq/Bm9/85oua9121v/zLv4y/P/jBD77D3/G7t7/97R9SP3fGr957nDr11re+9YLed/r0abz5zW/G0572NPzSL/0SAOAZz3jGnZ5Q9p//83/GFVdcgcVigVOnTuGRj3wkfviHfxi33HLLRcxk3dZt3f7Zt490ZLNu67Zu//BbrVioqv7t3/6tttb0yJEjevbs2fjdz/3czykAfcxjHqOqepcViztrZ8+e1csvv1wB6Bvf+MbJd8z0fv3Xf/1FvfP8isXBwYF+8Rd/cWSNX//611/U++6sfTgrFm94wxsmpxTd61730i/+4i/WH/mRH9HXve51d3giENuXf/mXKwC99NJL9W//9m8vqM/d3V09deqUAtCnPOUpt/ub//Jf/kuM6c1vfvPku3rS2DOe8Yw77Ofqq69WAPrd3/3dd/ibb/3Wb1UA+sQnPvE2392dikUd/+nTp+/wdz/2Yz8Wv6v6cFftec97Xjz33ve+93Z/80d/9Efxm4c97GF3+K6Xv/zlt3si2cbGhn7Xd33XbfYAsZ1fNayVIcrSm970pgue07qt27r9827risW6rdu6XXS78sor8ehHPzoqFGwvfvGLAQBPe9rT7nYfR48exVVXXQUAt1lbfskllwAAPvCBD3zI7z9z5gwe97jH4ZWvfCXufe974/d///djvf8/tnbVVVfht37rt/BxH/dxAIwur3zlK/GsZz0LV199NU6ePIknPOEJ+P3f//3bPLuzs4Nf/MVfBAB813d9F6688soL6vM1r
"text/plain": [
"<Figure size 1000x1000 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/png": "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
"text/plain": [
"<Figure size 1000x1000 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAxYAAAMxCAYAAAB2FyUpAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAAEAAElEQVR4nOy9ebyuWVUe+Kz9fufce6sKqKIKiqmUSUSCQQSHqLHoighIFDuNQTQt4ESibZwSjNGfonTbkW7FbjWJShKhf8rQifGHtBMIKESjQisiqCUKUsxTUeO995zz7dV/rPU8a72nblXdYghKfxtunXO+7x32XsOzhr323ubujl3btV3btV3btV3btV3btV3btY+gjY93B3Zt13Zt13Zt13Zt13Zt13btb37bBRa7tmu7tmu7tmu7tmu7tmu79hG3XWCxa7u2a7u2a7u2a7u2a7u2ax9x2wUWu7Zru7Zru7Zru7Zru7Zru/YRt11gsWu7tmu7tmu7tmu7tmu7tmsfcdsFFru2a7u2a7u2a7u2a7u2a7v2EbddYLFru7Zru7Zru7Zru7Zru7ZrH3HbBRa7tmu7tmu7tmu7tmu7tmu79hG3XWCxa7u2a7u2a7u2a7u2a7u2ax9x2wUWu7Zru/b/m/aoRz0KZoZnPvOZH++u7Nqu7dqu7dqufcK1XWCxa7u2a7fbnvnMZ8LM9O+FL3zh7d7z+Mc/fnXPW9/61o99Rz9O7fDwED/zMz+Dpz/96ficz/kcXHHFFTh16hQuuOACPOABD8BXfdVX4eUvf/nHvB9vetOb8E//6T/Fwx72MNzlLnfB/v4+7nWve+HhD384vvqrvxr/9t/+W1x99dUf8358Irb3vOc9+M7v/E586qd+Kk6dOoW73vWu+Lt/9+/iuc99Ltz9I3r2drvF//V//V949KMfjcsuuwwnTpzAfe5zHzz5yU/G7/zO79zu/WfPnsWP//iP4wu+4AtwySWX4OTJk7jvfe+Lr//6r8eb3vSmW73vr4vc7tqu7donUPNd27Vd27Xbad///d/vAPTvi7/4i2/z+ne84x2+LMvqnre85S3/bTp7G+3KK690AP793//9H9Xnvu9971uN1cz8kksuuQUNnvKUp/jh4eFH9d1sz372s32z2azed/HFF/upU6dWn1155ZUfk/d/IrfXvva1fumll4qGF1100YrWj3nMY/zs2bMf1rNvuOEG/6Iv+iI9a1kWv+SSS3yM4QB8jOHPfvazb/X+d73rXf7whz9c9+/t7fkll1yiv0+cOOE/93M/d857/zrI7a7t2q59YrXdjMWu7dqunXe77LLLcOGFF+LlL3853v72t9/qdc9//vOx3W5x3/ve979d5z6O7cSJE/iWb/kWvOhFL8Jb3/pWnD17Fh/84AdxcHCAN7zhDfjKr/xKAMDznvc8/O//+//+UX//L/zCL+AZz3gGjo6O8IVf+IX49V//dZw+fRrXXnstbr75Zrz97W/HC17wAjzxiU/E/v7+R/39n8jtuuuuw9//+38fH/jAB/DgBz8Yv//7v48bbrgBN910E37iJ34Ce3t7+LVf+zV827d924f1/G/4hm/Ay1/+cowx8EM/9EO49tpr8cEPfhDvf//78YxnPANzTjzjGc/AS17yklvc6+74H/6H/wF/8Ad/gFOnTuFnfuZncP311+ODH/wg3vnOd+JrvuZrcPbsWTz1qU/F6173ulvc//GW213btV37BGwf78hm13Zt1/76N85YfPInf7I/5SlPcQD+rGc961avf9CDHuQA/JnPfOb/L2Ysbq/NOf3zPu/zHIA/8IEP/Kg/n89+6EMferuZ5Ztvvvmj/v5P5Pa93/u9DsBPnTrlf/mXf3mL73/oh35IMw1/9md/doee/Ud/9EfSj2/7tm875zVPetKTJDfb7Xb13S/90i/p/h/7sR875/2f+7mf6wD8qquuukN9c//Yy+2u7dqufeK13YzFru3art2h9rSnPQ0A8LM/+7Pn/P41r3kNrr76atz//vfHF37hF97ms/74j/8Yz3zmM3HVVVfhAQ94AE6dOoU73/nOePjDH47v/d7vxfvf//5bvffo6Ag//dM/jUc96lG47LLLsLe3h0svvRSf+qmfiic96Un4d//u393hsT3vec/D3t4ezAzf8z3fc4fvv7VmZvicz/kcALjNmZ4Pt/3hH/4hAOBLvuRLsNlsbvPaU6dO3ep3N910E370R38UV155JS677DLs7+/jPve5D6688kr8yI/8CN7znvec875XvepV+Iqv+Arc+973xokTJ3DZZZfh7/29v4f/8B/+A7bb7Tnv4bqdRz3qUQCA//Sf/hO++Iu/GHe/+90xxrjFAvv3ve99+N7v/V48/OEPx13uchecPHkS97///fF1X/d1eOMb33ibY/5I2vOf/3wAwFd+5Vfifve73y2+/5Zv+RZcdNFF2G63+Lmf+7k79Oxf/uVf1u///J//83Ne84xnPAMA8OY3vxmvec1rVt/9P//P/wMAuPDCC/FN3/RN57yfz33FK16Bt73tbXeofx9rud21Xdu1T8D28Y5sdm3Xdu2vf+szFnNOf8ADHuAA/Dd/8zdvce3Xfu3XOgD/wR/8QX/lK195mzMWn/zJn6zvT5486Xe9613dzPTZve99b//TP/3TW9x3dHTkj370o1d14He5y138xIkTq8+Ot9uasfhf/9f/VTXtP/ETP/Fh0enW2na79c/5nM9xAP63/tbf+qg+2939ggsucAD+VV/1VR/2M173utf5FVdcIdqNMfyud73riqbPec5zbnHft3/7t69q9C+++OJVjf5VV13l119//S3uo0xdeeWV/h3f8R23qPHvPHrZy17mF1988WodwYUXXqi/9/f3/XnPe945x8UZtg/H3P3pn/6p7n3xi198q9c97nGPcwD+uZ/7uXfo+f/kn/wTye6ttZtuukk68T3f8z3nfO/DHvawW73/TW96k8bwMz/zM3eofx9rud21Xdu1T7y2m7HYtV3btTvUzAxPfepTAQD//t//+9V3N910E1784hdjjKFrbqtdeeWV+Nmf/Vn81V/9FU6fPo0PfOADOHPmDF7+8pfjsz/7s/GOd7wDX/VVX3WL+17wghfgZS97GU6ePInnPve5uOGGG/ChD30Ip0+fxnve8x78wi/8Ap74xCee13jcHd/6rd+K7/7u78aJEyfwohe9CN/8zd98XvfeXvvABz6AV7/61fjv//v/Hr/7u78LAPjO7/zOj8qze/vsz/5sAMCLX/xi/PzP/zzmnHfo/muuuQaPecxjcM011+CKK67AC1/4Qtxwww34wAc+gNOnT+ONb3wjnvnMZ+Jud7vb6r6f+ImfwHOe8xwAwDd+4zfine98J6699lpcd911eM5znoPNZoNXvOIV+IZv+IZbfffrXvc6/OiP/ii+67u+C+95z3vwwQ9+EDfddJNmxt7whjfgy77sy/ChD30I3/AN34A3velNOH36NG688Ub81V/9Fb7pm74JBwcH+Lqv+zq89rWvvUPjvr32x3/8x/r9oQ996K1ex+9uawem22q3xa85p3adesMb3nDOa25tVuj4d7d2//H230pud23Xdu0TsH28I5td27Vd++vf+oyFu/vb3vY2H2P4hRde6DfccIOu+/f//t87AH/0ox/t7n67Mxa31W644Qa//PLLHYC/+tWvXn3HTO83fuM33qFnHp+xOHv2rP/Df/gPlTV+5StfeYeed67GmY/j/y666KJzZvw/Gu1Vr3rVapeie9zjHv4P/+E/9Gc/+9n+ile8wm+88cbbvP8f/aN/5AD80ksv9be97W3n9c6bb77Z73rXuzoAf/KTn3zOa/7P//P/VJ9e+9rXrr7rO419x3d8x62+56qrrnIA/t3f/d23es0//af/1AH4E57whFt895HMWPT+X3fddbd63Y/92I/puq4Pt9d++Id/WPe99a1vPec1v/M7v6NrHvnIR66+ox6cPHnST58+fc77X/CCF+j+Jz7xibfal4+H3O7aru3aJ17bzVjs2q7t2h1uV1xxBb7oi75IMxRs/+E//AcAwNd+7dd+x
"text/plain": [
"<Figure size 1000x1000 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# Display the possible masks we can select along with their confidence\n",
"for i, (mask, score) in enumerate(zip(masks, scores)):\n",
" plt.figure(figsize=(10, 10))\n",
" plt.imshow(image)\n",
" show_mask(mask, plt.gca())\n",
" show_points(input_point, input_label, plt.gca())\n",
" plt.title(f\"Mask {i+1}, Score: {score:.3f}\", fontsize=18)\n",
" plt.axis(\"off\")\n",
" plt.show()"
]
},
{
"cell_type": "code",
"execution_count": 16,
"metadata": {
"id": "pUfL0bvTu6cf"
},
"outputs": [],
"source": [
"# Choose which mask you'd like to use\n",
"chosen_mask = masks[1]\n",
"\n",
"# We'll now reverse the mask so that it is clear and everything else is white\n",
"chosen_mask = chosen_mask.astype(\"uint8\")\n",
"chosen_mask[chosen_mask != 0] = 255\n",
"chosen_mask[chosen_mask == 0] = 1\n",
"chosen_mask[chosen_mask == 255] = 0\n",
"chosen_mask[chosen_mask == 1] = 255\n"
]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 1000
},
"id": "_GAYz_WTu7rr",
"outputId": "b94b1fa4-1764-4149-f828-ee955a813dde"
},
"outputs": [
{
"data": {
"image/png": "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
"text/plain": [
"<PIL.Image.Image image mode=RGBA size=1024x1024>"
]
},
"execution_count": 17,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# create a base blank mask\n",
"width = 1024\n",
"height = 1024\n",
"mask = Image.new(\"RGBA\", (width, height), (0, 0, 0, 1)) # create an opaque image mask\n",
"\n",
"# Convert mask back to pixels to add our mask replacing the third dimension\n",
"pix = np.array(mask)\n",
"pix[:, :, 3] = chosen_mask\n",
"\n",
"# Convert pixels back to an RGBA image and display\n",
"new_mask = Image.fromarray(pix, \"RGBA\")\n",
"new_mask"
]
},
{
"cell_type": "code",
"execution_count": 18,
"metadata": {
"id": "ddzlWgXLu9kj"
},
"outputs": [],
"source": [
"# We'll save this mask for re-use for our edit\n",
"new_mask.save(os.path.join(mask_dir, \"new_mask.png\"))"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "cIyQtNInxQsu"
},
"source": [
"## Create new image\n",
"\n",
"Now we'll combine our original image with the mask and the Edit endpoint for DALLE to inpaint the transparent area according to a new prompt. (as 0f January 2024 dall-e-2 is the only model that supports edits)\n"
]
},
{
"cell_type": "code",
"execution_count": 20,
"metadata": {
"id": "S-aVmhj8u_1W"
},
"outputs": [],
"source": [
"# edit an image\n",
"edit_response = client.images.edit(\n",
" image=open(chosen_image, \"rb\"), # from the generation section\n",
" mask=open(os.path.join(mask_dir, \"new_mask.png\"), \"rb\"), # from right above\n",
" prompt=\"Brilliant leather Lederhosen with a formal look, detailed, intricate, photorealistic\", # provide a prompt to fill the space\n",
" n=3,\n",
" size=\"1024x1024\",\n",
" response_format=\"url\",\n",
")\n",
"\n",
"edit_filepaths = process_dalle_images(edit_response, \"edits\", edit_image_dir)\n"
]
},
{
"cell_type": "code",
"execution_count": 21,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 304
},
"id": "3wF9JzR1vCbV",
"outputId": "1927179c-9c0d-4b2d-c239-c00e30c01b01"
},
"outputs": [
{
"data": {
"text/plain": [
"<matplotlib.image.AxesImage at 0x791b1f4c58a0>"
]
},
"execution_count": 21,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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
"text/plain": [
"<Figure size 1100x800 with 3 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# Display your beautiful creations!\n",
"%matplotlib inline\n",
"\n",
"# figure size in inches optional\n",
"rcParams[\"figure.figsize\"] = 11 ,8\n",
"\n",
"# read images\n",
"img_A = mpimg.imread(edit_filepaths[0])\n",
"img_B = mpimg.imread(edit_filepaths[1])\n",
"img_C = mpimg.imread(edit_filepaths[2])\n",
"\n",
"# display images\n",
"fig, ax = plt.subplots(1,3)\n",
"[a.axis(\"off\") for a in ax]\n",
"ax[0].imshow(img_A)\n",
"ax[1].imshow(img_B)\n",
"ax[2].imshow(img_C)"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "AK-BHQDMxUT0"
},
"source": [
"Beautiful!\n",
"\n",
"Now you too can easily create dynamic masks to extend your images - enjoy the APIs, and please share what you build!"
]
}
],
"metadata": {
"colab": {
"provenance": []
},
"kernelspec": {
"display_name": "Python 3",
"name": "python3"
},
"language_info": {
"name": "python"
}
},
"nbformat": 4,
"nbformat_minor": 0
}