525 lines
1.6 MiB
Plaintext
525 lines
1.6 MiB
Plaintext
|
{
|
||
|
"cells": [
|
||
|
{
|
||
|
"attachments": {},
|
||
|
"cell_type": "markdown",
|
||
|
"metadata": {},
|
||
|
"source": [
|
||
|
"# Marrying Grounding DINO with Stable Diffusion for Image Editing\n",
|
||
|
"\n",
|
||
|
"\n",
|
||
|
"[](https://github.com/IDEA-Research/GroundingDINO)\n",
|
||
|
"[](https://arxiv.org/abs/2303.05499) \n",
|
||
|
"[](https://youtu.be/wxWDt5UiwY8)\n",
|
||
|
"[](https://colab.research.google.com/github/roboflow-ai/notebooks/blob/main/notebooks/zero-shot-object-detection-with-grounding-dino.ipynb)\n",
|
||
|
"[](https://youtu.be/cMa77r3YrDk)\n",
|
||
|
"[](https://huggingface.co/spaces/ShilongLiu/Grounding_DINO_demo)"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"attachments": {},
|
||
|
"cell_type": "markdown",
|
||
|
"metadata": {},
|
||
|
"source": [
|
||
|
""
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"attachments": {},
|
||
|
"cell_type": "markdown",
|
||
|
"metadata": {},
|
||
|
"source": [
|
||
|
"# Install diffusers "
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "code",
|
||
|
"execution_count": 50,
|
||
|
"metadata": {},
|
||
|
"outputs": [
|
||
|
{
|
||
|
"name": "stdout",
|
||
|
"output_type": "stream",
|
||
|
"text": [
|
||
|
"huggingface/tokenizers: The current process just got forked, after parallelism has already been used. Disabling parallelism to avoid deadlocks...\n",
|
||
|
"To disable this warning, you can either:\n",
|
||
|
"\t- Avoid using `tokenizers` before the fork if possible\n",
|
||
|
"\t- Explicitly set the environment variable TOKENIZERS_PARALLELISM=(true | false)\n",
|
||
|
"Requirement already satisfied: diffusers in /home/liushilong/anaconda3/envs/ideadet2/lib/python3.7/site-packages (0.14.0)\n",
|
||
|
"Requirement already satisfied: transformers in /home/liushilong/anaconda3/envs/ideadet2/lib/python3.7/site-packages (4.27.4)\n",
|
||
|
"Requirement already satisfied: accelerate in /home/liushilong/anaconda3/envs/ideadet2/lib/python3.7/site-packages (0.18.0)\n",
|
||
|
"Requirement already satisfied: scipy in /home/liushilong/anaconda3/envs/ideadet2/lib/python3.7/site-packages (1.7.3)\n",
|
||
|
"Requirement already satisfied: safetensors in /home/liushilong/anaconda3/envs/ideadet2/lib/python3.7/site-packages (0.3.0)\n",
|
||
|
"Requirement already satisfied: requests in /home/liushilong/anaconda3/envs/ideadet2/lib/python3.7/site-packages (from diffusers) (2.28.1)\n",
|
||
|
"Requirement already satisfied: Pillow in /home/liushilong/anaconda3/envs/ideadet2/lib/python3.7/site-packages (from diffusers) (9.2.0)\n",
|
||
|
"Requirement already satisfied: regex!=2019.12.17 in /home/liushilong/anaconda3/envs/ideadet2/lib/python3.7/site-packages (from diffusers) (2022.7.25)\n",
|
||
|
"Requirement already satisfied: numpy in /home/liushilong/anaconda3/envs/ideadet2/lib/python3.7/site-packages (from diffusers) (1.21.6)\n",
|
||
|
"Requirement already satisfied: filelock in /home/liushilong/anaconda3/envs/ideadet2/lib/python3.7/site-packages (from diffusers) (3.9.0)\n",
|
||
|
"Requirement already satisfied: huggingface-hub>=0.10.0 in /home/liushilong/anaconda3/envs/ideadet2/lib/python3.7/site-packages (from diffusers) (0.13.3)\n",
|
||
|
"Requirement already satisfied: importlib-metadata in /home/liushilong/anaconda3/envs/ideadet2/lib/python3.7/site-packages (from diffusers) (4.12.0)\n",
|
||
|
"Requirement already satisfied: tqdm>=4.27 in /home/liushilong/anaconda3/envs/ideadet2/lib/python3.7/site-packages (from transformers) (4.64.0)\n",
|
||
|
"Requirement already satisfied: tokenizers!=0.11.3,<0.14,>=0.11.1 in /home/liushilong/anaconda3/envs/ideadet2/lib/python3.7/site-packages (from transformers) (0.13.3)\n",
|
||
|
"Requirement already satisfied: packaging>=20.0 in /home/liushilong/.local/lib/python3.7/site-packages (from transformers) (21.0)\n",
|
||
|
"Requirement already satisfied: pyyaml>=5.1 in /home/liushilong/anaconda3/envs/ideadet2/lib/python3.7/site-packages (from transformers) (6.0)\n",
|
||
|
"Requirement already satisfied: torch>=1.4.0 in /home/liushilong/anaconda3/envs/ideadet2/lib/python3.7/site-packages (from accelerate) (1.12.1+cu113)\n",
|
||
|
"Requirement already satisfied: psutil in /home/liushilong/anaconda3/envs/ideadet2/lib/python3.7/site-packages (from accelerate) (5.9.4)\n",
|
||
|
"Requirement already satisfied: typing-extensions>=3.7.4.3 in /home/liushilong/anaconda3/envs/ideadet2/lib/python3.7/site-packages (from huggingface-hub>=0.10.0->diffusers) (4.3.0)\n",
|
||
|
"Requirement already satisfied: pyparsing>=2.0.2 in /home/liushilong/anaconda3/envs/ideadet2/lib/python3.7/site-packages (from packaging>=20.0->transformers) (3.0.9)\n",
|
||
|
"Requirement already satisfied: zipp>=0.5 in /home/liushilong/anaconda3/envs/ideadet2/lib/python3.7/site-packages (from importlib-metadata->diffusers) (3.8.1)\n",
|
||
|
"Requirement already satisfied: idna<4,>=2.5 in /home/liushilong/anaconda3/envs/ideadet2/lib/python3.7/site-packages (from requests->diffusers) (3.3)\n",
|
||
|
"Requirement already satisfied: certifi>=2017.4.17 in /home/liushilong/anaconda3/envs/ideadet2/lib/python3.7/site-packages (from requests->diffusers) (2022.6.15)\n",
|
||
|
"Requirement already satisfied: charset-normalizer<3,>=2 in /home/liushilong/anaconda3/envs/ideadet2/lib/python3.7/site-packages (from requests->diffusers) (2.1.0)\n",
|
||
|
"Requirement already satisfied: urllib3<1.27,>=1.21.1 in /home/liushilong/anaconda3/envs/ideadet2/lib/python3.7/site-packages (from requests->diffusers) (1.26.11)\n"
|
||
|
]
|
||
|
}
|
||
|
],
|
||
|
"source": [
|
||
|
"! pip install diffusers transformers accelerate scipy safetensors"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "code",
|
||
|
"execution_count": 1,
|
||
|
"metadata": {},
|
||
|
"outputs": [],
|
||
|
"source": [
|
||
|
"import os\n",
|
||
|
"os.environ[\"CUDA_VISIBLE_DEVICES\"] = \"2\""
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "code",
|
||
|
"execution_count": 2,
|
||
|
"metadata": {},
|
||
|
"outputs": [],
|
||
|
"source": [
|
||
|
"import argparse\n",
|
||
|
"from functools import partial\n",
|
||
|
"import cv2\n",
|
||
|
"import requests\n",
|
||
|
"\n",
|
||
|
"from io import BytesIO\n",
|
||
|
"from PIL import Image\n",
|
||
|
"import numpy as np\n",
|
||
|
"from pathlib import Path\n",
|
||
|
"\n",
|
||
|
"\n",
|
||
|
"import warnings\n",
|
||
|
"warnings.filterwarnings(\"ignore\")\n",
|
||
|
"\n",
|
||
|
"\n",
|
||
|
"import torch\n",
|
||
|
"from torchvision.ops import box_convert\n",
|
||
|
"\n",
|
||
|
"from groundingdino.models import build_model\n",
|
||
|
"from groundingdino.util.slconfig import SLConfig\n",
|
||
|
"from groundingdino.util.utils import clean_state_dict\n",
|
||
|
"from groundingdino.util.inference import annotate, load_image, predict\n",
|
||
|
"import groundingdino.datasets.transforms as T\n",
|
||
|
"\n",
|
||
|
"from huggingface_hub import hf_hub_download\n"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"attachments": {},
|
||
|
"cell_type": "markdown",
|
||
|
"metadata": {},
|
||
|
"source": [
|
||
|
"# Load grounding dino models"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "code",
|
||
|
"execution_count": 3,
|
||
|
"metadata": {},
|
||
|
"outputs": [],
|
||
|
"source": [
|
||
|
"def load_model_hf(repo_id, filename, ckpt_config_filename, device='cpu'):\n",
|
||
|
" cache_config_file = hf_hub_download(repo_id=repo_id, filename=ckpt_config_filename)\n",
|
||
|
"\n",
|
||
|
" args = SLConfig.fromfile(cache_config_file) \n",
|
||
|
" model = build_model(args)\n",
|
||
|
" args.device = device\n",
|
||
|
"\n",
|
||
|
" cache_file = hf_hub_download(repo_id=repo_id, filename=filename)\n",
|
||
|
" checkpoint = torch.load(cache_file, map_location='cpu')\n",
|
||
|
" log = model.load_state_dict(clean_state_dict(checkpoint['model']), strict=False)\n",
|
||
|
" print(\"Model loaded from {} \\n => {}\".format(cache_file, log))\n",
|
||
|
" _ = model.eval()\n",
|
||
|
" return model "
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "code",
|
||
|
"execution_count": 4,
|
||
|
"metadata": {},
|
||
|
"outputs": [],
|
||
|
"source": [
|
||
|
"# Use this command for evaluate the Grounding DINO model\n",
|
||
|
"# Or you can download the model by yourself\n",
|
||
|
"ckpt_repo_id = \"ShilongLiu/GroundingDINO\"\n",
|
||
|
"ckpt_filenmae = \"groundingdino_swint_ogc.pth\"\n",
|
||
|
"ckpt_config_filename = \"GroundingDINO_SwinT_OGC.cfg.py\""
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "code",
|
||
|
"execution_count": 5,
|
||
|
"metadata": {},
|
||
|
"outputs": [
|
||
|
{
|
||
|
"name": "stdout",
|
||
|
"output_type": "stream",
|
||
|
"text": [
|
||
|
"final text_encoder_type: bert-base-uncased\n"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"name": "stderr",
|
||
|
"output_type": "stream",
|
||
|
"text": [
|
||
|
"Some weights of the model checkpoint at bert-base-uncased were not used when initializing BertModel: ['cls.predictions.transform.LayerNorm.bias', 'cls.predictions.bias', 'cls.predictions.transform.LayerNorm.weight', 'cls.seq_relationship.weight', 'cls.predictions.transform.dense.bias', 'cls.predictions.transform.dense.weight', 'cls.seq_relationship.bias']\n",
|
||
|
"- This IS expected if you are initializing BertModel from the checkpoint of a model trained on another task or with another architecture (e.g. initializing a BertForSequenceClassification model from a BertForPreTraining model).\n",
|
||
|
"- This IS NOT expected if you are initializing BertModel from the checkpoint of a model that you expect to be exactly identical (initializing a BertForSequenceClassification model from a BertForSequenceClassification model).\n"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"name": "stdout",
|
||
|
"output_type": "stream",
|
||
|
"text": [
|
||
|
"Model loaded from /home/liushilong/.cache/huggingface/hub/models--ShilongLiu--GroundingDINO/snapshots/4d4409dc29f29629f4ebb808a68ea67be53886b6/groundingdino_swint_ogc.pth \n",
|
||
|
" => _IncompatibleKeys(missing_keys=[], unexpected_keys=['label_enc.weight'])\n"
|
||
|
]
|
||
|
}
|
||
|
],
|
||
|
"source": [
|
||
|
"model = load_model_hf(ckpt_repo_id, ckpt_filenmae, ckpt_config_filename)"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"attachments": {},
|
||
|
"cell_type": "markdown",
|
||
|
"metadata": {},
|
||
|
"source": [
|
||
|
"# Load stable diffusion inpainting models"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "code",
|
||
|
"execution_count": 34,
|
||
|
"metadata": {},
|
||
|
"outputs": [
|
||
|
{
|
||
|
"name": "stderr",
|
||
|
"output_type": "stream",
|
||
|
"text": [
|
||
|
"Fetching 13 files: 100%|██████████| 13/13 [00:00<00:00, 44656.80it/s]\n"
|
||
|
]
|
||
|
}
|
||
|
],
|
||
|
"source": [
|
||
|
"from diffusers import StableDiffusionInpaintPipeline\n",
|
||
|
"\n",
|
||
|
"pipe = StableDiffusionInpaintPipeline.from_pretrained(\n",
|
||
|
" \"stabilityai/stable-diffusion-2-inpainting\",\n",
|
||
|
" torch_dtype=torch.float16,\n",
|
||
|
")\n",
|
||
|
"\n",
|
||
|
"pipe = pipe.to(\"cuda\")"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"attachments": {},
|
||
|
"cell_type": "markdown",
|
||
|
"metadata": {},
|
||
|
"source": [
|
||
|
"# Load demo image"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "code",
|
||
|
"execution_count": 10,
|
||
|
"metadata": {},
|
||
|
"outputs": [],
|
||
|
"source": [
|
||
|
"image_url = 'https://huggingface.co/ShilongLiu/GroundingDINO/resolve/main/cats.png'\n",
|
||
|
"local_image_path = 'cats.png'"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "code",
|
||
|
"execution_count": 11,
|
||
|
"metadata": {},
|
||
|
"outputs": [
|
||
|
{
|
||
|
"name": "stdout",
|
||
|
"output_type": "stream",
|
||
|
"text": [
|
||
|
"Image downloaded from url: https://huggingface.co/ShilongLiu/GroundingDINO/resolve/main/cats.png and saved to: cats.png.\n"
|
||
|
]
|
||
|
}
|
||
|
],
|
||
|
"source": [
|
||
|
"import io\n",
|
||
|
"\n",
|
||
|
"\n",
|
||
|
"def download_image(url, image_file_path):\n",
|
||
|
" r = requests.get(url, timeout=4.0)\n",
|
||
|
" if r.status_code != requests.codes.ok:\n",
|
||
|
" assert False, 'Status code error: {}.'.format(r.status_code)\n",
|
||
|
"\n",
|
||
|
" with Image.open(io.BytesIO(r.content)) as im:\n",
|
||
|
" im.save(image_file_path)\n",
|
||
|
"\n",
|
||
|
" print('Image downloaded from url: {} and saved to: {}.'.format(url, image_file_path))\n",
|
||
|
"\n",
|
||
|
"download_image(image_url, local_image_path)"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "markdown",
|
||
|
"metadata": {},
|
||
|
"source": [
|
||
|
"# Run Grounding DINO"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "code",
|
||
|
"execution_count": 131,
|
||
|
"metadata": {},
|
||
|
"outputs": [],
|
||
|
"source": [
|
||
|
"import os\n",
|
||
|
"import supervision as sv\n",
|
||
|
"\n",
|
||
|
"\n",
|
||
|
"TEXT_PROMPT = \"the black cat .\"\n",
|
||
|
"BOX_TRESHOLD = 0.45\n",
|
||
|
"TEXT_TRESHOLD = 0.25\n",
|
||
|
"\n",
|
||
|
"image_source, image = load_image(local_image_path)\n",
|
||
|
"\n",
|
||
|
"boxes, logits, phrases = predict(\n",
|
||
|
" model=model, \n",
|
||
|
" image=image, \n",
|
||
|
" caption=TEXT_PROMPT, \n",
|
||
|
" box_threshold=BOX_TRESHOLD, \n",
|
||
|
" text_threshold=TEXT_TRESHOLD\n",
|
||
|
")\n",
|
||
|
"\n",
|
||
|
"annotated_frame = annotate(image_source=image_source, boxes=boxes, logits=logits, phrases=phrases)\n",
|
||
|
"annotated_frame = annotated_frame[...,::-1] # BGR to RGB\n",
|
||
|
"\n",
|
||
|
"# image_source: np.ndarray\n",
|
||
|
"# annotated_frame: np.ndarray"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "code",
|
||
|
"execution_count": 132,
|
||
|
"metadata": {},
|
||
|
"outputs": [],
|
||
|
"source": [
|
||
|
"def generate_masks_with_grounding(image_source, boxes):\n",
|
||
|
" h, w, _ = image_source.shape\n",
|
||
|
" boxes_unnorm = boxes * torch.Tensor([w, h, w, h])\n",
|
||
|
" boxes_xyxy = box_convert(boxes=boxes_unnorm, in_fmt=\"cxcywh\", out_fmt=\"xyxy\").numpy()\n",
|
||
|
" mask = np.zeros_like(image_source)\n",
|
||
|
" for box in boxes_xyxy:\n",
|
||
|
" x0, y0, x1, y1 = box\n",
|
||
|
" mask[int(y0):int(y1), int(x0):int(x1), :] = 255\n",
|
||
|
" return mask"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "code",
|
||
|
"execution_count": 133,
|
||
|
"metadata": {},
|
||
|
"outputs": [],
|
||
|
"source": [
|
||
|
"image_mask = generate_masks_with_grounding(image_source, boxes)"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "code",
|
||
|
"execution_count": 134,
|
||
|
"metadata": {},
|
||
|
"outputs": [
|
||
|
{
|
||
|
"data": {
|
||
|
"image/png": "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
|
||
|
"text/plain": [
|
||
|
"<PIL.Image.Image image mode=RGB size=854x479>"
|
||
|
]
|
||
|
},
|
||
|
"execution_count": 134,
|
||
|
"metadata": {},
|
||
|
"output_type": "execute_result"
|
||
|
}
|
||
|
],
|
||
|
"source": [
|
||
|
"Image.fromarray(image_source)"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "code",
|
||
|
"execution_count": 135,
|
||
|
"metadata": {},
|
||
|
"outputs": [
|
||
|
{
|
||
|
"data": {
|
||
|
"image/png": "iVBORw0KGgoAAAANSUhEUgAAA1YAAAHfCAIAAADcHt4FAAEAAElEQVR4nOz9eaxteZbXB661fsMeznDHN8aYQ+RQmVRmZWVmFYXJKrC7oBuV1RJG3Ri5hVu4QbLbQm5DN0KA7EYgkBqhNnLLFritaiRkWqgog6XGYBWVRWaNWZWRERkZ8WJ8L9787nSmPfyGtfqP3zn7nnvfEBGZ78X09kehF/fss8+eh+9vjcjM0NPT09PT09PT8zhBH/QG9PT09PT09PT0vN/0ErCnp6enp6en57Gjl4A9PT09PT09PY8dvQTs6enp6enp6Xns6CVgT09PT09PT89jRy8Be3p6enp6enoeO3oJ2NPT09PT09Pz2NFLwJ6enp6enp6ex45eAvb09PT09PT0PHb0ErCnp6enp6en57Gjl4A9PT09PT09PY8dvQTs6enp6enp6Xns6CVgT09PT09PT89jRy8Be3p6enp6enoeO3oJ2NPT09PT09Pz2NFLwJ6enp6enp6ex45eAvb09PT09PT0PHb0ErCnp6enp6en57Gjl4A9PT09PT09PY8dvQTs6enp6enp6Xns6CVgT09PT09PT89jRy8Be3p6enp6enoeO3oJ2NPT09PT09Pz2NFLwJ6enp6enp6ex45eAvb09PT09PT0PHb0ErCnp6enp6en57Gjl4A9PT09PT09PY8dvQTs6enp6enp6Xns6CVgT09PT09PT89jRy8Be3p6enp6enoeO3oJ2NPT09PT09Pz2NFLwJ6enp6enp6ex45eAvb09PT09PT0PHb0ErCnp6enp6en57Gjl4A9PT09PT09PY8dvQTs6enp6enp6Xns6CVgT09PT09PT89jRy8Be3p6enp6enoeO3oJ2NPT09PT09Pz2KE/6A3o6enp6fnAEBEAQERETB/TFCI6NcP6x/RvN737uD4nIq5P/zixvmvp77TXzAyrg3nqEMHJo3S/BZ462j09jxRMl2xPT09PTw8AJEHTqZDuHXFPXXK3BHxHPjbS8JTI6/brbj3XacS7l3BKIPbir+f9pLcC9vT09Dym3K3GRISZlVLdx0SncuBeMmV9yoNtXQ9ryz9Y1lVyOj7M3Gk4pdS6sBORGCMiEtHdirkTi2kJRNQd/J6eR00vAXt6enp6ANYE390y7n42qgfb807N//Ew/nV0eo6ZY4zM3KnnpALXNWKa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
|
||
|
"text/plain": [
|
||
|
"<PIL.Image.Image image mode=RGB size=854x479>"
|
||
|
]
|
||
|
},
|
||
|
"execution_count": 135,
|
||
|
"metadata": {},
|
||
|
"output_type": "execute_result"
|
||
|
}
|
||
|
],
|
||
|
"source": [
|
||
|
"Image.fromarray(annotated_frame)"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "code",
|
||
|
"execution_count": 136,
|
||
|
"metadata": {},
|
||
|
"outputs": [
|
||
|
{
|
||
|
"data": {
|
||
|
"image/png": "iVBORw0KGgoAAAANSUhEUgAAA1YAAAHfCAIAAADcHt4FAAAH1UlEQVR4nO3WwQnAIAAEQU3/PZseQlBwZyq417FjAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFxknh4At1lrnZ5AwpwOHPjuOT0AAIDdJCAAQI4EBADIkYAAADkSEAAgRwICAORIQACAHAkIAJAjAQEAciQgAECOBAQAyJGAAAA5EhAAIEcCAgDkSEAAgBwJCACQIwEBAHIkIABAjgQEAMiRgAAAORIQACBHAgIA5EhAAIAcCQgAkCMBAQByJCAAQI4EBADIkYAAADkSEAAgRwICAORIQACAHAkIAJAjAQEAciQgAECOBAQAyJGAAAA5EhAAIEcCAgDkSEAAgBwJCACQIwEBAHIkIABAjgQEAMiRgAAAORIQACBHAgIA5EhAAIAcCQgAkCMBAQByJCAAQI4EBADIkYAAADkSEAAgRwICAORIQACAHAkIAJAjAQEAciQgAECOBAQAyJGAAAA5EhAAIEcCAgDkSEAAgBwJCACQIwEBAHIkIABAjgQEAMiRgAAAORIQACBHAgIA5EhAAIAcCQgAkCMBAQByJCAAQI4EBADIkYAAADkSEAAgRwICAORIQACAHAkIAJAjAQEAciQgAECOBAQAyJGAAAA5EhAAIEcCAgDkSEAAgBwJCACQIwEBAHIkIABAjgQEAMiRgAAAORIQACBHAgIA5EhAAIAcCQgAkCMBAQByJCAAQI4EBADIkYAAADkSEAAgRwICAORIQACAHAkIAJAjAQEAciQgAECOBAQAyJGAAAA5EhAAIEcCAgDkSEAAgBwJCACQIwEBAHIkIABAjgQEAMiRgAAAORIQACBHAgIA5EhAAIAcCQgAkCMBAQByJCAAQI4EBADIkYAAADkSEAAgRwICAORIQACAHAkIAJAjAQEAciQgAECOBAQAyJGAAAA5EhAAIEcCAgDkSEAAgBwJCACQIwEBAHIkIABAjgQEAMiRgAAAORIQACBHAgIA5EhAAIAcCQgAkCMBAQByJCAAQI4EBADIkYAAADkSEAAgRwICAORIQACAHAkIAJAjAQEAciQgAECOBAQAyJGAAAA5EhAAIEcCAgDkSEAAgBwJCACQIwEBAHIkIABAjgQEAMiRgAAAORIQACBHAgIA5EhAAIAcCQgAkCMBAQByJCAAQI4EBADIkYAAADkSEAAgRwICAORIQACAHAkIAJAjAQEAciQgAECOBAQAyJGAAAA5EhAAIEcCAgDkSEAAgBwJCACQIwEBAHIkIABAjgQEAMiRgAAAORIQACBHAgIA5EhAAIAcCQgAkCMBAQByJCAAQI4EBADIkYAAADkSEAAgRwICAORIQACAHAkIAJAjAQEAciQgAECOBAQAyJGAAAA5EhAAIEcCAgDkSEAAgBwJCACQIwEBAHIkIABAjgQEAMiRgAAAORIQACBHAgIA5EhAAIAcCQgAkCMBAQByJCAAQI4EBADIkYAAADkSEAAgRwICAORIQACAHAkIAJAjAQEAciQgAECOBAQAyJGAAAA5EhAAIEcCAgDkSEAAgBwJCACQIwEBAHIkIABAjgQEAMiRgAAAORIQACBHAgIA5EhAAIAcCQgAkCMBAQByJCAAQI4EBADIkYAAADkSEAAgRwICAORIQACAHAkIAJAjAQEAciQgAECOBAQAyJGAAAA5EhAAIEcCAgDkSEAAgBwJCACQIwEBAHIkIABAjgQEAMiRgAAAORIQACBHAgIA5EhAAIAcCQgAkCMBAQByJCAAQI4EBADIkYAAADkSEAAgRwICAORIQACAHAkIAJAjAQEAciQgAECOBAQAyJGAAAA5EhAAIEcCAgDkSEAAgBwJCACQIwEBAHIkIABAjgQEAMiRgAAAORIQACBHAgIA5EhAAIAcCQgAkCMBAQByJCAAQI4EBADIkYAAADkSEAAgRwICAORIQACAHAkIAJAjAQEAciQgAECOBAQAyJGAAAA5EhAAIEcCAgDkSEAAgBwJCACQIwEBAHIkIABAjgQEAMiRgAAAORIQACBHAgIA5EhAAIAcCQgAkCMBAQByJCAAQI4EBADIkYAAADkSEAAgRwICAORIQACAHAkIAJAjAQEAciQgAECOBAQAyJGAAAA5EhAAIEcCAgDkSEAAgBwJCACQIwEBAHIkIABAjgQEAMiRgAAAORIQACBHAgIA5EhAAIAcCQgAkCMBAQByJCAAQI4EBADIkYAAADkSEAAgRwICAORIQACAHAkIAJAjAQEAciQgAECOBAQAyJGAAAA5EhAAIEcCAgDkSEAAgBwJCACQIwEBAHIkIABAjgQEAMiRgAAAORIQACBHAgIA5EhAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD41QsduwXQaxIvPgAAAABJRU5ErkJggg==",
|
||
|
"text/plain": [
|
||
|
"<PIL.Image.Image image mode=RGB size=854x479>"
|
||
|
]
|
||
|
},
|
||
|
"execution_count": 136,
|
||
|
"metadata": {},
|
||
|
"output_type": "execute_result"
|
||
|
}
|
||
|
],
|
||
|
"source": [
|
||
|
"Image.fromarray(image_mask)"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "code",
|
||
|
"execution_count": 137,
|
||
|
"metadata": {},
|
||
|
"outputs": [],
|
||
|
"source": [
|
||
|
"# image_source"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"attachments": {},
|
||
|
"cell_type": "markdown",
|
||
|
"metadata": {},
|
||
|
"source": [
|
||
|
"# Image Inpainting"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "code",
|
||
|
"execution_count": 19,
|
||
|
"metadata": {},
|
||
|
"outputs": [],
|
||
|
"source": [
|
||
|
"image_source = Image.fromarray(image_source)\n",
|
||
|
"annotated_frame = Image.fromarray(annotated_frame)\n",
|
||
|
"image_mask = Image.fromarray(image_mask)"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "code",
|
||
|
"execution_count": 20,
|
||
|
"metadata": {},
|
||
|
"outputs": [],
|
||
|
"source": [
|
||
|
"image_source_for_inpaint = image_source.resize((512, 512))\n",
|
||
|
"image_mask_for_inpaint = image_mask.resize((512, 512))"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "code",
|
||
|
"execution_count": 44,
|
||
|
"metadata": {},
|
||
|
"outputs": [
|
||
|
{
|
||
|
"name": "stderr",
|
||
|
"output_type": "stream",
|
||
|
"text": [
|
||
|
"100%|██████████| 50/50 [00:02<00:00, 22.20it/s]\n"
|
||
|
]
|
||
|
}
|
||
|
],
|
||
|
"source": [
|
||
|
"prompt = \"a cute dinosaur\"\n",
|
||
|
"#image and mask_image should be PIL images.\n",
|
||
|
"#The mask structure is white for inpainting and black for keeping as is\n",
|
||
|
"image_inpainting = pipe(prompt=prompt, image=image_source_for_inpaint, mask_image=image_mask_for_inpaint).images[0]"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "code",
|
||
|
"execution_count": 45,
|
||
|
"metadata": {},
|
||
|
"outputs": [],
|
||
|
"source": [
|
||
|
"image_inpainting = image_inpainting.resize((image_source.size[0], image_source.size[1]))"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "code",
|
||
|
"execution_count": 46,
|
||
|
"metadata": {},
|
||
|
"outputs": [
|
||
|
{
|
||
|
"data": {
|
||
|
"image/png": "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
|
||
|
"text/plain": [
|
||
|
"<PIL.Image.Image image mode=RGB size=854x479>"
|
||
|
]
|
||
|
},
|
||
|
"execution_count": 46,
|
||
|
"metadata": {},
|
||
|
"output_type": "execute_result"
|
||
|
}
|
||
|
],
|
||
|
"source": [
|
||
|
"image_inpainting"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "code",
|
||
|
"execution_count": null,
|
||
|
"metadata": {},
|
||
|
"outputs": [],
|
||
|
"source": []
|
||
|
}
|
||
|
],
|
||
|
"metadata": {
|
||
|
"kernelspec": {
|
||
|
"display_name": "Python 3",
|
||
|
"language": "python",
|
||
|
"name": "python3"
|
||
|
},
|
||
|
"language_info": {
|
||
|
"codemirror_mode": {
|
||
|
"name": "ipython",
|
||
|
"version": 3
|
||
|
},
|
||
|
"file_extension": ".py",
|
||
|
"mimetype": "text/x-python",
|
||
|
"name": "python",
|
||
|
"nbconvert_exporter": "python",
|
||
|
"pygments_lexer": "ipython3",
|
||
|
"version": "3.7.12"
|
||
|
},
|
||
|
"orig_nbformat": 4
|
||
|
},
|
||
|
"nbformat": 4,
|
||
|
"nbformat_minor": 2
|
||
|
}
|