├── DiffMopher.ipynb ├── 240522facefusion_new.ipynb ├── My_Stable_Diffusion.ipynb ├── My_img2img.ipynb ├── clip_interrogator.ipynb ├── fast_stable_diffusion_AUTOMATIC1111.ipynb └── My_iPERCore.ipynb /DiffMopher.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": { 6 | "id": "view-in-github", 7 | "colab_type": "text" 8 | }, 9 | "source": [ 10 | "\"Open" 11 | ] 12 | }, 13 | { 14 | "cell_type": "code", 15 | "execution_count": null, 16 | "metadata": { 17 | "id": "6FZD9IdB5HNV" 18 | }, 19 | "outputs": [], 20 | "source": [ 21 | "%cd /content/\n", 22 | "!git lfs install\n", 23 | "!git clone https://huggingface.co/spaces/microsoft/HuggingGPT\n", 24 | "%cd /content/HuggingGPT/\n", 25 | "\n", 26 | "!pip install -r requirements.txt\n", 27 | "!pip install gradio\n", 28 | "\n", 29 | "!pip install --upgrade pyngrok\n", 30 | "import os\n", 31 | "from pyngrok import ngrok, conf\n", 32 | "\n", 33 | "# ngrokトークンを設定\n", 34 | "conf.get_default().auth_token = \"1ooR0mbvnaIetot2hIRcaZGLtJT_4hrSyR972wYZBfAp9Wbzi\"\n", 35 | "public_url = ngrok.connect(7860)\n", 36 | "print(f\"ngrok URL: {public_url}\")\n" 37 | ] 38 | }, 39 | { 40 | "cell_type": "code", 41 | "execution_count": null, 42 | "metadata": { 43 | "id": "-rQS8b284zmS" 44 | }, 45 | "outputs": [], 46 | "source": [ 47 | "! git clone https://github.com/cedro3/DiffMorpher.git\n", 48 | "%cd DiffMorpher\n", 49 | "! pip install -r requirements.txt\n", 50 | "! python app.py" 51 | ] 52 | } 53 | ], 54 | "metadata": { 55 | "accelerator": "GPU", 56 | "colab": { 57 | "machine_shape": "hm", 58 | "provenance": [], 59 | "authorship_tag": "ABX9TyMWvRgG4F2IPFDWaj4VfFWv", 60 | "include_colab_link": true 61 | }, 62 | "kernelspec": { 63 | "display_name": "Python 3", 64 | "name": "python3" 65 | }, 66 | "language_info": { 67 | "name": "python" 68 | } 69 | }, 70 | "nbformat": 4, 71 | "nbformat_minor": 0 72 | } -------------------------------------------------------------------------------- /240522facefusion_new.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "nbformat": 4, 3 | "nbformat_minor": 0, 4 | "metadata": { 5 | "colab": { 6 | "provenance": [], 7 | "machine_shape": "hm", 8 | "gpuType": "T4", 9 | "authorship_tag": "ABX9TyNtyzgGbUVuSOYpQZUAptAs", 10 | "include_colab_link": true 11 | }, 12 | "kernelspec": { 13 | "name": "python3", 14 | "display_name": "Python 3" 15 | }, 16 | "language_info": { 17 | "name": "python" 18 | }, 19 | "accelerator": "GPU" 20 | }, 21 | "cells": [ 22 | { 23 | "cell_type": "markdown", 24 | "metadata": { 25 | "id": "view-in-github", 26 | "colab_type": "text" 27 | }, 28 | "source": [ 29 | "\"Open" 30 | ] 31 | }, 32 | { 33 | "cell_type": "code", 34 | "execution_count": null, 35 | "metadata": { 36 | "id": "uKVj7Agr1Q4_" 37 | }, 38 | "outputs": [], 39 | "source": [ 40 | "!wget https://archive.creativaier.com/comfyui/scripts/setup_script001\n", 41 | "!mv setup_script001 setup_script.sh\n", 42 | "!chmod +x setup_script.sh\n", 43 | "!./setup_script.sh\n", 44 | "!rm -rf setup_script.sh\n", 45 | "\n", 46 | "%cd /content/source_code\n", 47 | "!python install.py --torch cuda-12.1 --onnxruntime cuda-12.1 --skip-venv\n", 48 | "\n", 49 | "!wget https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-amd64.deb\n", 50 | "!dpkg -i cloudflared-linux-amd64.deb\n", 51 | "\n", 52 | "import subprocess\n", 53 | "import threading\n", 54 | "import time\n", 55 | "import socket\n", 56 | "\n", 57 | "def iframe_thread(port):\n", 58 | " while True:\n", 59 | " time.sleep(0.5)\n", 60 | " sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)\n", 61 | " result = sock.connect_ex(('127.0.0.1', port))\n", 62 | " if result == 0:\n", 63 | " break\n", 64 | " sock.close()\n", 65 | "\n", 66 | " p = subprocess.Popen([\"cloudflared\", \"tunnel\", \"--url\", f\"http://127.0.0.1:{port}\"], stdout=subprocess.PIPE, stderr=subprocess.PIPE)\n", 67 | " for line in p.stderr:\n", 68 | " l = line.decode()\n", 69 | " if \"trycloudflare.com \" in l:\n", 70 | " print(\"This is the URL to access:\", l[l.find(\"http\"):], end='')\n", 71 | "\n", 72 | "\n", 73 | "# スレッドの開始\n", 74 | "threading.Thread(target=iframe_thread, daemon=True, args=(7860,)).start()\n", 75 | "\n", 76 | "# コードの実行\n", 77 | "%cd /content/source_code\n", 78 | "!python run.py --execution-providers cuda" 79 | ] 80 | } 81 | ] 82 | } -------------------------------------------------------------------------------- /My_Stable_Diffusion.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": { 6 | "id": "view-in-github", 7 | "colab_type": "text" 8 | }, 9 | "source": [ 10 | "\"Open" 11 | ] 12 | }, 13 | { 14 | "cell_type": "code", 15 | "execution_count": null, 16 | "metadata": { 17 | "id": "RrqY6TqCNWNo" 18 | }, 19 | "outputs": [], 20 | "source": [ 21 | "#@title セットアップ\n", 22 | "\n", 23 | "# ライブラリのインストール\n", 24 | "!pip install diffusers==0.8.0 transformers scipy ftfy\n", 25 | "\n", 26 | "# トークン設定\n", 27 | "YOUR_TOKEN=\"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\"#@param {type:\"string\"}\n", 28 | "\n", 29 | "# パイプライン構築\n", 30 | "from diffusers import StableDiffusionPipeline\n", 31 | "pipe = StableDiffusionPipeline.from_pretrained(\"CompVis/stable-diffusion-v1-4\", use_auth_token=YOUR_TOKEN)\n", 32 | "pipe.to(\"cuda\")" 33 | ] 34 | }, 35 | { 36 | "cell_type": "code", 37 | "execution_count": null, 38 | "metadata": { 39 | "id": "ppaduE-0O9gT" 40 | }, 41 | "outputs": [], 42 | "source": [ 43 | "#@title 画像生成\n", 44 | "\n", 45 | "# 設定\n", 46 | "import os\n", 47 | "out_dir = \"test\" #@param {type:\"string\"} \n", 48 | "os.makedirs(out_dir, exist_ok=True)\n", 49 | "\n", 50 | "# 生成\n", 51 | "prompt = \"An astronaut riding a horse in a photorealistic style\" #@param {type:\"string\"}\n", 52 | "image = pipe(prompt)[\"images\"][0]\n", 53 | "\n", 54 | "# 保存\n", 55 | "sentence = prompt.replace(' ','_')\n", 56 | "out_path = out_dir+'/'+sentence+'.png'\n", 57 | "image.save(out_path)\n", 58 | "\n", 59 | "# 表示\n", 60 | "from IPython.display import Image,display\n", 61 | "display(Image(out_path))" 62 | ] 63 | }, 64 | { 65 | "cell_type": "code", 66 | "execution_count": null, 67 | "metadata": { 68 | "id": "QrXp6dv8Twyx" 69 | }, 70 | "outputs": [], 71 | "source": [ 72 | "#@title 画像のダウンロード\n", 73 | "from google.colab import files\n", 74 | "files.download(out_path)" 75 | ] 76 | }, 77 | { 78 | "cell_type": "code", 79 | "execution_count": null, 80 | "metadata": { 81 | "id": "yAx77SNWcSko" 82 | }, 83 | "outputs": [], 84 | "source": [ 85 | "#@title 連続画像生成\n", 86 | "\n", 87 | "# 設定\n", 88 | "import os\n", 89 | "out_dir = \"01\" #@param {type:\"string\"} \n", 90 | "os.makedirs(out_dir, exist_ok=True)\n", 91 | "repeat = 1000 #@param {type:\"integer\"}\n", 92 | "\n", 93 | "for i in range(repeat):\n", 94 | " # 生成\n", 95 | " prompt = \"An astronaut riding a horse in a photorealistic style\" #@param {type:\"string\"}\n", 96 | " image = pipe(prompt)[\"images\"][0]\n", 97 | "\n", 98 | " # 保存\n", 99 | " sentence = prompt.replace(' ','_')\n", 100 | " out_path = out_dir+'/'+str(i)+'_'+sentence+'.png'\n", 101 | " image.save(out_path)\n", 102 | "\n", 103 | " # 表示\n", 104 | " print(i)\n", 105 | " from IPython.display import Image,display\n", 106 | " display(Image(out_path))" 107 | ] 108 | }, 109 | { 110 | "cell_type": "code", 111 | "execution_count": null, 112 | "metadata": { 113 | "id": "pzDidkSldluW" 114 | }, 115 | "outputs": [], 116 | "source": [ 117 | "#@title 画像のダウンロード\n", 118 | "\n", 119 | "if os.path.isfile('data.zip'):\n", 120 | " os.remove('data.zip')\n", 121 | "\n", 122 | "! zip -r data.zip $out_dir\n", 123 | "from google.colab import files\n", 124 | "files.download('data.zip')" 125 | ] 126 | } 127 | ], 128 | "metadata": { 129 | "accelerator": "GPU", 130 | "colab": { 131 | "provenance": [], 132 | "authorship_tag": "ABX9TyOcRpok1pAcGGpwwFDaXyfa", 133 | "include_colab_link": true 134 | }, 135 | "gpuClass": "standard", 136 | "kernelspec": { 137 | "display_name": "Python 3", 138 | "name": "python3" 139 | }, 140 | "language_info": { 141 | "name": "python" 142 | } 143 | }, 144 | "nbformat": 4, 145 | "nbformat_minor": 0 146 | } -------------------------------------------------------------------------------- /My_img2img.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "nbformat": 4, 3 | "nbformat_minor": 0, 4 | "metadata": { 5 | "colab": { 6 | "provenance": [], 7 | "private_outputs": true, 8 | "include_colab_link": true 9 | }, 10 | "kernelspec": { 11 | "name": "python3", 12 | "display_name": "Python 3" 13 | }, 14 | "language_info": { 15 | "name": "python" 16 | }, 17 | "accelerator": "GPU" 18 | }, 19 | "cells": [ 20 | { 21 | "cell_type": "markdown", 22 | "metadata": { 23 | "id": "view-in-github", 24 | "colab_type": "text" 25 | }, 26 | "source": [ 27 | "\"Open" 28 | ] 29 | }, 30 | { 31 | "cell_type": "code", 32 | "source": [ 33 | "#@title **Setup**\n", 34 | "\n", 35 | "!nvidia-smi -L\n", 36 | "!pip install diffusers transformers ftfy accelerate\n", 37 | "\n", 38 | "import torch\n", 39 | "from torch import autocast\n", 40 | "from diffusers import StableDiffusionImg2ImgPipeline\n", 41 | "\n", 42 | "YOUR_TOKEN = \"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\"\n", 43 | "model_id = \"CompVis/stable-diffusion-v1-4\"\n", 44 | "device = \"cuda\"\n", 45 | "\n", 46 | "# make pipeline\n", 47 | "pipe = StableDiffusionImg2ImgPipeline.from_pretrained(model_id, revision=\"fp16\", torch_dtype=torch.float16, use_auth_token=YOUR_TOKEN)\n", 48 | "pipe = pipe.to(device)" 49 | ], 50 | "metadata": { 51 | "id": "aPaGiubnWmsp" 52 | }, 53 | "execution_count": null, 54 | "outputs": [] 55 | }, 56 | { 57 | "cell_type": "code", 58 | "source": [ 59 | "#@title **inital image setting**\n", 60 | "from PIL import Image\n", 61 | "\n", 62 | "pic = 'test.jpg' #@param {type:\"string\"}\n", 63 | "init_img = Image.open(pic)\n", 64 | "init_img = init_img.resize((512, 512))\n", 65 | "init_img" 66 | ], 67 | "metadata": { 68 | "id": "_WLViXFzJpB6" 69 | }, 70 | "execution_count": null, 71 | "outputs": [] 72 | }, 73 | { 74 | "cell_type": "code", 75 | "execution_count": null, 76 | "metadata": { 77 | "id": "ZHHenrs4EKFM" 78 | }, 79 | "outputs": [], 80 | "source": [ 81 | "#@title **img2img(Single)**\n", 82 | "\n", 83 | "# setting\n", 84 | "folder = 'single' #@param {type:\"string\"}\n", 85 | "prompt = \"the style of Gogh\" #@param {type:\"string\"}\n", 86 | "strength = 0.5 #@param {type:\"slider\", min:0, max:1, step:0.01}\n", 87 | "rand_num = 5 #@param {type:\"integer\"}\n", 88 | "os.makedirs(folder, exist_ok=True)\n", 89 | "\n", 90 | "# Pipeline execution\n", 91 | "generator = torch.Generator(device).manual_seed(rand_num) # 再現できるようにseedを設定\n", 92 | "with autocast(device):\n", 93 | " image = pipe(prompt, init_image=init_img, guidance_scale=7.5, strength=strength, generator=generator).images[0] \n", 94 | " \n", 95 | "# save & display\n", 96 | "import os\n", 97 | "save_name = folder+'/'+os.path.splitext(pic)[0]+'_'+str(strength)+'_'+str(rand_num)+os.path.splitext(pic)[1]\n", 98 | "image.save(save_name)\n", 99 | "print(save_name)\n", 100 | "image" 101 | ] 102 | }, 103 | { 104 | "cell_type": "code", 105 | "source": [ 106 | "#@title **img2img(Multiple-random)**\n", 107 | "import os\n", 108 | "from IPython.display import Image,display\n", 109 | "import random\n", 110 | "\n", 111 | "# setting\n", 112 | "folder = '04' #@param {type:\"string\"}\n", 113 | "prompt = \"the style of Gogh\" #@param {type:\"string\"}\n", 114 | "strength = 0.4 #@param {type:\"slider\", min:0, max:1, step:0.05}\n", 115 | "num = 10 #@param {type:\"slider\", min:1, max:100, step:1}\n", 116 | "os.makedirs(folder, exist_ok=True)\n", 117 | "\n", 118 | "# random\n", 119 | "rand_list = random.sample(range(1000), num)\n", 120 | "\n", 121 | "# Pipeline execution\n", 122 | "for i, rand_num in enumerate(rand_list):\n", 123 | " generator = torch.Generator(device).manual_seed(rand_num) # 再現できるようにseedを設定\n", 124 | " with autocast(device):\n", 125 | " image = pipe(prompt, init_image=init_img, guidance_scale=7.5, strength=strength, generator=generator).images[0] \n", 126 | " save_name = folder+'/'+os.path.splitext(pic)[0]+'_'+str(strength)+'_'+str(rand_num)+os.path.splitext(pic)[1]\n", 127 | " image.save(save_name)\n", 128 | " print('No=', i+1, save_name)\n", 129 | " display(Image(save_name))" 130 | ], 131 | "metadata": { 132 | "id": "OpI9NHjfSINl" 133 | }, 134 | "execution_count": null, 135 | "outputs": [] 136 | }, 137 | { 138 | "cell_type": "code", 139 | "source": [ 140 | "#@title **img2img(Search strength)**\n", 141 | "import os\n", 142 | "from IPython.display import Image,display\n", 143 | "import numpy as np\n", 144 | "\n", 145 | "# setting\n", 146 | "folder = 'serach' #@param {type:\"string\"}\n", 147 | "prompt = \"the style of Gogh\" #@param {type:\"string\"}\n", 148 | "rand_num = 2 #@param {type:\"integer\"}\n", 149 | "os.makedirs(folder, exist_ok=True)\n", 150 | "\n", 151 | "# strength_list\n", 152 | "strength_list = np.arange(0.2, 0.9, 0.1)\n", 153 | "print(strength_list)\n", 154 | "\n", 155 | "# Pipeline execution\n", 156 | "for strength in strength_list:\n", 157 | " generator = torch.Generator(device).manual_seed(rand_num) # 再現できるようにseedを設定\n", 158 | " with autocast(device):\n", 159 | " image = pipe(prompt, init_image=init_img, guidance_scale=7.5, strength=strength, generator=generator).images[0] \n", 160 | " save_name = folder+'/'+os.path.splitext(pic)[0]+'_'+str(strength)[:4]+'_'+str(rand_num)+os.path.splitext(pic)[1]\n", 161 | " image.save(save_name)\n", 162 | " print(save_name)\n", 163 | " display(Image(save_name))" 164 | ], 165 | "metadata": { 166 | "id": "_1_vUb8-rDlz" 167 | }, 168 | "execution_count": null, 169 | "outputs": [] 170 | }, 171 | { 172 | "cell_type": "code", 173 | "source": [ 174 | "#@title **img2img(Multiple-sequential)**\n", 175 | "import os\n", 176 | "from IPython.display import Image,display\n", 177 | "\n", 178 | "# setting\n", 179 | "prompt = \"the style of Gogh\" #@param {type:\"string\"}\n", 180 | "strength = 0.75 #@param {type:\"slider\", min:0, max:1, step:0.01}\n", 181 | "num = 2 #@param {type:\"slider\", min:1, max:100, step:1}\n", 182 | "\n", 183 | "# Pipeline execution\n", 184 | "for i in range(num):\n", 185 | " generator = torch.Generator(device).manual_seed(i) # 再現できるようにseedを設定\n", 186 | " with autocast(device):\n", 187 | " image = pipe(prompt, init_image=init_img, guidance_scale=7.5, strength=strength, generator=generator).images[0] \n", 188 | " save_name = os.path.splitext(pic)[0]+'_'+str(strength)+'_'+str(i)+os.path.splitext(pic)[1]\n", 189 | " image.save(save_name)\n", 190 | " print('No=', i, save_name)\n", 191 | " display(Image(save_name))" 192 | ], 193 | "metadata": { 194 | "id": "5dLjk5uPzslT" 195 | }, 196 | "execution_count": null, 197 | "outputs": [] 198 | } 199 | ] 200 | } -------------------------------------------------------------------------------- /clip_interrogator.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": { 6 | "id": "view-in-github", 7 | "colab_type": "text" 8 | }, 9 | "source": [ 10 | "\"Open" 11 | ] 12 | }, 13 | { 14 | "cell_type": "markdown", 15 | "metadata": { 16 | "id": "ytxkysgmrJEi" 17 | }, 18 | "source": [ 19 | "# CLIP Interrogator by [@pharmapsychotic](https://twitter.com/pharmapsychotic) \n", 20 | "\n", 21 | "
\n", 22 | "\n", 23 | "What do the different OpenAI CLIP models see in an image? What might be a good text prompt to create similar images using CLIP guided diffusion or another text to image model? The CLIP Interrogator is here to get you answers!\n", 24 | "\n", 25 | "
\n", 26 | "\n", 27 | "If this notebook is helpful to you please consider buying me a coffee via [ko-fi](https://ko-fi.com/pharmapsychotic) or following me on [twitter](https://twitter.com/pharmapsychotic) for more cool Ai stuff. 🙂\n", 28 | "\n", 29 | "And if you're looking for more Ai art tools check out my [Ai generative art tools list](https://pharmapsychotic.com/tools.html).\n" 30 | ] 31 | }, 32 | { 33 | "cell_type": "code", 34 | "execution_count": null, 35 | "metadata": { 36 | "cellView": "form", 37 | "id": "YQk0eemUrSC7" 38 | }, 39 | "outputs": [], 40 | "source": [ 41 | "#@title Check GPU\n", 42 | "!nvidia-smi -L" 43 | ] 44 | }, 45 | { 46 | "cell_type": "code", 47 | "execution_count": null, 48 | "metadata": { 49 | "cellView": "form", 50 | "id": "30xPxDSDrJEl" 51 | }, 52 | "outputs": [], 53 | "source": [ 54 | "#@title Setup\n", 55 | "!pip3 install ftfy regex tqdm transformers==4.15.0 timm==0.4.12 fairscale==0.4.4\n", 56 | "!pip3 install git+https://github.com/openai/CLIP.git\n", 57 | "!git clone -b v1 https://github.com/pharmapsychotic/clip-interrogator.git\n", 58 | "!git clone https://github.com/salesforce/BLIP\n", 59 | "%cd /content/BLIP\n", 60 | "\n", 61 | "import clip\n", 62 | "import gc\n", 63 | "import numpy as np\n", 64 | "import os\n", 65 | "import pandas as pd\n", 66 | "import requests\n", 67 | "import torch\n", 68 | "import torchvision.transforms as T\n", 69 | "import torchvision.transforms.functional as TF\n", 70 | "\n", 71 | "from IPython.display import display\n", 72 | "from PIL import Image\n", 73 | "from torch import nn\n", 74 | "from torch.nn import functional as F\n", 75 | "from torchvision import transforms\n", 76 | "from torchvision.transforms.functional import InterpolationMode\n", 77 | "from models.blip import blip_decoder\n", 78 | "\n", 79 | "device = torch.device('cuda:0' if torch.cuda.is_available() else 'cpu')\n", 80 | "\n", 81 | "blip_image_eval_size = 384\n", 82 | "blip_model_url = 'https://storage.googleapis.com/sfr-vision-language-research/BLIP/models/model*_base_caption.pth' \n", 83 | "blip_model = blip_decoder(pretrained=blip_model_url, image_size=blip_image_eval_size, vit='base')\n", 84 | "blip_model.eval()\n", 85 | "blip_model = blip_model.to(device)\n", 86 | "\n", 87 | "def generate_caption(pil_image):\n", 88 | " gpu_image = transforms.Compose([\n", 89 | " transforms.Resize((blip_image_eval_size, blip_image_eval_size), interpolation=InterpolationMode.BICUBIC),\n", 90 | " transforms.ToTensor(),\n", 91 | " transforms.Normalize((0.48145466, 0.4578275, 0.40821073), (0.26862954, 0.26130258, 0.27577711))\n", 92 | " ])(image).unsqueeze(0).to(device)\n", 93 | "\n", 94 | " with torch.no_grad():\n", 95 | " caption = blip_model.generate(gpu_image, sample=False, num_beams=3, max_length=20, min_length=5)\n", 96 | " return caption[0]\n", 97 | "\n", 98 | "def load_list(filename):\n", 99 | " with open(filename, 'r', encoding='utf-8', errors='replace') as f:\n", 100 | " items = [line.strip() for line in f.readlines()]\n", 101 | " return items\n", 102 | "\n", 103 | "def rank(model, image_features, text_array, top_count=1):\n", 104 | " top_count = min(top_count, len(text_array))\n", 105 | " text_tokens = clip.tokenize([text for text in text_array]).cuda()\n", 106 | " with torch.no_grad():\n", 107 | " text_features = model.encode_text(text_tokens).float()\n", 108 | " text_features /= text_features.norm(dim=-1, keepdim=True)\n", 109 | "\n", 110 | " similarity = torch.zeros((1, len(text_array))).to(device)\n", 111 | " for i in range(image_features.shape[0]):\n", 112 | " similarity += (100.0 * image_features[i].unsqueeze(0) @ text_features.T).softmax(dim=-1)\n", 113 | " similarity /= image_features.shape[0]\n", 114 | "\n", 115 | " top_probs, top_labels = similarity.cpu().topk(top_count, dim=-1) \n", 116 | " return [(text_array[top_labels[0][i].numpy()], (top_probs[0][i].numpy()*100)) for i in range(top_count)]\n", 117 | "\n", 118 | "def interrogate(image, models):\n", 119 | " caption = generate_caption(image)\n", 120 | " if len(models) == 0:\n", 121 | " print(f\"\\n\\n{caption}\")\n", 122 | " return\n", 123 | "\n", 124 | " table = []\n", 125 | " bests = [[('',0)]]*5\n", 126 | " for model_name in models:\n", 127 | " print(f\"Interrogating with {model_name}...\")\n", 128 | " model, preprocess = clip.load(model_name)\n", 129 | " model.cuda().eval()\n", 130 | "\n", 131 | " images = preprocess(image).unsqueeze(0).cuda()\n", 132 | " with torch.no_grad():\n", 133 | " image_features = model.encode_image(images).float()\n", 134 | " image_features /= image_features.norm(dim=-1, keepdim=True)\n", 135 | "\n", 136 | " ranks = [\n", 137 | " rank(model, image_features, mediums),\n", 138 | " rank(model, image_features, [\"by \"+artist for artist in artists]),\n", 139 | " rank(model, image_features, trending_list),\n", 140 | " rank(model, image_features, movements),\n", 141 | " rank(model, image_features, flavors, top_count=3)\n", 142 | " ]\n", 143 | "\n", 144 | " for i in range(len(ranks)):\n", 145 | " confidence_sum = 0\n", 146 | " for ci in range(len(ranks[i])):\n", 147 | " confidence_sum += ranks[i][ci][1]\n", 148 | " if confidence_sum > sum(bests[i][t][1] for t in range(len(bests[i]))):\n", 149 | " bests[i] = ranks[i]\n", 150 | "\n", 151 | " row = [model_name]\n", 152 | " for r in ranks:\n", 153 | " row.append(', '.join([f\"{x[0]} ({x[1]:0.1f}%)\" for x in r]))\n", 154 | "\n", 155 | " table.append(row)\n", 156 | "\n", 157 | " del model\n", 158 | " gc.collect()\n", 159 | " display(pd.DataFrame(table, columns=[\"Model\", \"Medium\", \"Artist\", \"Trending\", \"Movement\", \"Flavors\"]))\n", 160 | "\n", 161 | " flaves = ', '.join([f\"{x[0]}\" for x in bests[4]])\n", 162 | " medium = bests[0][0][0]\n", 163 | " if caption.startswith(medium):\n", 164 | " print(f\"\\n\\n{caption} {bests[1][0][0]}, {bests[2][0][0]}, {bests[3][0][0]}, {flaves}\")\n", 165 | " else:\n", 166 | " print(f\"\\n\\n{caption}, {medium} {bests[1][0][0]}, {bests[2][0][0]}, {bests[3][0][0]}, {flaves}\")\n", 167 | "\n", 168 | "data_path = \"../clip-interrogator/data/\"\n", 169 | "\n", 170 | "artists = load_list(os.path.join(data_path, 'artists.txt'))\n", 171 | "flavors = load_list(os.path.join(data_path, 'flavors.txt'))\n", 172 | "mediums = load_list(os.path.join(data_path, 'mediums.txt'))\n", 173 | "movements = load_list(os.path.join(data_path, 'movements.txt'))\n", 174 | "\n", 175 | "sites = ['Artstation', 'behance', 'cg society', 'cgsociety', 'deviantart', 'dribble', 'flickr', 'instagram', 'pexels', 'pinterest', 'pixabay', 'pixiv', 'polycount', 'reddit', 'shutterstock', 'tumblr', 'unsplash', 'zbrush central']\n", 176 | "trending_list = [site for site in sites]\n", 177 | "trending_list.extend([\"trending on \"+site for site in sites])\n", 178 | "trending_list.extend([\"featured on \"+site for site in sites])\n", 179 | "trending_list.extend([site+\" contest winner\" for site in sites])\n" 180 | ] 181 | }, 182 | { 183 | "cell_type": "code", 184 | "execution_count": null, 185 | "metadata": { 186 | "cellView": "form", 187 | "id": "rbDEMDGJrJEo" 188 | }, 189 | "outputs": [], 190 | "source": [ 191 | "#@title Interrogate!\n", 192 | "\n", 193 | "#@markdown \n", 194 | "\n", 195 | "#@markdown #####**Image:**\n", 196 | "\n", 197 | "image_path_or_url = \"\" #@param {type:\"string\"}\n", 198 | "\n", 199 | "#@markdown \n", 200 | "\n", 201 | "#@markdown #####**CLIP models:**\n", 202 | "\n", 203 | "#@markdown For [StableDiffusion](https://stability.ai/blog/stable-diffusion-announcement) you can just use ViTL14
\n", 204 | "#@markdown For [DiscoDiffusion](https://colab.research.google.com/github/alembics/disco-diffusion/blob/main/Disco_Diffusion.ipynb) and \n", 205 | "#@markdown [JAX](https://colab.research.google.com/github/huemin-art/jax-guided-diffusion/blob/v2.7/Huemin_Jax_Diffusion_2_7.ipynb) enable all the same models here as you intend to use when generating your images\n", 206 | "\n", 207 | "ViTB32 = False #@param{type:\"boolean\"}\n", 208 | "ViTB16 = False #@param{type:\"boolean\"}\n", 209 | "ViTL14 = True #@param{type:\"boolean\"}\n", 210 | "ViTL14_336px = False #@param{type:\"boolean\"}\n", 211 | "RN101 = False #@param{type:\"boolean\"}\n", 212 | "RN50 = False #@param{type:\"boolean\"}\n", 213 | "RN50x4 = False #@param{type:\"boolean\"}\n", 214 | "RN50x16 = False #@param{type:\"boolean\"}\n", 215 | "RN50x64 = False #@param{type:\"boolean\"}\n", 216 | "\n", 217 | "models = []\n", 218 | "if ViTB32: models.append('ViT-B/32')\n", 219 | "if ViTB16: models.append('ViT-B/16')\n", 220 | "if ViTL14: models.append('ViT-L/14')\n", 221 | "if ViTL14_336px: models.append('ViT-L/14@336px')\n", 222 | "if RN101: models.append('RN101')\n", 223 | "if RN50: models.append('RN50')\n", 224 | "if RN50x4: models.append('RN50x4')\n", 225 | "if RN50x16: models.append('RN50x16')\n", 226 | "if RN50x64: models.append('RN50x64')\n", 227 | "\n", 228 | "if str(image_path_or_url).startswith('http://') or str(image_path_or_url).startswith('https://'):\n", 229 | " image = Image.open(requests.get(image_path_or_url, stream=True).raw).convert('RGB')\n", 230 | "else:\n", 231 | " image = Image.open(image_path_or_url).convert('RGB')\n", 232 | "\n", 233 | "thumb = image.copy()\n", 234 | "thumb.thumbnail([blip_image_eval_size, blip_image_eval_size])\n", 235 | "display(thumb)\n", 236 | "\n", 237 | "interrogate(image, models=models)\n" 238 | ] 239 | } 240 | ], 241 | "metadata": { 242 | "accelerator": "GPU", 243 | "colab": { 244 | "provenance": [], 245 | "include_colab_link": true 246 | }, 247 | "gpuClass": "standard", 248 | "kernelspec": { 249 | "display_name": "Python 3.9.7 ('pytorch')", 250 | "language": "python", 251 | "name": "python3" 252 | }, 253 | "language_info": { 254 | "name": "python", 255 | "version": "3.9.7" 256 | }, 257 | "orig_nbformat": 4, 258 | "vscode": { 259 | "interpreter": { 260 | "hash": "d4dd9c310c32a31bb53615812f2f2c6cba010b7aa4dfb14e2b192e650667fecd" 261 | } 262 | } 263 | }, 264 | "nbformat": 4, 265 | "nbformat_minor": 0 266 | } -------------------------------------------------------------------------------- /fast_stable_diffusion_AUTOMATIC1111.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": { 6 | "id": "view-in-github", 7 | "colab_type": "text" 8 | }, 9 | "source": [ 10 | "\"Open" 11 | ] 12 | }, 13 | { 14 | "cell_type": "markdown", 15 | "metadata": { 16 | "id": "47kV9o1Ni8GH" 17 | }, 18 | "source": [ 19 | "# **Colab From https://github.com/TheLastBen/fast-stable-diffusion, if you face any issues, feel free to discuss them.** [Support](https://ko-fi.com/thelastben)\n", 20 | "\n", 21 | "\n", 22 | "\n", 23 | "\n", 24 | "\n", 25 | "\n", 26 | "\n" 27 | ] 28 | }, 29 | { 30 | "cell_type": "code", 31 | "execution_count": null, 32 | "metadata": { 33 | "id": "Y9EBc437WDOs", 34 | "cellView": "form" 35 | }, 36 | "outputs": [], 37 | "source": [ 38 | "#@title **connect google drive**\n", 39 | "from google.colab import drive\n", 40 | "drive.mount('/content/gdrive')" 41 | ] 42 | }, 43 | { 44 | "cell_type": "code", 45 | "execution_count": null, 46 | "metadata": { 47 | "cellView": "form", 48 | "id": "CFWtw-6EPrKi" 49 | }, 50 | "outputs": [], 51 | "source": [ 52 | "#@title **Install AUTOMATIC1111 repo**\n", 53 | "from IPython.utils import capture\n", 54 | "from IPython.display import clear_output\n", 55 | "from google.colab import runtime\n", 56 | "from IPython.display import display_markdown\n", 57 | "import time\n", 58 | "\n", 59 | "\n", 60 | "with capture.capture_output() as cap:\n", 61 | " fgitclone = \"git clone --depth 1\" \n", 62 | " %cd /content/gdrive/MyDrive/\n", 63 | " %mkdir sd\n", 64 | " %cd sd\n", 65 | " !$fgitclone https://github.com/Stability-AI/stablediffusion\n", 66 | " !$fgitclone https://github.com/AUTOMATIC1111/stable-diffusion-webui\n", 67 | " %cd /content/gdrive/MyDrive/sd/stable-diffusion-webui/\n", 68 | " !mkdir -p cache/{huggingface,torch}\n", 69 | " %cd /content/\n", 70 | " !ln -s /content/gdrive/MyDrive/sd/stable-diffusion-webui/cache/huggingface ../root/.cache/\n", 71 | " !ln -s /content/gdrive/MyDrive/sd/stable-diffusion-webui/cache/torch ../root/.cache/\n", 72 | " !pip install -q -U gdown\n", 73 | "\n", 74 | "Update_repo = True\n", 75 | "if Update_repo: \n", 76 | " !rm /content/gdrive/MyDrive/sd/stable-diffusion-webui/webui.sh \n", 77 | " !rm /content/gdrive/MyDrive/sd/stable-diffusion-webui/modules/paths.py\n", 78 | " !rm /content/gdrive/MyDrive/sd/stable-diffusion-webui/webui.py \n", 79 | " !rm /content/gdrive/MyDrive/sd/stable-diffusion-webui/modules/ui.py\n", 80 | " !rm /content/gdrive/MyDrive/sd/stable-diffusion-webui/style.css\n", 81 | " %cd /content/gdrive/MyDrive/sd/stable-diffusion-webui/\n", 82 | " clear_output()\n", 83 | " print('\u001b[1;32m')\n", 84 | " !git pull\n", 85 | " clear_output()\n", 86 | " print('\u001b[1;32mDONE !')" 87 | ] 88 | }, 89 | { 90 | "cell_type": "code", 91 | "execution_count": null, 92 | "metadata": { 93 | "cellView": "form", 94 | "id": "ZGV_5H4xrOSp" 95 | }, 96 | "outputs": [], 97 | "source": [ 98 | "#@title **Install Requirements Library**\n", 99 | "\n", 100 | "import os\n", 101 | "import time\n", 102 | "from IPython.utils import capture\n", 103 | "from IPython.display import clear_output\n", 104 | "from subprocess import getoutput\n", 105 | "from re import search\n", 106 | "\n", 107 | "with capture.capture_output() as cap:\n", 108 | " \n", 109 | " if not os.path.exists('/content/gdrive/MyDrive/sd/stablediffusion/src/k-diffusion/k_diffusion'):\n", 110 | " !mkdir /content/gdrive/MyDrive/sd/stablediffusion/src\n", 111 | " %cd /content/gdrive/MyDrive/sd/stablediffusion/src\n", 112 | " !$fgitclone https://github.com/CompVis/taming-transformers\n", 113 | " !$fgitclone https://github.com/openai/CLIP\n", 114 | " !$fgitclone https://github.com/salesforce/BLIP\n", 115 | " !$fgitclone https://github.com/sczhou/CodeFormer\n", 116 | " !$fgitclone https://github.com/crowsonkb/k-diffusion\n", 117 | " !mv /content/gdrive/MyDrive/sd/stablediffusion/src/CLIP /content/gdrive/MyDrive/sd/stablediffusion/src/clip\n", 118 | " !mv /content/gdrive/MyDrive/sd/stablediffusion/src/BLIP /content/gdrive/MyDrive/sd/stablediffusion/src/blip \n", 119 | " !mv /content/gdrive/MyDrive/sd/stablediffusion/src/CodeFormer /content/gdrive/MyDrive/sd/stablediffusion/src/codeformer \n", 120 | " !cp -r /content/gdrive/MyDrive/sd/stablediffusion/src/k-diffusion/k_diffusion /content/gdrive/MyDrive/sd/stable-diffusion-webui/\n", 121 | "\n", 122 | "\n", 123 | " %cd /content/\n", 124 | " for i in range(1,7):\n", 125 | " !wget \"https://github.com/TheLastBen/fast-stable-diffusion/raw/main/Dependencies/Dependencies_AUT.{i}\"\n", 126 | " !mv \"Dependencies_AUT.{i}\" \"Dependencies_AUT.7z.00{i}\"\n", 127 | " !7z x Dependencies_AUT.7z.001\n", 128 | " time.sleep(2)\n", 129 | " !cp -r /content/usr/local/lib/python3.8/dist-packages /usr/local/lib/python3.8/\n", 130 | " !rm -r /content/usr\n", 131 | " for i in range(1,7):\n", 132 | " !rm \"Dependencies_AUT.7z.00{i}\"\n", 133 | " !pip install -U -q pillow\n", 134 | " \n", 135 | " %cd /content/gdrive/MyDrive/sd/stable-diffusion-webui/modules\n", 136 | " !wget -O paths.py https://raw.githubusercontent.com/TheLastBen/fast-stable-diffusion/main/AUTOMATIC1111_files/paths.py\n", 137 | "\n", 138 | " if os.path.exists('/content/gdrive/MyDrive/sd/stable-diffusion-webui/extensions/deforum-for-automatic1111-webui/scripts/deforum_helpers/src/infer.py'):\n", 139 | " %cd /content/gdrive/MyDrive/sd/stable-diffusion-webui/extensions/deforum-for-automatic1111-webui/scripts/deforum_helpers\n", 140 | " !wget -O animation.py https://raw.githubusercontent.com/TheLastBen/fast-stable-diffusion/main/AUTOMATIC1111_files/deforum/animation.py\n", 141 | " !wget -O depth.py https://raw.githubusercontent.com/TheLastBen/fast-stable-diffusion/main/AUTOMATIC1111_files/deforum/depth.py \n", 142 | " %cd /content/gdrive/MyDrive/sd/stable-diffusion-webui/extensions/deforum-for-automatic1111-webui/scripts/deforum_helpers/src \n", 143 | " !wget -O infer.py https://raw.githubusercontent.com/TheLastBen/fast-stable-diffusion/main/AUTOMATIC1111_files/deforum/infer.py\n", 144 | "\n", 145 | " if not os.path.exists('/content/gdrive/MyDrive/sd/stablediffusion/repositories/midas'):\n", 146 | " %cd /content/gdrive/MyDrive/sd/stablediffusion\n", 147 | " !mkdir repositories\n", 148 | " %cd repositories\n", 149 | " !git clone https://github.com/isl-org/MiDaS.git midas\n", 150 | " !git clone https://github.com/compphoto/BoostingMonocularDepth.git\n", 151 | " \n", 152 | " %cd /content\n", 153 | " s = getoutput('nvidia-smi')\n", 154 | " if \"A100\" in s:\n", 155 | " !wget https://github.com/TheLastBen/fast-stable-diffusion/raw/main/precompiled/A100/A100\n", 156 | " %cd /usr/local/lib/python3.8/dist-packages/xformers\n", 157 | " !7z x -y /content/A100\n", 158 | " !rm /content/A100\n", 159 | " if not (\"T4\" in s or \"A100\" in s):\n", 160 | " !pip uninstall -q -y xformers\n", 161 | "\n", 162 | "\n", 163 | "base = '/content/gdrive/MyDrive/sd/stable-diffusion'\n", 164 | "dirs = [base, f'{base}/src/taming-transformers', f'{base}/src/clip',\n", 165 | " f'{base}/src/GFPGAN', f'{base}/src/blip', f'{base}/src/codeformer',\n", 166 | " f'{base}/src/realesrgan', f'{base}/src/k-diffusion', f'{base}/src/ldm']\n", 167 | "for d in dirs:\n", 168 | " !rm -rf {d + '/.git'}\n", 169 | "clear_output()\n", 170 | "print('\u001b[1;32mDone!')" 171 | ] 172 | }, 173 | { 174 | "cell_type": "code", 175 | "execution_count": null, 176 | "metadata": { 177 | "cellView": "form", 178 | "id": "p4wj_txjP3TC" 179 | }, 180 | "outputs": [], 181 | "source": [ 182 | "#@title **Model Download/Load**\n", 183 | "import os\n", 184 | "from IPython.display import clear_output\n", 185 | "import time\n", 186 | "\n", 187 | "Model_Version = \"1.5\" #@param [ \"1.5\", \"V2-512px\", \"V2-768px\"]\n", 188 | "\n", 189 | "RunwayML_Inpainting_Model = False #@param {type:\"boolean\"}\n", 190 | "\n", 191 | "token = \"\" #@param {type:\"string\"}\n", 192 | "\n", 193 | "Redownload_the_original_model = False #@param {type:\"boolean\"}\n", 194 | "\n", 195 | "if Redownload_the_original_model:\n", 196 | " if os.path.exists('/content/mainmodel.ckpt'):\n", 197 | " !rm /content/mainmodel.ckpt\n", 198 | " %cd /content/gdrive/MyDrive/sd/stable-diffusion-webui/models/Stable-diffusion \n", 199 | " !wget -q -O model.ckpt https://raw.githubusercontent.com/TheLastBen/fast-stable-diffusion/main/precompiled/attention.py\n", 200 | " !mv /content/gdrive/MyDrive/sd/stable-diffusion-webui/models/Stable-diffusion/model.ckpt /content/gdrive/MyDrive/sd/stable-diffusion-webui/models/Stable-diffusion/trashfile.f \n", 201 | " time.sleep(2)\n", 202 | " !rm /content/gdrive/MyDrive/sd/stable-diffusion-webui/models/Stable-diffusion/trashfile.f\n", 203 | " time.sleep(2)\n", 204 | " clear_output()\n", 205 | "\n", 206 | "#@markdown Or\n", 207 | "Path_to_CKPT = \"/content/gdrive/MyDrive/AUTOMATIC1111/nakata.ckpt\" #@param {type:\"string\"}\n", 208 | "#@markdown - Insert the full path of your trained model (eg: /content/gdrive/MyDrive/zarathustra.ckpt) or to a folder containing multiple models.\n", 209 | "\n", 210 | "#@markdown Or\n", 211 | "Link_CKPT = \"\" #@param {type:\"string\"}\n", 212 | "#@markdown - A direct link to a CKPT or a shared gdrive link.\n", 213 | "\n", 214 | "def newmdl(token):\n", 215 | "\n", 216 | " if not os.path.exists('/content/gdrive/MyDrive/sd/stable-diffusion-webui/models/Stable-diffusion/model.ckpt'):\n", 217 | " if token==\"\":\n", 218 | " token=input(\"Insert your huggingface token :\")\n", 219 | " %cd /content/\n", 220 | " clear_output()\n", 221 | " !git init\n", 222 | " !git lfs install --system --skip-repo\n", 223 | " !$fgitclone --branch fp16 \"https://USER:{token}@huggingface.co/runwayml/stable-diffusion-v1-5\"\n", 224 | " if os.path.exists('/content/stable-diffusion-v1-5'):\n", 225 | " !$fgitclone \"https://USER:{token}@huggingface.co/stabilityai/sd-vae-ft-mse\"\n", 226 | " !rm -r /content/stable-diffusion-v1-5/vae\n", 227 | " !mv /content/sd-vae-ft-mse /content/stable-diffusion-v1-5/vae \n", 228 | " !wget -O convertosd.py https://github.com/TheLastBen/fast-stable-diffusion/raw/main/Dreambooth/convertosd.py\n", 229 | " !sed -i '201s@.*@ model_path = \"/content/stable-diffusion-v1-5\"@' /content/convertosd.py\n", 230 | " !sed -i '202s@.*@ checkpoint_path= \"/content/gdrive/MyDrive/sd/stable-diffusion-webui/models/Stable-diffusion/model.ckpt\"@' /content/convertosd.py\n", 231 | " clear_output() \n", 232 | " !python /content/convertosd.py \n", 233 | " if os.path.exists('/content/gdrive/MyDrive/sd/stable-diffusion-webui/models/Stable-diffusion/model.ckpt'):\n", 234 | " model='/content/gdrive/MyDrive/sd/stable-diffusion-webui/models/Stable-diffusion/model.ckpt'\n", 235 | " clear_output()\n", 236 | " print('\u001b[1;32mDONE !')\n", 237 | " else:\n", 238 | " print('\u001b[1;31mSomething went wrong, try again')\n", 239 | " else:\n", 240 | " print('\u001b[1;31mMake sure you accept the terms at https://huggingface.co/runwayml/stable-diffusion-v1-5')\n", 241 | "\n", 242 | " else:\n", 243 | " model='/content/gdrive/MyDrive/sd/stable-diffusion-webui/models/Stable-diffusion/model.ckpt'\n", 244 | " clear_output()\n", 245 | " print('\u001b[1;32mModel already exists, check the box \"Redownload_the_original_model\" to redownload/download the V1.5')\n", 246 | "\n", 247 | " if os.path.exists('/content/.git'):\n", 248 | " !rm -r /content/.git\n", 249 | "\n", 250 | " if os.path.exists('/content/stable-diffusion-v1-5'):\n", 251 | " !rm -r /content/stable-diffusion-v1-5 \n", 252 | "\n", 253 | "\n", 254 | "def V2(token):\n", 255 | "\n", 256 | " if not os.path.exists('/content/gdrive/MyDrive/sd/stable-diffusion-webui/models/Stable-diffusion/model.ckpt'):\n", 257 | " %cd /content/\n", 258 | " clear_output()\n", 259 | " !mkdir \"/content/stable-diffusion-V2\"\n", 260 | " %cd \"/content/stable-diffusion-V2\"\n", 261 | " !git init\n", 262 | " !git lfs install --system --skip-repo\n", 263 | " if Model_Version == \"V2-768px\":\n", 264 | " !git remote add -f origin \"https://USER:{token}@huggingface.co/stabilityai/stable-diffusion-2-1\"\n", 265 | " elif Model_Version == \"V2-512px\":\n", 266 | " !git remote add -f origin \"https://USER:{token}@huggingface.co/stabilityai/stable-diffusion-2-1-base\" \n", 267 | " !git config core.sparsecheckout true\n", 268 | " !echo -e \"scheduler\\ntext_encoder\\ntokenizer\\nunet\\nvae\\nmodel_index.json\" > .git/info/sparse-checkout\n", 269 | " !git pull origin main\n", 270 | " %cd /content\n", 271 | " !wget -O convertosdv2.py https://github.com/TheLastBen/fast-stable-diffusion/raw/main/Dreambooth/convertosdv2.py\n", 272 | " clear_output()\n", 273 | " !python /content/convertosdv2.py --fp16 /content/stable-diffusion-V2 /content/gdrive/MyDrive/sd/stable-diffusion-webui/models/Stable-diffusion/model.ckpt\n", 274 | " if os.path.exists('/content/gdrive/MyDrive/sd/stable-diffusion-webui/models/Stable-diffusion/model.ckpt'):\n", 275 | " model='/content/gdrive/MyDrive/sd/stable-diffusion-webui/models/Stable-diffusion/model.ckpt'\n", 276 | " clear_output()\n", 277 | " print('\u001b[1;32mDONE !')\n", 278 | " else:\n", 279 | " print('\u001b[1;31mSomething went wrong, try again')\n", 280 | "\n", 281 | " else:\n", 282 | " model='/content/gdrive/MyDrive/sd/stable-diffusion-webui/models/Stable-diffusion/model.ckpt'\n", 283 | " clear_output()\n", 284 | " print('\u001b[1;32mModel already exists, check the box \"Redownload_the_original_model\" to redownload/download the V2.')\n", 285 | "\n", 286 | " if os.path.exists('/content/.git'):\n", 287 | " !rm -r /content/.git\n", 288 | " !rm -r /content/convertosdv2.py\n", 289 | " if os.path.exists('/content/stable-diffusion-V2'):\n", 290 | " !rm -r /content/stable-diffusion-V2\n", 291 | "\n", 292 | "def inpmdl(token):\n", 293 | "\n", 294 | " if not os.path.exists('/content/gdrive/MyDrive/sd/stable-diffusion-webui/models/Stable-diffusion/sd-v1-5-inpainting.ckpt'):\n", 295 | " if token==\"\":\n", 296 | " token=input(\"Insert your huggingface token :\")\n", 297 | " %cd /content/\n", 298 | " clear_output()\n", 299 | " !git init\n", 300 | " !git lfs install --system --skip-repo\n", 301 | " !$fgitclone --branch fp16 \"https://USER:{token}@huggingface.co/runwayml/stable-diffusion-inpainting\"\n", 302 | " if os.path.exists('/content/stable-diffusion-inpainting'):\n", 303 | " !$fgitclone \"https://USER:{token}@huggingface.co/stabilityai/sd-vae-ft-mse\"\n", 304 | " !rm -r /content/stable-diffusion-inpainting/vae\n", 305 | " !mv /content/sd-vae-ft-mse /content/stable-diffusion-inpainting/vae \n", 306 | " !wget -O convertosd.py https://github.com/TheLastBen/fast-stable-diffusion/raw/main/Dreambooth/convertosd.py\n", 307 | " !sed -i '201s@.*@ model_path = \"/content/stable-diffusion-inpainting\"@' /content/convertosd.py\n", 308 | " !sed -i '202s@.*@ checkpoint_path= \"/content/gdrive/MyDrive/sd/stable-diffusion-webui/models/Stable-diffusion/sd-v1-5-inpainting.ckpt\"@' /content/convertosd.py\n", 309 | " clear_output() \n", 310 | " !python /content/convertosd.py \n", 311 | " if os.path.exists('/content/gdrive/MyDrive/sd/stable-diffusion-webui/models/Stable-diffusion/sd-v1-5-inpainting.ckpt'):\n", 312 | " clear_output()\n", 313 | " print('\u001b[1;32mDONE !')\n", 314 | " else:\n", 315 | " print('\u001b[1;31mSomething went wrong, try again')\n", 316 | " else:\n", 317 | " print('\u001b[1;31mMake sure you have accepted the terms at https://huggingface.co/runwayml/stable-diffusion-inpainting')\n", 318 | "\n", 319 | " else:\n", 320 | " clear_output()\n", 321 | " print('\u001b[1;32mModel already exists.')\n", 322 | "\n", 323 | " if os.path.exists('/content/.git'):\n", 324 | " !rm -r /content/.git\n", 325 | "\n", 326 | " if os.path.exists('/content/stable-diffusion-inpainting'):\n", 327 | " !rm -r /content/stable-diffusion-inpainting \n", 328 | "\n", 329 | "\n", 330 | "if (Path_to_CKPT !=''):\n", 331 | " if os.path.exists(str(Path_to_CKPT)):\n", 332 | " print('\u001b[1;32mUsing the trained model.')\n", 333 | " else:\n", 334 | " while not os.path.exists(str(Path_to_CKPT)):\n", 335 | " print('\u001b[1;31mWrong path, use the colab file explorer to copy the path : ')\n", 336 | " Path_to_CKPT=input()\n", 337 | " if os.path.exists(str(Path_to_CKPT)):\n", 338 | " print('\u001b[1;32mUsing the trained model.')\n", 339 | "\n", 340 | " model=Path_to_CKPT\n", 341 | "\n", 342 | "elif Link_CKPT != \"\":\n", 343 | " if os.path.exists('/content/mainmodel.ckpt'):\n", 344 | " !rm /content/mainmodel.ckpt\n", 345 | " %cd /content/gdrive/MyDrive/sd/stable-diffusion-webui/models/Stable-diffusion\n", 346 | " !wget -q -O model.ckpt https://raw.githubusercontent.com/TheLastBen/fast-stable-diffusion/main/precompiled/attention.py\n", 347 | " !mv /content/gdrive/MyDrive/sd/stable-diffusion-webui/models/Stable-diffusion/model.ckpt /content/gdrive/MyDrive/sd/stable-diffusion-webui/models/Stable-diffusion/trashfile.f \n", 348 | " time.sleep(2)\n", 349 | " !rm /content/gdrive/MyDrive/sd/stable-diffusion-webui/models/Stable-diffusion/trashfile.f\n", 350 | " time.sleep(2)\n", 351 | " clear_output()\n", 352 | " !gdown --fuzzy -O model.ckpt $Link_CKPT\n", 353 | " if os.path.exists('/content/gdrive/MyDrive/sd/stable-diffusion-webui/models/Stable-diffusion/model.ckpt'):\n", 354 | " if os.path.getsize(\"/content/gdrive/MyDrive/sd/stable-diffusion-webui/models/Stable-diffusion/model.ckpt\") > 1810671599:\n", 355 | " model='/content/gdrive/MyDrive/sd/stable-diffusion-webui/models/Stable-diffusion/model.ckpt'\n", 356 | " clear_output()\n", 357 | " print('\u001b[1;32mModel downloaded, using the trained model.')\n", 358 | " else:\n", 359 | " print('\u001b[1;31mWrong link, check that the link is valid')\n", 360 | " else:\n", 361 | " print('\u001b[1;31mWrong link, check that the link is valid')\n", 362 | "\n", 363 | "\n", 364 | "elif Model_Version==\"1.5\":\n", 365 | " newmdl(token)\n", 366 | "\n", 367 | "elif Model_Version==\"V2-512px\" or Model_Version==\"V2-768px\":\n", 368 | " V2(token)\n", 369 | "\n", 370 | "if RunwayML_Inpainting_Model:\n", 371 | " inpmdl(token)" 372 | ] 373 | }, 374 | { 375 | "cell_type": "code", 376 | "execution_count": null, 377 | "metadata": { 378 | "cellView": "form", 379 | "id": "PjzwxTkPSPHf" 380 | }, 381 | "outputs": [], 382 | "source": [ 383 | "#@title **Start stable-diffusion**\n", 384 | "from IPython.utils import capture\n", 385 | "import time\n", 386 | "import sys\n", 387 | "import fileinput\n", 388 | "\n", 389 | "Model_Version = \"1.5\" #@param [\"1.5\", \"V2-512\", \"V2-768\"]\n", 390 | "#@markdown - Important! Choose the correct version and resolution of the model\n", 391 | "\n", 392 | "Use_Gradio_Server = False #@param {type:\"boolean\"}\n", 393 | "#@markdown - Only if you have trouble connecting to the local server\n", 394 | "\n", 395 | "Enable_API = False #@param {type:\"boolean\"}\n", 396 | "#@markdown - You can find the docs in the [wiki](https://github.com/AUTOMATIC1111/stable-diffusion-webui/wiki/API)\n", 397 | " \n", 398 | "with capture.capture_output() as cap: \n", 399 | " if not os.path.exists('/tools/node/bin/lt'):\n", 400 | " !npm install -g localtunnel\n", 401 | "\n", 402 | "with capture.capture_output() as cap: \n", 403 | " %cd /content/gdrive/MyDrive/sd/stable-diffusion-webui/\n", 404 | " time.sleep(1)\n", 405 | " !wget -O webui.py https://raw.githubusercontent.com/AUTOMATIC1111/stable-diffusion-webui/master/webui.py\n", 406 | " !sed -i 's@ui.create_ui().*@ui.create_ui();shared.demo.queue(concurrency_count=111500)@' /content/gdrive/MyDrive/sd/stable-diffusion-webui/webui.py\n", 407 | " %cd /content/gdrive/MyDrive/sd/stable-diffusion-webui/modules/\n", 408 | " !wget -O ui.py https://raw.githubusercontent.com/AUTOMATIC1111/stable-diffusion-webui/master/modules/ui.py\n", 409 | " !sed -i 's@css = \"\".*@with open(os.path.join(script_path, \"style.css\"), \"r\", encoding=\"utf8\") as file:\\n css = file.read()@' /content/gdrive/MyDrive/sd/stable-diffusion-webui/modules/ui.py\n", 410 | " %cd /content/gdrive/MyDrive/sd/stable-diffusion-webui\n", 411 | " !wget -O style.css https://raw.githubusercontent.com/AUTOMATIC1111/stable-diffusion-webui/master/style.css\n", 412 | " !sed -i 's@min-height: 4.*@min-height: 5.5em;@g' /content/gdrive/MyDrive/sd/stable-diffusion-webui/style.css\n", 413 | " !sed -i \"s@'extensions/depthmap2mask/scripts/depthmap_for_depth2img.py'@\\\"/content/gdrive/MyDrive/sd/stable-diffusion-webui/extensions/depthmap2mask/scripts/depthmap_for_depth2img.py\\\"@\" /content/gdrive/MyDrive/sd/stable-diffusion-webui/extensions/depthmap2mask/scripts/depth2image_depthmask.py\n", 414 | " !sed -i 's@\"repositories/BoostingMonocularDepth\"@\\\"/content/gdrive/MyDrive/sd/stablediffusion/repositories/BoostingMonocularDepth\\\"@' /content/gdrive/MyDrive/sd/stable-diffusion-webui/extensions/stable-diffusion-webui-depthmap-script/scripts/depthmap.py\n", 415 | " %cd /content\n", 416 | "\n", 417 | "\n", 418 | "share=''\n", 419 | "if Use_Gradio_Server:\n", 420 | " share='--share'\n", 421 | " for line in fileinput.input('/usr/local/lib/python3.8/dist-packages/gradio/blocks.py', inplace=True):\n", 422 | " if line.strip().startswith('self.server_name ='):\n", 423 | " line = ' self.server_name = server_name\\n'\n", 424 | " if line.strip().startswith('self.server_port ='):\n", 425 | " line = ' self.server_port = server_port\\n'\n", 426 | " sys.stdout.write(line)\n", 427 | " clear_output()\n", 428 | " \n", 429 | "else:\n", 430 | " share=''\n", 431 | " !nohup lt --port 7860 > srv.txt 2>&1 &\n", 432 | " time.sleep(2)\n", 433 | " !grep -o 'https[^ ]*' /content/srv.txt >srvr.txt\n", 434 | " time.sleep(2)\n", 435 | " srv= getoutput('cat /content/srvr.txt')\n", 436 | "\n", 437 | " for line in fileinput.input('/usr/local/lib/python3.8/dist-packages/gradio/blocks.py', inplace=True):\n", 438 | " if line.strip().startswith('self.server_name ='):\n", 439 | " line = f' self.server_name = \"{srv[8:]}\"\\n'\n", 440 | " if line.strip().startswith('self.server_port ='):\n", 441 | " line = ' self.server_port = 443\\n'\n", 442 | " if line.strip().startswith('self.protocol = \"https\"'):\n", 443 | " line = ' self.protocol = \"https\"\\n'\n", 444 | " if line.strip().startswith('if self.local_url.startswith(\"https\") or self.is_colab'):\n", 445 | " line = '' \n", 446 | " if line.strip().startswith('else \"http\"'):\n", 447 | " line = '' \n", 448 | " sys.stdout.write(line)\n", 449 | " \n", 450 | " !sed -i '13s@.*@ \"PUBLIC_SHARE_TRUE\": \"\u001b[32mConnected\",@' /usr/local/lib/python3.8/dist-packages/gradio/strings.py\n", 451 | " \n", 452 | " !rm /content/srv.txt\n", 453 | " !rm /content/srvr.txt\n", 454 | "\n", 455 | "with capture.capture_output() as cap: \n", 456 | " %cd /content/gdrive/MyDrive/sd/stablediffusion\n", 457 | "\n", 458 | "api = '--api' if Enable_API else ''\n", 459 | "\n", 460 | "if Model_Version == \"V2-768\":\n", 461 | " configf=\"--config /content/gdrive/MyDrive/sd/stablediffusion/configs/stable-diffusion/v2-inference-v.yaml\"\n", 462 | " !sed -i 's@def load_state_dict(checkpoint_path: str, map_location.*@def load_state_dict(checkpoint_path: str, map_location=\"cuda\"):@' /usr/local/lib/python3.8/dist-packages/open_clip/factory.py \n", 463 | "elif Model_Version == \"V2-512\":\n", 464 | " configf=\"--config /content/gdrive/MyDrive/sd/stablediffusion/configs/stable-diffusion/v2-inference.yaml\"\n", 465 | " !sed -i 's@def load_state_dict(checkpoint_path: str, map_location.*@def load_state_dict(checkpoint_path: str, map_location=\"cuda\"):@' /usr/local/lib/python3.8/dist-packages/open_clip/factory.py \n", 466 | "else:\n", 467 | " configf=\"\"\n", 468 | " !sed -i 's@def load_state_dict(checkpoint_path: str, map_location.*@def load_state_dict(checkpoint_path: str, map_location=\"cpu\"):@' /usr/local/lib/python3.8/dist-packages/open_clip/factory.py \n", 469 | "\n", 470 | "if os.path.exists('/usr/local/lib/python3.8/dist-packages/xformers'):\n", 471 | " xformers=\"--xformers\" \n", 472 | "else:\n", 473 | " xformers=\"\"\n", 474 | "\n", 475 | "try:\n", 476 | " model\n", 477 | " if os.path.isfile(model):\n", 478 | " !python /content/gdrive/MyDrive/sd/stable-diffusion-webui/webui.py $share $api --disable-safe-unpickle --no-half-vae --ckpt \"$model\" $configf $xformers\n", 479 | " else:\n", 480 | " !python /content/gdrive/MyDrive/sd/stable-diffusion-webui/webui.py $share $api --disable-safe-unpickle --no-half-vae --ckpt-dir \"$model\" $configf $xformers\n", 481 | "except:\n", 482 | " !python /content/gdrive/MyDrive/sd/stable-diffusion-webui/webui.py $share $api --disable-safe-unpickle --no-half-vae $configf $xformers" 483 | ] 484 | } 485 | ], 486 | "metadata": { 487 | "accelerator": "GPU", 488 | "colab": { 489 | "provenance": [], 490 | "include_colab_link": true 491 | }, 492 | "kernelspec": { 493 | "display_name": "Python 3", 494 | "name": "python3" 495 | }, 496 | "language_info": { 497 | "name": "python" 498 | } 499 | }, 500 | "nbformat": 4, 501 | "nbformat_minor": 0 502 | } -------------------------------------------------------------------------------- /My_iPERCore.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": { 6 | "id": "view-in-github", 7 | "colab_type": "text" 8 | }, 9 | "source": [ 10 | "\"Open" 11 | ] 12 | }, 13 | { 14 | "cell_type": "markdown", 15 | "metadata": { 16 | "id": "rTjLpNgipXPR" 17 | }, 18 | "source": [ 19 | "![000.jpg](data:image/jpeg;base64,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iiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAr0b4N/8fOq/7kX82rzmvRvg3/x86r/uRfzau/LP96h8/wAmcGaf7rP5fmjpPGPhH/hIru3n+2/ZvKQpjyt2cnOeornv+FX/APUX/wDJf/7KpPjjq19ovh20vdN1waVKk/zJgFrhdpyqjHJHB7cZNeJ6f8RfFFzOjHxHdsrgOkWACVBG7gDJ6gcH6V9FVwOHqTc5x19X/mfM0swxNKKpwlovJf5HtH/Cr/8AqL/+S/8A9lR/wq//AKi//kv/APZV594Z1DxnqUKzR+JNQvpIQ7XEMMsI8lRGShfODy3BwDjHfOKxPF3jzxqmtSadpmo3SyQ7QI4JUmZi2M5ZVwfmOAOMfd61EcswkldR/F/5lyzbFx3l+C/yPXP+FX/9Rf8A8l//ALKj/hV//UX/APJf/wCyrw7T/iV43j1ExDVb67SXajFowEiMg45wNuD0YnH4VHZfFTxe10sMOtXc86SYVAEcOfTGOatZVhX9n8X/AJkPOcV/N+C/yPdf+FX/APUX/wDJf/7Kj/hV/wD1F/8AyX/+yrzn4i6t42023t71PE76fJeQebDaxnCMyqNyhmBIYkjAOM8gdOcTwb4l+IHihb2G38TyW32CDzpDM6eY4UgHAxk8EnpjPHU0v7Kwv8v4v/Mf9sYr+b8F/kew/wDCr/8AqL/+S/8A9lR/wq//AKi//kv/APZV4VD8TPFi301qfEl3IUZgjqoLOB935cd/SrGpeOvFsqSy2HinUIJVRW8hwrbmPXaQp49val/ZeF/l/F/5i/tnFfzfgv8AI9t/4Vf/ANRf/wAl/wD7Kj/hV/8A1F//ACX/APsq+c7L4q+PLSaUXev3ZWLK73VNp9+V4zkYzViy+MnjS6vXuJNVlMbRqixxgKqkDG/kdT3Hr0pf2bhf5Pxf+Y/7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d9IwBEbxZIAyOo7Z579h61BFceJWt5Um8MXrd16jv3HeqjGJm7m9cajaK3ntGgyOrOFwe/OKpPr9vcIYoTM+3rhgefqKxJz4hYoT4YvhHuICqhJxnAz/ADqVtO1fUrfbL4XuYcEs3O3d1GB+O0/TNW+WKutQjFt2ehdOo84Md0uOOppDqWP4Lr8SapHRdUC7V8O3f/AsHtt/lx9Pfmqc3hzV5Xz/AGDdqT6D8PX2rJV5N/B+P/ANHRS2l+H/AATTl1fygdwuF+rV6H4Duftnhi1mG75mf7xyeHIryO58Oa8yYXR73J/2RXq3w3sbnTvB9lbX0LwXCmQtG4wRlyR+hqqcm5bClGyOmoxRRW5mGKKKKADFGKKKADFGKKKADFGKKKADFGKKKADFFFFABiiiigAxRRRQAUUUUAGKMUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABijFFFABijFFFABijFFFABijFFFABijFFFABijFFFABiiiigAoxRRQAYoxRRQAYooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA//2Q==)" 20 | ] 21 | }, 22 | { 23 | "cell_type": "code", 24 | "execution_count": null, 25 | "metadata": { 26 | "id": "aqBT7r7G_pCL" 27 | }, 28 | "outputs": [], 29 | "source": [ 30 | "#@title 1-1.セットアップ\n", 31 | "\n", 32 | "# ffmpegインストール\n", 33 | "!apt-get install ffmpeg\n", 34 | "\n", 35 | "# CUDAセッティング\n", 36 | "import os\n", 37 | "os.environ[\"CUDA_HOME\"] = \"/usr/local/cuda-11\"\n", 38 | "!echo $CUDA_HOME\n", 39 | "\n", 40 | "# githubからコードをコピー\n", 41 | "!git clone https://github.com/sugi-san/iPERCore.git\n", 42 | "%cd /content/iPERCore/\n", 43 | "\n", 44 | "# python3.8の導入\n", 45 | "!update-alternatives --install /usr/local/bin/python3 python3 /usr/bin/python3.8 2 \n", 46 | "!update-alternatives --install /usr/local/bin/python3 python3 /usr/bin/python3.9 1 \n", 47 | "!python --version \n", 48 | "!apt-get update\n", 49 | "!apt install software-properties-common\n", 50 | "!sudo dpkg --remove --force-remove-reinstreq python3-pip python3-setuptools python3-wheel\n", 51 | "!apt-get install python3-pip\n", 52 | "\n", 53 | "# ライブラリのインストール\n", 54 | "! python3.8 -m pip install torch==1.7.1+cu110 torchvision==0.8.2+cu110 torchaudio==0.7.1 -f https://download.pytorch.org/whl/torch_stable.html\n", 55 | "! python3.8 -m pip install mmcv-full==1.2.2\n", 56 | "! python3.8 -m pip install git+https://github.com/open-mmlab/mmdetection.git@8179440ec5f75fe95484854af61ce6f6279f3bbc\n", 57 | "! python3.8 -m pip install git+https://github.com/open-mmlab/mmediting@d4086aaf8a36ae830f1714aad585900d24ad1156\n", 58 | "! python3.8 -m pip install git+https://github.com/iPERDance/neural_renderer.git@e5f54f71a8941acf372514eb92e289872f272653\n", 59 | "! python3.8 -m pip install tensorboardX>=2.1\n", 60 | "! python3.8 -m pip install toml\n", 61 | "! python3.8 -m pip install easydict\n", 62 | "! python3.8 -m pip install numpy==1.23.5\n", 63 | "\n", 64 | "# 重みのダウンロード\n", 65 | "#! pip install --upgrade gdown\n", 66 | "import gdown\n", 67 | "gdown.download('https://drive.google.com/uc?id=1jpp_KytMplNNFA_IJSzzSWhvyqIdmnJv', 'assets/checkpoints.zip', quiet=False)\n", 68 | "!unzip -o assets/checkpoints.zip -d assets/\n", 69 | "!rm assets/checkpoints.zip\n", 70 | "\n", 71 | "# サンプルのダウンロード\n", 72 | "!wget -O assets/samples.zip \"https://download.impersonator.org/iper_plus_plus_latest_samples.zip\"\n", 73 | "!unzip -o assets/samples.zip -d assets\n", 74 | "!rm assets/samples.zip\n", 75 | "\n", 76 | "# ディレクトリ移動\n", 77 | "%cd /content/iPERCore/\n", 78 | "\n", 79 | "# ライブラリーのインポート\n", 80 | "import os\n", 81 | "import os.path as osp\n", 82 | "import platform\n", 83 | "import argparse\n", 84 | "import time\n", 85 | "import sys\n", 86 | "import subprocess\n", 87 | "from IPython.display import HTML\n", 88 | "from base64 import b64encode\n" 89 | ] 90 | }, 91 | { 92 | "cell_type": "code", 93 | "execution_count": null, 94 | "metadata": { 95 | "id": "98ZXnpcmhZQI" 96 | }, 97 | "outputs": [], 98 | "source": [ 99 | "#@title 1-2.初期設定&関数定義\n", 100 | "\n", 101 | "#--- 初期設定 ---\n", 102 | "# the gpu ids\n", 103 | "gpu_ids = \"0\"\n", 104 | "\n", 105 | "# the image size\n", 106 | "image_size = 512\n", 107 | "\n", 108 | "# the default number of source images, it will be updated if the actual number of sources <= num_source\n", 109 | "num_source = 2\n", 110 | "\n", 111 | "# the assets directory. This is very important, please download it from `one_drive_url` firstly.\n", 112 | "assets_dir = \"/content/iPERCore/assets\"\n", 113 | "\n", 114 | "# the output directory.\n", 115 | "output_dir = \"./results\"\n", 116 | "\n", 117 | "# the model id of this case. This is a random model name.\n", 118 | "# model_id = \"model_\" + str(time.time())\n", 119 | "\n", 120 | "# # This is a specific model name, and it will be used if you do not change it.\n", 121 | "# model_id = \"axing_1\"\n", 122 | "\n", 123 | "# symlink from the actual assets directory to this current directory\n", 124 | "work_asserts_dir = os.path.join(\"./assets\")\n", 125 | "if not os.path.exists(work_asserts_dir):\n", 126 | " os.symlink(osp.abspath(assets_dir), osp.abspath(work_asserts_dir),\n", 127 | " target_is_directory=(platform.system() == \"Windows\"))\n", 128 | "\n", 129 | "cfg_path = osp.join(work_asserts_dir, \"configs\", \"deploy.toml\")\n", 130 | "\n", 131 | "\n", 132 | "#---関数定義---\n", 133 | "import matplotlib.pyplot as plt\n", 134 | "from PIL import Image\n", 135 | "import os\n", 136 | "import numpy as np\n", 137 | "import glob\n", 138 | "\n", 139 | "# 汎用画像ファイル表示\n", 140 | "def display_pic(folder):\n", 141 | " fig = plt.figure(figsize=(20, 20))\n", 142 | " files = os.listdir(folder)\n", 143 | " files.sort()\n", 144 | " for i, file in enumerate(files):\n", 145 | " if file == '.ipynb_checkpoints':\n", 146 | " continue\n", 147 | " if file == '.DS_Store':\n", 148 | " continue \n", 149 | " img = Image.open(folder+'/'+file) \n", 150 | " images = np.asarray(img)\n", 151 | " ax = fig.add_subplot(5, 5, i+1, xticks=[], yticks=[])\n", 152 | " image_plt = np.array(images)\n", 153 | " ax.imshow(image_plt)\n", 154 | " ax.set_xlabel(file, fontsize=20) \n", 155 | " plt.show()\n", 156 | " plt.close()\n", 157 | "\n", 158 | "# movie表示(専用画像使用)\n", 159 | "def display_movie(folder):\n", 160 | " fig = plt.figure(figsize=(20, 20))\n", 161 | " files = os.listdir(folder)\n", 162 | " files.sort()\n", 163 | " for i, file in enumerate(files):\n", 164 | " if file == '.ipynb_checkpoints':\n", 165 | " continue\n", 166 | " if file == '.DS_Store':\n", 167 | " continue \n", 168 | " img = Image.open(folder+'/'+file) \n", 169 | " images = np.asarray(img)\n", 170 | " ax = fig.add_subplot(5, 5, i+1, xticks=[], yticks=[])\n", 171 | " image_plt = np.array(images)\n", 172 | " ax.imshow(image_plt)\n", 173 | " ax.set_xlabel(file[:-4]+'.mp4', fontsize=20) \n", 174 | " plt.show()\n", 175 | " plt.close()\n", 176 | "\n", 177 | "# フォルダー名+ペア画像表示用サブ\n", 178 | "def display_pic_mini(folder):\n", 179 | " fig = plt.figure(figsize=(20, 20))\n", 180 | " files = os.listdir(folder)\n", 181 | " files.sort()\n", 182 | " for i, file in enumerate(files):\n", 183 | " if file == '.ipynb_checkpoints':\n", 184 | " continue\n", 185 | " if file == '.DS_Store':\n", 186 | " continue \n", 187 | " img = Image.open(folder+'/'+file) \n", 188 | " images = np.asarray(img)\n", 189 | " ax = fig.add_subplot(5, 5, i+1, xticks=[], yticks=[])\n", 190 | " image_plt = np.array(images)\n", 191 | " ax.imshow(image_plt)\n", 192 | " #ax.set_xlabel(file, fontsize=20) \n", 193 | " plt.show()\n", 194 | " plt.close()\n", 195 | "\n", 196 | "# フォルダー名+ペア画像表示用メイン\n", 197 | "def display_pic_double(folder):\n", 198 | " folders = glob.glob(os.path.join(folder,'*'))\n", 199 | " folders.sort()\n", 200 | " for folder in folders:\n", 201 | " print(folder[11:])\n", 202 | " display_pic_mini(folder)" 203 | ] 204 | }, 205 | { 206 | "cell_type": "markdown", 207 | "metadata": { 208 | "id": "_omzBcxz6ADw" 209 | }, 210 | "source": [ 211 | "![001.jpg](data:image/jpeg;base64,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ipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwDzCiiivozwgooooAKKKKACiiigAooooAKKKKACilpKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAp0aPLIscSM8jkKqqMliegA7mm1JbzS21xFPbyNFNEwdHU4KsDkEe4NAzstE8Gy3XgvxLqF3p2pLqNi1uLVPKddwdyH+XHzYA/Ck8E+DpdVfWxqmnalGLXS57q3xE8e6ZcbRyOep471u+HfG2tP8PvF8l34jvDqSNafZDJdfvQC53+Xk56Yzipfh14t8RXFj4vur/W9SnitNGleMyTswjlZgEYejcHBrmlKolL1/yN1GF4/wBdzzG7sbyyEf220uLbfnb50TJux1xkDNbkng3Uj4Uh8Q2T29/YEH7QLV98loc9JV6jjnPQfrWZrGu6trRh/tjUru+MORGbiQvszjOM+uB+VTeF/EmqeGNRa80e48qV0Mcisu5JFI6Mp4PqK2fPbTcyXLfXYx6kmhlh2ebE6b0EiblI3KehHqD610vgbwnP4ov5JrmQWui2uZb+/f5UiQck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HXvBMuk614/0W7vv7QS6jmZZAqxiNlK/LGOcnPSvIM0ZPrUewV731+RXtulj0b4jaVNqnizw5pekyQ3sz6PZwxyRtiN8KwLZPReM89qy/iPqFoH0vw7pEwn07Q4TB5yn5Z52OZZB7buB9K4zA9KKuNO1rvYmU738wooorQzCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAP/9k=)" 212 | ] 213 | }, 214 | { 215 | "cell_type": "code", 216 | "execution_count": null, 217 | "metadata": { 218 | "id": "iPRpgw8oL2bc" 219 | }, 220 | "outputs": [], 221 | "source": [ 222 | "#@title 2.画像と動画の表示\n", 223 | "print('===== pic =====')\n", 224 | "display_pic('single/pic')\n", 225 | "\n", 226 | "print('===== movie =====')\n", 227 | "display_movie('single/pic_movie')" 228 | ] 229 | }, 230 | { 231 | "cell_type": "code", 232 | "execution_count": null, 233 | "metadata": { 234 | "id": "9mcgrtu1qkFL" 235 | }, 236 | "outputs": [], 237 | "source": [ 238 | "#@title 3.動画の生成(5〜10分かかります)\n", 239 | "from pathlib import Path\n", 240 | "pic = '04.jpg'#@param {type:\"string\"}\n", 241 | "movie = 'd1.mp4'#@param {type:\"string\"}\n", 242 | "pic_name = Path(pic).stem\n", 243 | "movie_name = Path(movie).stem\n", 244 | "\n", 245 | "# This is a specific model name, and it will be used if you do not change it. This is the case of `trump`\n", 246 | "#model_id = \"donald_trump_2\"\n", 247 | "model_id = \"test01\"\n", 248 | "\n", 249 | "# the source input information, here \\\" is escape character of double duote \"\n", 250 | "#src_path = \"\\\"path?=/content/iPERCore/assets/samples/sources/donald_trump_2/00000.PNG,name?=donald\\\"\"\n", 251 | "src_path = \"\\\"path?=/content/iPERCore/single/pic/\"+pic+\",name?=\"+pic_name+\"\\\"\"\n", 252 | "\n", 253 | "#ref_path = \"\\\"path?=/content/iPERCore/movie/d1.mp4,\" \\\n", 254 | "ref_path = \"\\\"path?=/content/iPERCore/single/movie/\"+movie+\",\" \\\n", 255 | " \"name?=\"+movie_name+\",\" \\\n", 256 | " \"pose_fc?=300\\\"\"\n", 257 | "\n", 258 | "print(ref_path)\n", 259 | "\n", 260 | "#!python -m iPERCore.services.run_imitator \\\n", 261 | "!python3.8 -m iPERCore.services.run_imitator \\\n", 262 | " --gpu_ids $gpu_ids \\\n", 263 | " --num_source $num_source \\\n", 264 | " --image_size $image_size \\\n", 265 | " --output_dir $output_dir \\\n", 266 | " --model_id $model_id \\\n", 267 | " --cfg_path $cfg_path \\\n", 268 | " --src_path $src_path \\\n", 269 | " --ref_path $ref_path" 270 | ] 271 | }, 272 | { 273 | "cell_type": "code", 274 | "execution_count": null, 275 | "metadata": { 276 | "cellView": "form", 277 | "colab": { 278 | "background_save": true 279 | }, 280 | "id": "xUaUmeJbrtOC" 281 | }, 282 | "outputs": [], 283 | "source": [ 284 | "#@title 4.動画の再生\n", 285 | "mp4 = open('results/primitives/'+pic_name+'/synthesis/imitations/'+pic_name+'-'+movie, 'rb').read()\n", 286 | "data_url = \"data:video/mp4;base64,\" + b64encode(mp4).decode()\n", 287 | "HTML(f\"\"\"\n", 288 | "\"\"\")" 291 | ] 292 | }, 293 | { 294 | "cell_type": "code", 295 | "execution_count": null, 296 | "metadata": { 297 | "cellView": "form", 298 | "id": "zqVA6Wwp2Has" 299 | }, 300 | "outputs": [], 301 | "source": [ 302 | "#@title 5.動画のダウンロード\n", 303 | "from google.colab import files\n", 304 | "files.download('results/primitives/'+pic_name+'/synthesis/imitations/'+pic_name+'-'+movie)" 305 | ] 306 | }, 307 | { 308 | "cell_type": "markdown", 309 | "metadata": { 310 | "id": "TqATbZ7151FC" 311 | }, 312 | "source": [ 313 | "![002.jpg](data:image/jpeg;base64,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ymeK2Tz3BJPLnPTOK5GiiUVLRoFJx2LOoX13qV291qFzNdXL/elmcux/E1XBIII6jnpmkop7COi8UeMdZ8SxQW+oTpHYwACKztoxFCmO+wcE/Xp2xXPxu8UiyRuySIQyspwVI6EHsabRSUVFWQNtu7NrxV4kv/FF7b3mq+S11FbpbmWOMK0u3+Jz3Y//AKqi8N32n6dqYuNX0pdVtlRgLd5mjBf+EkjqB3HesqijlVuVbD5ne5ueLPE1/wCJ72Ka+EUMECeVbWtuuyG3T+6i/wBe9YdFFCSirITbbuzc8LeIpvD812FtbW9s72HyLq0ulJjlTOR05BB5BFdTb/EuLTdJWw0PwrpVpGk5uozcSSXQimIxvQP0OK86oqZU4yd2ilOUdi3qmoXeq6hPfajO9xdztvklfqx/w7Y7VUooq0rE7igkEEEgjkEdRXXeKPEeneIG0vVbq0lOux7I9RQgCC8VMYfIOVYgYPH06VyFFJxTdxptKx348e6SujyaUvgrTBpz3Aumh+2T4MgXaGznPTj0pL3x5pN7ZWFpdeCtLktrFGjt0N3OPLVjuIGDzzzzXA0VHso/02V7SX9JG94i1jStSsUh03w3Z6TKr7mmguJJC4wRtIc9MkH8K7XUPiToy+JTq1h4Wjnuvs6wfarm7kjkYeUI2BRSVHGRx25615ZRQ6UXv+bBVJLY7yw8baHYWl9bWngmyjgvYhBcL/aNwd6AhgMk8cgdKq+LPEmka3oPh3T9P06TSksJJzNEjGZFEjKcoWO5jwSQcc1xtFNUop3/AFF7RtWOn8ZeIbXU4dN0vRIJbbQtMjK26TY8yR25eWTHG4n8h9a5iiiqjFRVkJtt3YUUUUyQooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA//Z)" 314 | ] 315 | }, 316 | { 317 | "cell_type": "code", 318 | "execution_count": null, 319 | "metadata": { 320 | "cellView": "form", 321 | "id": "ylnUxfE7qlHO" 322 | }, 323 | "outputs": [], 324 | "source": [ 325 | "#@title 6.画像のアップロード\n", 326 | "import os\n", 327 | "import shutil\n", 328 | "from google.colab import files\n", 329 | "\n", 330 | "# ルートへ画像をアップロード\n", 331 | "uploaded = files.upload() \n", 332 | "uploaded = list(uploaded.keys()) \n", 333 | "\n", 334 | "# ルートからpicフォルダーへ移動\n", 335 | "for i in range(len(uploaded)):\n", 336 | " shutil.move(uploaded[i], './single/pic/'+uploaded[i])" 337 | ] 338 | }, 339 | { 340 | "cell_type": "code", 341 | "execution_count": null, 342 | "metadata": { 343 | "cellView": "form", 344 | "id": "uLF5hYM2sN9w" 345 | }, 346 | "outputs": [], 347 | "source": [ 348 | "#@title 7.画像と動画の表示\n", 349 | "print('===== pic =====')\n", 350 | "display_pic('single/pic')\n", 351 | "\n", 352 | "print('===== movie =====')\n", 353 | "display_movie('single/pic_movie')" 354 | ] 355 | }, 356 | { 357 | "cell_type": "code", 358 | "execution_count": null, 359 | "metadata": { 360 | "id": "Z9jqD67fsbqU" 361 | }, 362 | "outputs": [], 363 | "source": [ 364 | "#@title 8.動画の生成(5〜10分かかります)\n", 365 | "from pathlib import Path\n", 366 | "pic = '126.jpg'#@param {type:\"string\"}\n", 367 | "movie = 'd2.mp4'#@param {type:\"string\"}\n", 368 | "pic_name = Path(pic).stem\n", 369 | "movie_name = Path(movie).stem\n", 370 | "\n", 371 | "# This is a specific model name, and it will be used if you do not change it. This is the case of `trump`\n", 372 | "#model_id = \"donald_trump_2\"\n", 373 | "model_id = \"test01\"\n", 374 | "\n", 375 | "# the source input information, here \\\" is escape character of double duote \"\n", 376 | "#src_path = \"\\\"path?=/content/iPERCore/assets/samples/sources/donald_trump_2/00000.PNG,name?=donald\\\"\"\n", 377 | "src_path = \"\\\"path?=/content/iPERCore/single/pic/\"+pic+\",name?=\"+pic_name+\"\\\"\"\n", 378 | "\n", 379 | "#ref_path = \"\\\"path?=/content/iPERCore/movie/d1.mp4,\" \\\n", 380 | "ref_path = \"\\\"path?=/content/iPERCore/single/movie/\"+movie+\",\" \\\n", 381 | " \"name?=\"+movie_name+\",\" \\\n", 382 | " \"pose_fc?=300\\\"\"\n", 383 | "\n", 384 | "print(ref_path)\n", 385 | "\n", 386 | "!python3.8 -m iPERCore.services.run_imitator \\\n", 387 | " --gpu_ids $gpu_ids \\\n", 388 | " --num_source $num_source \\\n", 389 | " --image_size $image_size \\\n", 390 | " --output_dir $output_dir \\\n", 391 | " --model_id $model_id \\\n", 392 | " --cfg_path $cfg_path \\\n", 393 | " --src_path $src_path \\\n", 394 | " --ref_path $ref_path" 395 | ] 396 | }, 397 | { 398 | "cell_type": "code", 399 | "execution_count": null, 400 | "metadata": { 401 | "cellView": "form", 402 | "id": "WIGGsdBKsqUM" 403 | }, 404 | "outputs": [], 405 | "source": [ 406 | "#@title 9.動画の再生\n", 407 | "mp4 = open('results/primitives/'+pic_name+'/synthesis/imitations/'+pic_name+'-'+movie, 'rb').read()\n", 408 | "data_url = \"data:video/mp4;base64,\" + b64encode(mp4).decode()\n", 409 | "HTML(f\"\"\"\n", 410 | "\"\"\")" 413 | ] 414 | }, 415 | { 416 | "cell_type": "code", 417 | "execution_count": null, 418 | "metadata": { 419 | "cellView": "form", 420 | "id": "2p2uBg9Pswrf" 421 | }, 422 | "outputs": [], 423 | "source": [ 424 | "#@title 10.動画のダウンロード\n", 425 | "from google.colab import files\n", 426 | "files.download('results/primitives/'+pic_name+'/synthesis/imitations/'+pic_name+'-'+movie)" 427 | ] 428 | }, 429 | { 430 | "cell_type": "markdown", 431 | "metadata": { 432 | "id": "l7PZuUISa3S-" 433 | }, 434 | "source": [ 435 | "![003.jpg](data:image/jpeg;base64,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Njc4OTpDREVGR0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4eLj5OXm5+jp6vHy8/T19vf4+fr/xAAfAQADAQEBAQEBAQEBAAAAAAAAAQIDBAUGBwgJCgv/xAC1EQACAQIEBAMEBwUEBAABAncAAQIDEQQFITEGEkFRB2FxEyIygQgUQpGhscEJIzNS8BVictEKFiQ04SXxFxgZGiYnKCkqNTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqCg4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2dri4+Tl5ufo6ery8/T19vf4+fr/2gAMAwEAAhEDEQA/APMKKKK+jPCCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigApyKzuFRWZmOAqjJJ9hTasWF5cafewXllK0NzA4kikXGVYdCM0DOj03w0lz4D1vV5YbwX9ndQQwoFIUq/wB4lcZNHg7w0mr23iKS+hvEaw0yS7gCKV3SKQADkcjnoK6/SPHfiOT4aeIrybXbltQhvbZIJCy71Q/eAGOnrT/AvjfxPd6L4xu77WryZbLSi8LOV/dys4CkcdeDXM5VLS9f8vI3UYXXp/meTSwyw486KSPd03oVz9M1vXfg/VYPC9r4giWG70uYfvJLaTzDbNnG2Ufwnp7DPNU9f8Rav4geFtb1Ce9aAFYzLj5QcZxgD0FT+EvFOp+Fb2WfS5E2TIY5oJl3xTKRj5l74/zxkVs+e11uZLlvrsYVOdGTbvVl3KGGRjIPQj2966Lw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Nveq87H7LsOEA9Qe/SvAacjtG26NmRvVSQfzFR9X7P8ADuV7bujsvhdpca3w8S6uDHoei7biR2H+umAzHCvqxbBx/jXLatfzapql5qF0cz3Uzzv9WJOP1qv5j+X5e9/LznZuO3PrjpmmVso+85MyctEgoooqiQooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA//9k=)\n" 436 | ] 437 | }, 438 | { 439 | "cell_type": "code", 440 | "execution_count": null, 441 | "metadata": { 442 | "cellView": "form", 443 | "id": "dT9RXYUNWftz" 444 | }, 445 | "outputs": [], 446 | "source": [ 447 | "#@title 11.フォルダーと動画の表示\n", 448 | "print('===== folder =====')\n", 449 | "display_pic_double('double/pic')\n", 450 | "\n", 451 | "print('===== movie =====')\n", 452 | "display_movie('double/pic_movie')" 453 | ] 454 | }, 455 | { 456 | "cell_type": "code", 457 | "execution_count": null, 458 | "metadata": { 459 | "id": "8ZAAoSX1zM3b" 460 | }, 461 | "outputs": [], 462 | "source": [ 463 | "#@title 12.動画の生成(5〜10分かかります)\n", 464 | "from pathlib import Path\n", 465 | "folder = 'f01'#@param {type:\"string\"}\n", 466 | "movie = 'd01.mp4'#@param {type:\"string\"}\n", 467 | "movie_name = Path(movie).stem\n", 468 | "\n", 469 | "# This is a specific model name, and it will be used if you do not change it. This is the case of `trump`\n", 470 | "#model_id = \"axing_1\"\n", 471 | "model_id = \"test02\"\n", 472 | "\n", 473 | "# the source input information, here \\\" is escape character of double duote \"\n", 474 | "src_path = \"\\\"path?=/content/iPERCore/double/pic/\"+folder+\",name?=\"+folder+\"\\\"\"\n", 475 | "\n", 476 | "\n", 477 | "## the reference input information. There are three reference videos in this case.\n", 478 | "# here \\\" is escape character of double duote \"\n", 479 | "ref_path = \"\\\"path?=/content/iPERCore/double/movie/\"+movie+\",\" \\\n", 480 | " \"name?=\"+movie_name+\",\" \\\n", 481 | " \"pose_fc?=300\\\"\"\n", 482 | "\n", 483 | "print(ref_path)\n", 484 | "\n", 485 | "!python3.8 -m iPERCore.services.run_imitator \\\n", 486 | " --gpu_ids $gpu_ids \\\n", 487 | " --num_source $num_source \\\n", 488 | " --image_size $image_size \\\n", 489 | " --output_dir $output_dir \\\n", 490 | " --model_id $model_id \\\n", 491 | " --cfg_path $cfg_path \\\n", 492 | " --src_path $src_path \\\n", 493 | " --ref_path $ref_path" 494 | ] 495 | }, 496 | { 497 | "cell_type": "code", 498 | "execution_count": null, 499 | "metadata": { 500 | "cellView": "form", 501 | "id": "0zzxmdsvzz_o" 502 | }, 503 | "outputs": [], 504 | "source": [ 505 | "#@title 13.動画の再生\n", 506 | "mp4 = open(\"./results/primitives/\"+folder+\"/synthesis/imitations/\"+folder+\"-\"+movie, \"rb\").read()\n", 507 | "data_url = \"data:video/mp4;base64,\" + b64encode(mp4).decode()\n", 508 | "HTML(f\"\"\"\n", 509 | "\"\"\")" 512 | ] 513 | }, 514 | { 515 | "cell_type": "code", 516 | "execution_count": null, 517 | "metadata": { 518 | "cellView": "form", 519 | "id": "yHPx0n5YLBEC" 520 | }, 521 | "outputs": [], 522 | "source": [ 523 | "#@title 14.動画のダウンロード\n", 524 | "from google.colab import files\n", 525 | "files.download('results/primitives/'+folder+'/synthesis/imitations/'+folder+'-'+movie)" 526 | ] 527 | }, 528 | { 529 | "cell_type": "markdown", 530 | "metadata": { 531 | "id": "bQytTKnb6ey_" 532 | }, 533 | "source": [ 534 | "![004.jpg](data:image/jpeg;base64,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2dj42gNlpsGveH7LVpdNRYrW5M8lvMiKcqpZD8wB6VL4t+I+p+IILy2gs7HSrW9cPdrZph7kjp5jnlh7cVw9FR7KF72L9pK1rhRRRVkHReCfEK+H9TlN3b/a9KvYWtb62/56xN6ejA8g/wCNLpmq6HpN7fg6HHrVq8im1e+keGSJRnqIzgk5Gee3vXOUVLgm7lKTR6TJ8TLSTxINffwhpp1cOJBc/aps7gu0HHTpx0rKk8V+H5JHkk8CaUXdizH7bccknJ71xdFSqMVt+bKdST3/ACR2fhTxRpWkaz4gu7nSP9C1CwltYtPhkOxSxX5S+QwX5TyOeatTeN9Em0q102TwVZNZW0jyxR/2jcfKz43HPU5wOtcFRQ6UW7/qwVSSVj0uz+IminV9Cub3whbouleVFBJFezM8MaNuG1SQGIJJ+br3rgdbuo77WtQu4QwiuLmWZA4wQrOSM+/NUqKcacYu6FKblozQ0HWL3QdVh1HS5RDeQhgjlA2NylTweOhNUKSirtrcm/Qms5FhvLeVwSscqOQOpAYE4/Ktjxhr7614o1XUrOW7hgu52ljjeQgqCBwQDj8qwaKVle4XdrHbReJ9FsvDmqWmn2estqGo2YtJZLu9WSFPmDMyrjPUcZqh8P8AX7Lw9rF5d6lbSXUE1jPa+ShxvLgABjkEL1yRyK5iip9mrNdyud3T7Het430RtGi0pvBVl9gina5SL+0bjiQqFLZ69ABjpVmHx9oj3Oim68G2oh0sqtuUv5i0KCTecAnDHOT838q85opexj/TY/aS/pI7S08Q6Ivj3VfEd9a3VzGbmW8sbUqoDyliyeac8AHBwM5Ncrql/c6pqV1f30nmXVzI0sr+rE8/hVWiqUEnclyb0CiiiqJCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAP/9k=)" 535 | ] 536 | }, 537 | { 538 | "cell_type": "code", 539 | "execution_count": null, 540 | "metadata": { 541 | "cellView": "form", 542 | "id": "b_mGU0BCFWLW" 543 | }, 544 | "outputs": [], 545 | "source": [ 546 | "#@title 15.前後画像のアップロード\n", 547 | "#@markdown ・前を向いた画像(000.jpg)と後ろを向いた画像(001.jpg)をペアでアップロードして下さい\n", 548 | "import os\n", 549 | "import shutil\n", 550 | "\n", 551 | "# フォルダ内のフォルダ数(ファイル数)をカウント\n", 552 | "# 但し、'.ipynb_checkpoints' はカウントしない\n", 553 | "def count_folder(path):\n", 554 | " folders = os.listdir(path)\n", 555 | " offset = 0 \n", 556 | " for folder in folders:\n", 557 | " if folder == '.ipynb_checkpoints':\n", 558 | " offset = 1\n", 559 | " num = len(os.listdir(path))-offset\n", 560 | " return num\n", 561 | "\n", 562 | "# ファイル数が2でないフォルダは削除\n", 563 | "folders = os.listdir('double/pic')\n", 564 | "for folder in folders:\n", 565 | " num = count_folder('double/pic/'+folder) # ファイル数カウント \n", 566 | " if num != 2: \n", 567 | " shutil.rmtree('double/pic/'+folder) # 削除\n", 568 | "\n", 569 | "# 新規フォルダの作成\n", 570 | "number = count_folder('double/pic') # フォルダ数カウント\n", 571 | "folder_path = 'double/pic/f'+str(number+1).zfill(2) # フォルダ名設定\n", 572 | "os.makedirs(folder_path, exist_ok=True)\n", 573 | "\n", 574 | "# 画像をルートへアップロード\n", 575 | "from google.colab import files\n", 576 | "uploaded = files.upload() \n", 577 | "uploaded = list(uploaded.keys()) \n", 578 | "\n", 579 | "# ルートから新規フォルダへ移動\n", 580 | "for i in range(len(uploaded)):\n", 581 | " shutil.move(uploaded[i], folder_path+'/'+uploaded[i])" 582 | ] 583 | }, 584 | { 585 | "cell_type": "code", 586 | "execution_count": null, 587 | "metadata": { 588 | "cellView": "form", 589 | "id": "kkEbSlgu0x1Y" 590 | }, 591 | "outputs": [], 592 | "source": [ 593 | "#@title 16.フォルダーと動画の表示\n", 594 | "print('===== folder =====')\n", 595 | "display_pic_double('double/pic')\n", 596 | "\n", 597 | "print('===== movie =====')\n", 598 | "display_movie('double/pic_movie')" 599 | ] 600 | }, 601 | { 602 | "cell_type": "code", 603 | "execution_count": null, 604 | "metadata": { 605 | "id": "2ge4pssC01hR" 606 | }, 607 | "outputs": [], 608 | "source": [ 609 | "#@title 17.動画の生成(5〜10分かかります)\n", 610 | "from pathlib import Path\n", 611 | "folder = ''#@param {type:\"string\"}\n", 612 | "movie = ''#@param {type:\"string\"}\n", 613 | "movie_name = Path(movie).stem\n", 614 | "\n", 615 | "# This is a specific model name, and it will be used if you do not change it. This is the case of `trump`\n", 616 | "#model_id = \"axing_1\"\n", 617 | "model_id = \"test02\"\n", 618 | "\n", 619 | "# the source input information, here \\\" is escape character of double duote \"\n", 620 | "src_path = \"\\\"path?=/content/iPERCore/double/pic/\"+folder+\",name?=\"+folder+\"\\\"\"\n", 621 | "\n", 622 | "\n", 623 | "## the reference input information. There are three reference videos in this case.\n", 624 | "# here \\\" is escape character of double duote \"\n", 625 | "ref_path = \"\\\"path?=/content/iPERCore/double/movie/\"+movie+\",\" \\\n", 626 | " \"name?=\"+movie_name+\",\" \\\n", 627 | " \"pose_fc?=300\\\"\"\n", 628 | "\n", 629 | "print(ref_path)\n", 630 | "\n", 631 | "!python3.8 -m iPERCore.services.run_imitator \\\n", 632 | " --gpu_ids $gpu_ids \\\n", 633 | " --num_source $num_source \\\n", 634 | " --image_size $image_size \\\n", 635 | " --output_dir $output_dir \\\n", 636 | " --model_id $model_id \\\n", 637 | " --cfg_path $cfg_path \\\n", 638 | " --src_path $src_path \\\n", 639 | " --ref_path $ref_path" 640 | ] 641 | }, 642 | { 643 | "cell_type": "code", 644 | "execution_count": null, 645 | "metadata": { 646 | "cellView": "form", 647 | "id": "vRoCYIid01o_" 648 | }, 649 | "outputs": [], 650 | "source": [ 651 | "#@title 18.動画の再生\n", 652 | "mp4 = open(\"./results/primitives/\"+folder+\"/synthesis/imitations/\"+folder+\"-\"+movie, \"rb\").read()\n", 653 | "data_url = \"data:video/mp4;base64,\" + b64encode(mp4).decode()\n", 654 | "HTML(f\"\"\"\n", 655 | "\"\"\")" 658 | ] 659 | }, 660 | { 661 | "cell_type": "code", 662 | "execution_count": null, 663 | "metadata": { 664 | "cellView": "form", 665 | "id": "RrMHTdd_1DLj" 666 | }, 667 | "outputs": [], 668 | "source": [ 669 | "#@title 19.動画のダウンロード\n", 670 | "from google.colab import files\n", 671 | "files.download('results/primitives/'+folder+'/synthesis/imitations/'+folder+'-'+movie)" 672 | ] 673 | }, 674 | { 675 | "cell_type": "markdown", 676 | "metadata": { 677 | "id": "oc5AM9tBgk9c" 678 | }, 679 | "source": [ 680 | "###【備考】\n", 681 | "・動作がおかしくなった場合は、右上にある「ランタイム/ランタイムを出荷時設定にリセット」をクリックして、再度1番から順番に操作を行います。\n", 682 | "\n", 683 | "・このノートを実行して閉じてから、すぐ再度実行する場合は、前の記憶が不完全に残っていて上手く動かないことがあります。その場合は、右上にある「ランタイム/ランタイムを出荷時設定にリセット」をクリックして、再度1番から操作を行います。\n", 684 | "\n", 685 | "・長時間使用するとgoogleから使用制限を受ける場合がありますが、12h〜24h程度経つと使用制限が解除されます。" 686 | ] 687 | } 688 | ], 689 | "metadata": { 690 | "accelerator": "GPU", 691 | "colab": { 692 | "provenance": [], 693 | "include_colab_link": true 694 | }, 695 | "kernelspec": { 696 | "display_name": "Python 3", 697 | "name": "python3" 698 | } 699 | }, 700 | "nbformat": 4, 701 | "nbformat_minor": 0 702 | } --------------------------------------------------------------------------------