Skip to content

Instantly share code, notes, and snippets.

@andreyryabtsev
Last active January 16, 2024 11:59
Show Gist options
  • Save andreyryabtsev/243aa3eefa6e06891dda7b1583d1d08f to your computer and use it in GitHub Desktop.
Save andreyryabtsev/243aa3eefa6e06891dda7b1583d1d08f to your computer and use it in GitHub Desktop.
BackMatting.ipynb
Display the source blob
Display the rendered blob
Raw
{
"nbformat": 4,
"nbformat_minor": 0,
"metadata": {
"colab": {
"name": "BackMatting.ipynb",
"provenance": [],
"collapsed_sections": [],
"authorship_tag": "ABX9TyMFkEBi0USAWz3zmi/w9hY3",
"include_colab_link": true
},
"kernelspec": {
"name": "python3",
"display_name": "Python 3"
},
"accelerator": "GPU"
},
"cells": [
{
"cell_type": "markdown",
"metadata": {
"id": "view-in-github",
"colab_type": "text"
},
"source": [
"<a href=\"https://colab.research.google.com/gist/andreyryabtsev/243aa3eefa6e06891dda7b1583d1d08f/backmatting.ipynb\" target=\"_parent\"><img src=\"https://colab.research.google.com/assets/colab-badge.svg\" alt=\"Open In Colab\"/></a>"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "4RWzS-M_1uWx",
"colab_type": "text"
},
"source": [
"![background matting](https://i.imgur.com/AtVo6zF.png)"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "IEGv4epTGgg0",
"colab_type": "text"
},
"source": [
"The notebook is split into three parts: required setup, running the algorithm on photos, and running it on videos. You may want to use playground mode to make minor changes, should you need to."
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "eYd5Zw5_GoSe",
"colab_type": "text"
},
"source": [
"# Required setup"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "Irtsr6OBgiHQ",
"colab_type": "text"
},
"source": [
"Instructions: Go to Runtime -> Change runtime type and select \"GPU\" before proceeding. Then, begin by cloning the repo:"
]
},
{
"cell_type": "code",
"metadata": {
"id": "efDIVnBbQxbC",
"colab_type": "code",
"outputId": "c8db845f-d748-4ece-b737-f155eab2af38",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 153
}
},
"source": [
"!git clone https://github.com/senguptaumd/Background-Matting.git\n",
"%cd Background-Matting/"
],
"execution_count": 1,
"outputs": [
{
"output_type": "stream",
"text": [
"Cloning into 'Background-Matting'...\n",
"remote: Enumerating objects: 10, done.\u001b[K\n",
"remote: Counting objects: 100% (10/10), done.\u001b[K\n",
"remote: Compressing objects: 100% (10/10), done.\u001b[K\n",
"remote: Total 124 (delta 2), reused 1 (delta 0), pack-reused 114\u001b[K\n",
"Receiving objects: 100% (124/124), 59.16 MiB | 11.10 MiB/s, done.\n",
"Resolving deltas: 100% (58/58), done.\n",
"/content/Background-Matting\n"
],
"name": "stdout"
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "1fH8Ww3lglub",
"colab_type": "text"
},
"source": [
"Set up the environment:"
]
},
{
"cell_type": "code",
"metadata": {
"id": "pgaVf6juRE_g",
"colab_type": "code",
"outputId": "22fc01bb-0164-4643-f2a1-c3f15cbb7b11",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 1000
}
},
"source": [
"!pip3 install torch==1.4.0+cu100 torchvision==0.5.0+cu100 -f https://download.pytorch.org/whl/torch_stable.html\n",
"%tensorflow_version 2.x\n",
"!pip uninstall -y tensorflow\n",
"!pip3 install tensorflow-gpu==1.14.0\n",
"!pip install -r requirements.txt\n",
"\n",
"!git clone https://github.com/tensorflow/models.git\n",
"%cd models/research/\n",
"import os\n",
"os.environ[\"PYTHONPATH\"] += f\":{os.getcwd()}:{os.getcwd()}/slim\"\n",
"%cd ../.."
],
"execution_count": 2,
"outputs": [
{
"output_type": "stream",
"text": [
"Looking in links: https://download.pytorch.org/whl/torch_stable.html\n",
"Collecting torch==1.4.0+cu100\n",
"\u001b[?25l Downloading https://download.pytorch.org/whl/cu100/torch-1.4.0%2Bcu100-cp36-cp36m-linux_x86_64.whl (723.9MB)\n",
"\u001b[K |████████████████████████████████| 723.9MB 25kB/s \n",
"\u001b[?25hCollecting torchvision==0.5.0+cu100\n",
"\u001b[?25l Downloading https://download.pytorch.org/whl/cu100/torchvision-0.5.0%2Bcu100-cp36-cp36m-linux_x86_64.whl (4.0MB)\n",
"\u001b[K |████████████████████████████████| 4.1MB 66.7MB/s \n",
"\u001b[?25hRequirement already satisfied: six in /usr/local/lib/python3.6/dist-packages (from torchvision==0.5.0+cu100) (1.12.0)\n",
"Requirement already satisfied: numpy in /usr/local/lib/python3.6/dist-packages (from torchvision==0.5.0+cu100) (1.18.2)\n",
"Requirement already satisfied: pillow>=4.1.1 in /usr/local/lib/python3.6/dist-packages (from torchvision==0.5.0+cu100) (7.0.0)\n",
"Installing collected packages: torch, torchvision\n",
" Found existing installation: torch 1.4.0\n",
" Uninstalling torch-1.4.0:\n",
" Successfully uninstalled torch-1.4.0\n",
" Found existing installation: torchvision 0.5.0\n",
" Uninstalling torchvision-0.5.0:\n",
" Successfully uninstalled torchvision-0.5.0\n",
"Successfully installed torch-1.4.0+cu100 torchvision-0.5.0+cu100\n",
"Uninstalling tensorflow-2.2.0rc3:\n",
" Successfully uninstalled tensorflow-2.2.0rc3\n",
"Collecting tensorflow-gpu==1.14.0\n",
"\u001b[?25l Downloading https://files.pythonhosted.org/packages/76/04/43153bfdfcf6c9a4c38ecdb971ca9a75b9a791bb69a764d652c359aca504/tensorflow_gpu-1.14.0-cp36-cp36m-manylinux1_x86_64.whl (377.0MB)\n",
"\u001b[K |████████████████████████████████| 377.0MB 49kB/s \n",
"\u001b[?25hRequirement already satisfied: absl-py>=0.7.0 in /usr/local/lib/python3.6/dist-packages (from tensorflow-gpu==1.14.0) (0.9.0)\n",
"Requirement already satisfied: protobuf>=3.6.1 in /usr/local/lib/python3.6/dist-packages (from tensorflow-gpu==1.14.0) (3.10.0)\n",
"Collecting tensorboard<1.15.0,>=1.14.0\n",
"\u001b[?25l Downloading https://files.pythonhosted.org/packages/91/2d/2ed263449a078cd9c8a9ba50ebd50123adf1f8cfbea1492f9084169b89d9/tensorboard-1.14.0-py3-none-any.whl (3.1MB)\n",
"\u001b[K |████████████████████████████████| 3.2MB 40.9MB/s \n",
"\u001b[?25hRequirement already satisfied: google-pasta>=0.1.6 in /usr/local/lib/python3.6/dist-packages (from tensorflow-gpu==1.14.0) (0.2.0)\n",
"Requirement already satisfied: six>=1.10.0 in /usr/local/lib/python3.6/dist-packages (from tensorflow-gpu==1.14.0) (1.12.0)\n",
"Requirement already satisfied: wrapt>=1.11.1 in /usr/local/lib/python3.6/dist-packages (from tensorflow-gpu==1.14.0) (1.12.1)\n",
"Requirement already satisfied: numpy<2.0,>=1.14.5 in /usr/local/lib/python3.6/dist-packages (from tensorflow-gpu==1.14.0) (1.18.2)\n",
"Collecting tensorflow-estimator<1.15.0rc0,>=1.14.0rc0\n",
"\u001b[?25l Downloading https://files.pythonhosted.org/packages/3c/d5/21860a5b11caf0678fbc8319341b0ae21a07156911132e0e71bffed0510d/tensorflow_estimator-1.14.0-py2.py3-none-any.whl (488kB)\n",
"\u001b[K |████████████████████████████████| 491kB 51.0MB/s \n",
"\u001b[?25hRequirement already satisfied: keras-preprocessing>=1.0.5 in /usr/local/lib/python3.6/dist-packages (from tensorflow-gpu==1.14.0) (1.1.0)\n",
"Requirement already satisfied: termcolor>=1.1.0 in /usr/local/lib/python3.6/dist-packages (from tensorflow-gpu==1.14.0) (1.1.0)\n",
"Requirement already satisfied: astor>=0.6.0 in /usr/local/lib/python3.6/dist-packages (from tensorflow-gpu==1.14.0) (0.8.1)\n",
"Requirement already satisfied: grpcio>=1.8.6 in /usr/local/lib/python3.6/dist-packages (from tensorflow-gpu==1.14.0) (1.28.1)\n",
"Requirement already satisfied: gast>=0.2.0 in /usr/local/lib/python3.6/dist-packages (from tensorflow-gpu==1.14.0) (0.3.3)\n",
"Requirement already satisfied: wheel>=0.26 in /usr/local/lib/python3.6/dist-packages (from tensorflow-gpu==1.14.0) (0.34.2)\n",
"Requirement already satisfied: keras-applications>=1.0.6 in /usr/local/lib/python3.6/dist-packages (from tensorflow-gpu==1.14.0) (1.0.8)\n",
"Requirement already satisfied: setuptools in /usr/local/lib/python3.6/dist-packages (from protobuf>=3.6.1->tensorflow-gpu==1.14.0) (46.1.3)\n",
"Requirement already satisfied: markdown>=2.6.8 in /usr/local/lib/python3.6/dist-packages (from tensorboard<1.15.0,>=1.14.0->tensorflow-gpu==1.14.0) (3.2.1)\n",
"Requirement already satisfied: werkzeug>=0.11.15 in /usr/local/lib/python3.6/dist-packages (from tensorboard<1.15.0,>=1.14.0->tensorflow-gpu==1.14.0) (1.0.1)\n",
"Requirement already satisfied: h5py in /usr/local/lib/python3.6/dist-packages (from keras-applications>=1.0.6->tensorflow-gpu==1.14.0) (2.10.0)\n",
"Installing collected packages: tensorboard, tensorflow-estimator, tensorflow-gpu\n",
" Found existing installation: tensorboard 2.2.0\n",
" Uninstalling tensorboard-2.2.0:\n",
" Successfully uninstalled tensorboard-2.2.0\n",
" Found existing installation: tensorflow-estimator 2.2.0rc0\n",
" Uninstalling tensorflow-estimator-2.2.0rc0:\n",
" Successfully uninstalled tensorflow-estimator-2.2.0rc0\n",
"Successfully installed tensorboard-1.14.0 tensorflow-estimator-1.14.0 tensorflow-gpu-1.14.0\n",
"Collecting numpy==1.17.0\n",
"\u001b[?25l Downloading https://files.pythonhosted.org/packages/19/b9/bda9781f0a74b90ebd2e046fde1196182900bd4a8e1ea503d3ffebc50e7c/numpy-1.17.0-cp36-cp36m-manylinux1_x86_64.whl (20.4MB)\n",
"\u001b[K |████████████████████████████████| 20.4MB 75.3MB/s \n",
"\u001b[?25hCollecting opencv-python==3.4.5.20\n",
"\u001b[?25l Downloading https://files.pythonhosted.org/packages/85/e1/d3eed618272f4b746339af1a84b2511e79c1708d88a9195cf25d743fa614/opencv_python-3.4.5.20-cp36-cp36m-manylinux1_x86_64.whl (25.4MB)\n",
"\u001b[K |████████████████████████████████| 25.4MB 95kB/s \n",
"\u001b[?25hCollecting scikit-image==0.14.2\n",
"\u001b[?25l Downloading https://files.pythonhosted.org/packages/24/06/d560630eb9e36d90d69fe57d9ff762d8f501664ce478b8a0ae132b3c3008/scikit_image-0.14.2-cp36-cp36m-manylinux1_x86_64.whl (25.3MB)\n",
"\u001b[K |████████████████████████████████| 25.3MB 131kB/s \n",
"\u001b[?25hCollecting scipy==1.2.1\n",
"\u001b[?25l Downloading https://files.pythonhosted.org/packages/7f/5f/c48860704092933bf1c4c1574a8de1ffd16bf4fde8bab190d747598844b2/scipy-1.2.1-cp36-cp36m-manylinux1_x86_64.whl (24.8MB)\n",
"\u001b[K |████████████████████████████████| 24.8MB 108kB/s \n",
"\u001b[?25hRequirement already satisfied: networkx>=1.8 in /usr/local/lib/python3.6/dist-packages (from scikit-image==0.14.2->-r requirements.txt (line 3)) (2.4)\n",
"Requirement already satisfied: dask[array]>=1.0.0 in /usr/local/lib/python3.6/dist-packages (from scikit-image==0.14.2->-r requirements.txt (line 3)) (2.12.0)\n",
"Requirement already satisfied: matplotlib>=2.0.0 in /usr/local/lib/python3.6/dist-packages (from scikit-image==0.14.2->-r requirements.txt (line 3)) (3.2.1)\n",
"Requirement already satisfied: six>=1.10.0 in /usr/local/lib/python3.6/dist-packages (from scikit-image==0.14.2->-r requirements.txt (line 3)) (1.12.0)\n",
"Requirement already satisfied: pillow>=4.3.0 in /usr/local/lib/python3.6/dist-packages (from scikit-image==0.14.2->-r requirements.txt (line 3)) (7.0.0)\n",
"Requirement already satisfied: PyWavelets>=0.4.0 in /usr/local/lib/python3.6/dist-packages (from scikit-image==0.14.2->-r requirements.txt (line 3)) (1.1.1)\n",
"Requirement already satisfied: cloudpickle>=0.2.1 in /usr/local/lib/python3.6/dist-packages (from scikit-image==0.14.2->-r requirements.txt (line 3)) (1.3.0)\n",
"Requirement already satisfied: decorator>=4.3.0 in /usr/local/lib/python3.6/dist-packages (from networkx>=1.8->scikit-image==0.14.2->-r requirements.txt (line 3)) (4.4.2)\n",
"Requirement already satisfied: toolz>=0.7.3; extra == \"array\" in /usr/local/lib/python3.6/dist-packages (from dask[array]>=1.0.0->scikit-image==0.14.2->-r requirements.txt (line 3)) (0.10.0)\n",
"Requirement already satisfied: pyparsing!=2.0.4,!=2.1.2,!=2.1.6,>=2.0.1 in /usr/local/lib/python3.6/dist-packages (from matplotlib>=2.0.0->scikit-image==0.14.2->-r requirements.txt (line 3)) (2.4.7)\n",
"Requirement already satisfied: kiwisolver>=1.0.1 in /usr/local/lib/python3.6/dist-packages (from matplotlib>=2.0.0->scikit-image==0.14.2->-r requirements.txt (line 3)) (1.2.0)\n",
"Requirement already satisfied: python-dateutil>=2.1 in /usr/local/lib/python3.6/dist-packages (from matplotlib>=2.0.0->scikit-image==0.14.2->-r requirements.txt (line 3)) (2.8.1)\n",
"Requirement already satisfied: cycler>=0.10 in /usr/local/lib/python3.6/dist-packages (from matplotlib>=2.0.0->scikit-image==0.14.2->-r requirements.txt (line 3)) (0.10.0)\n",
"\u001b[31mERROR: fancyimpute 0.4.3 requires tensorflow, which is not installed.\u001b[0m\n",
"\u001b[31mERROR: datascience 0.10.6 has requirement folium==0.2.1, but you'll have folium 0.8.3 which is incompatible.\u001b[0m\n",
"\u001b[31mERROR: albumentations 0.1.12 has requirement imgaug<0.2.7,>=0.2.5, but you'll have imgaug 0.2.9 which is incompatible.\u001b[0m\n",
"Installing collected packages: numpy, opencv-python, scipy, scikit-image\n",
" Found existing installation: numpy 1.18.2\n",
" Uninstalling numpy-1.18.2:\n",
" Successfully uninstalled numpy-1.18.2\n",
" Found existing installation: opencv-python 4.1.2.30\n",
" Uninstalling opencv-python-4.1.2.30:\n",
" Successfully uninstalled opencv-python-4.1.2.30\n",
" Found existing installation: scipy 1.4.1\n",
" Uninstalling scipy-1.4.1:\n",
" Successfully uninstalled scipy-1.4.1\n",
" Found existing installation: scikit-image 0.16.2\n",
" Uninstalling scikit-image-0.16.2:\n",
" Successfully uninstalled scikit-image-0.16.2\n",
"Successfully installed numpy-1.17.0 opencv-python-3.4.5.20 scikit-image-0.14.2 scipy-1.2.1\n"
],
"name": "stdout"
},
{
"output_type": "display_data",
"data": {
"application/vnd.colab-display-data+json": {
"pip_warning": {
"packages": [
"numpy"
]
}
}
},
"metadata": {
"tags": []
}
},
{
"output_type": "stream",
"text": [
"Cloning into 'models'...\n",
"remote: Enumerating objects: 7, done.\u001b[K\n",
"remote: Counting objects: 100% (7/7), done.\u001b[K\n",
"remote: Compressing objects: 100% (7/7), done.\u001b[K\n",
"remote: Total 34173 (delta 0), reused 7 (delta 0), pack-reused 34166\u001b[K\n",
"Receiving objects: 100% (34173/34173), 512.53 MiB | 15.52 MiB/s, done.\n",
"Resolving deltas: 100% (21975/21975), done.\n",
"Checking out files: 100% (2497/2497), done.\n",
"/content/Background-Matting/models/research\n",
"/content/Background-Matting\n"
],
"name": "stdout"
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "RF-HwqOigzx-",
"colab_type": "text"
},
"source": [
"Download model weights for real-fixed-cam and real-hand-held\n"
]
},
{
"cell_type": "code",
"metadata": {
"id": "Vizdn2SjRI4B",
"colab_type": "code",
"outputId": "31974e68-4845-42a5-b9d0-a58261a8c897",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 1000
}
},
"source": [
"!wget https://gist.githubusercontent.com/andreyryabtsev/458f7450c630952d1e75e195f94845a0/raw/0b4336ac2a2140ac2313f9966316467e8cd3002a/download.sh\n",
"!chmod +x download.sh\n",
"!./download.sh"
],
"execution_count": 4,
"outputs": [
{
"output_type": "stream",
"text": [
"--2020-04-19 20:59:30-- https://gist.githubusercontent.com/andreyryabtsev/458f7450c630952d1e75e195f94845a0/raw/0b4336ac2a2140ac2313f9966316467e8cd3002a/download.sh\n",
"Resolving gist.githubusercontent.com (gist.githubusercontent.com)... 151.101.0.133, 151.101.64.133, 151.101.128.133, ...\n",
"Connecting to gist.githubusercontent.com (gist.githubusercontent.com)|151.101.0.133|:443... connected.\n",
"HTTP request sent, awaiting response... 200 OK\n",
"Length: 684 [text/plain]\n",
"Saving to: ‘download.sh’\n",
"\n",
"\rdownload.sh 0%[ ] 0 --.-KB/s \rdownload.sh 100%[===================>] 684 --.-KB/s in 0s \n",
"\n",
"2020-04-19 20:59:30 (44.5 MB/s) - ‘download.sh’ saved [684/684]\n",
"\n",
"--2020-04-19 20:59:40-- https://docs.google.com/uc?export=download&confirm=&id=1yiNsSkPYoBZ55fSQ1iwb1io9QL_PcR2i\n",
"Resolving docs.google.com (docs.google.com)... 74.125.24.113, 74.125.24.100, 74.125.24.102, ...\n",
"Connecting to docs.google.com (docs.google.com)|74.125.24.113|:443... connected.\n",
"HTTP request sent, awaiting response... 302 Moved Temporarily\n",
"Location: https://doc-0s-28-docs.googleusercontent.com/docs/securesc/djie2gf98j6vn63rkk40k139l9eoebk9/1sgbtk6v9p4f303kemnhs4s1iutpuelc/1587329925000/06209756468939988654/01566149718121372371Z/1yiNsSkPYoBZ55fSQ1iwb1io9QL_PcR2i?e=download [following]\n",
"--2020-04-19 20:59:41-- https://doc-0s-28-docs.googleusercontent.com/docs/securesc/djie2gf98j6vn63rkk40k139l9eoebk9/1sgbtk6v9p4f303kemnhs4s1iutpuelc/1587329925000/06209756468939988654/01566149718121372371Z/1yiNsSkPYoBZ55fSQ1iwb1io9QL_PcR2i?e=download\n",
"Resolving doc-0s-28-docs.googleusercontent.com (doc-0s-28-docs.googleusercontent.com)... 74.125.24.132, 2404:6800:4003:c03::84\n",
"Connecting to doc-0s-28-docs.googleusercontent.com (doc-0s-28-docs.googleusercontent.com)|74.125.24.132|:443... connected.\n",
"HTTP request sent, awaiting response... 302 Found\n",
"Location: https://docs.google.com/nonceSigner?nonce=k65a5sh1ieeam&continue=https://doc-0s-28-docs.googleusercontent.com/docs/securesc/djie2gf98j6vn63rkk40k139l9eoebk9/1sgbtk6v9p4f303kemnhs4s1iutpuelc/1587329925000/06209756468939988654/01566149718121372371Z/1yiNsSkPYoBZ55fSQ1iwb1io9QL_PcR2i?e%3Ddownload&hash=gvigvflirl51lohr3464rkmarinl45j2 [following]\n",
"--2020-04-19 20:59:41-- https://docs.google.com/nonceSigner?nonce=k65a5sh1ieeam&continue=https://doc-0s-28-docs.googleusercontent.com/docs/securesc/djie2gf98j6vn63rkk40k139l9eoebk9/1sgbtk6v9p4f303kemnhs4s1iutpuelc/1587329925000/06209756468939988654/01566149718121372371Z/1yiNsSkPYoBZ55fSQ1iwb1io9QL_PcR2i?e%3Ddownload&hash=gvigvflirl51lohr3464rkmarinl45j2\n",
"Connecting to docs.google.com (docs.google.com)|74.125.24.113|:443... connected.\n",
"HTTP request sent, awaiting response... 302 Found\n",
"Location: https://doc-0s-28-docs.googleusercontent.com/docs/securesc/djie2gf98j6vn63rkk40k139l9eoebk9/1sgbtk6v9p4f303kemnhs4s1iutpuelc/1587329925000/06209756468939988654/01566149718121372371Z/1yiNsSkPYoBZ55fSQ1iwb1io9QL_PcR2i?e=download&nonce=k65a5sh1ieeam&user=01566149718121372371Z&hash=ats2c9otvg0e6scjp4vchq5dnp0uk9ub [following]\n",
"--2020-04-19 20:59:43-- https://doc-0s-28-docs.googleusercontent.com/docs/securesc/djie2gf98j6vn63rkk40k139l9eoebk9/1sgbtk6v9p4f303kemnhs4s1iutpuelc/1587329925000/06209756468939988654/01566149718121372371Z/1yiNsSkPYoBZ55fSQ1iwb1io9QL_PcR2i?e=download&nonce=k65a5sh1ieeam&user=01566149718121372371Z&hash=ats2c9otvg0e6scjp4vchq5dnp0uk9ub\n",
"Connecting to doc-0s-28-docs.googleusercontent.com (doc-0s-28-docs.googleusercontent.com)|74.125.24.132|:443... connected.\n",
"HTTP request sent, awaiting response... 200 OK\n",
"Length: unspecified [application/octet-stream]\n",
"Saving to: ‘Models/real-fixed-cam/netG_epoch_12.pth’\n",
"\n",
"Models/real-fixed-c [ <=> ] 68.45M 151MB/s in 0.5s \n",
"\n",
"2020-04-19 20:59:44 (151 MB/s) - ‘Models/real-fixed-cam/netG_epoch_12.pth’ saved [71776356]\n",
"\n",
"--2020-04-19 20:59:48-- https://docs.google.com/uc?export=download&confirm=&id=13HckO9fPAKYocdB_CAC5n8uyM3xQ2MpG\n",
"Resolving docs.google.com (docs.google.com)... 172.217.194.139, 172.217.194.138, 172.217.194.100, ...\n",
"Connecting to docs.google.com (docs.google.com)|172.217.194.139|:443... connected.\n",
"HTTP request sent, awaiting response... 302 Moved Temporarily\n",
"Location: https://doc-10-b4-docs.googleusercontent.com/docs/securesc/b9anh6iqg6uuk3es6gsmik9n2ofu78mm/ta4bodf1s0f5rlrv8h7rl4ik08qg3jm9/1587329925000/06209756468939988654/01124406823184137132Z/13HckO9fPAKYocdB_CAC5n8uyM3xQ2MpG?e=download [following]\n",
"--2020-04-19 20:59:50-- https://doc-10-b4-docs.googleusercontent.com/docs/securesc/b9anh6iqg6uuk3es6gsmik9n2ofu78mm/ta4bodf1s0f5rlrv8h7rl4ik08qg3jm9/1587329925000/06209756468939988654/01124406823184137132Z/13HckO9fPAKYocdB_CAC5n8uyM3xQ2MpG?e=download\n",
"Resolving doc-10-b4-docs.googleusercontent.com (doc-10-b4-docs.googleusercontent.com)... 74.125.24.132, 2404:6800:4003:c03::84\n",
"Connecting to doc-10-b4-docs.googleusercontent.com (doc-10-b4-docs.googleusercontent.com)|74.125.24.132|:443... connected.\n",
"HTTP request sent, awaiting response... 302 Found\n",
"Location: https://docs.google.com/nonceSigner?nonce=d6kmdve334jpa&continue=https://doc-10-b4-docs.googleusercontent.com/docs/securesc/b9anh6iqg6uuk3es6gsmik9n2ofu78mm/ta4bodf1s0f5rlrv8h7rl4ik08qg3jm9/1587329925000/06209756468939988654/01124406823184137132Z/13HckO9fPAKYocdB_CAC5n8uyM3xQ2MpG?e%3Ddownload&hash=qqgsdc4rv5593tlbuga27glqi6u2974o [following]\n",
"--2020-04-19 20:59:51-- https://docs.google.com/nonceSigner?nonce=d6kmdve334jpa&continue=https://doc-10-b4-docs.googleusercontent.com/docs/securesc/b9anh6iqg6uuk3es6gsmik9n2ofu78mm/ta4bodf1s0f5rlrv8h7rl4ik08qg3jm9/1587329925000/06209756468939988654/01124406823184137132Z/13HckO9fPAKYocdB_CAC5n8uyM3xQ2MpG?e%3Ddownload&hash=qqgsdc4rv5593tlbuga27glqi6u2974o\n",
"Connecting to docs.google.com (docs.google.com)|172.217.194.139|:443... connected.\n",
"HTTP request sent, awaiting response... 302 Found\n",
"Location: https://doc-10-b4-docs.googleusercontent.com/docs/securesc/b9anh6iqg6uuk3es6gsmik9n2ofu78mm/ta4bodf1s0f5rlrv8h7rl4ik08qg3jm9/1587329925000/06209756468939988654/01124406823184137132Z/13HckO9fPAKYocdB_CAC5n8uyM3xQ2MpG?e=download&nonce=d6kmdve334jpa&user=01124406823184137132Z&hash=4c763csob6nhgqppqodemf18dusktur7 [following]\n",
"--2020-04-19 20:59:51-- https://doc-10-b4-docs.googleusercontent.com/docs/securesc/b9anh6iqg6uuk3es6gsmik9n2ofu78mm/ta4bodf1s0f5rlrv8h7rl4ik08qg3jm9/1587329925000/06209756468939988654/01124406823184137132Z/13HckO9fPAKYocdB_CAC5n8uyM3xQ2MpG?e=download&nonce=d6kmdve334jpa&user=01124406823184137132Z&hash=4c763csob6nhgqppqodemf18dusktur7\n",
"Connecting to doc-10-b4-docs.googleusercontent.com (doc-10-b4-docs.googleusercontent.com)|74.125.24.132|:443... connected.\n",
"HTTP request sent, awaiting response... 200 OK\n",
"Length: unspecified [application/octet-stream]\n",
"Saving to: ‘Models/real-hand-held/netG_epoch_12.pth’\n",
"\n",
"Models/real-hand-he [ <=> ] 68.45M 254MB/s in 0.3s \n",
"\n",
"2020-04-19 20:59:51 (254 MB/s) - ‘Models/real-hand-held/netG_epoch_12.pth’ saved [71776356]\n",
"\n"
],
"name": "stdout"
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "-bbRkeSfGSF_",
"colab_type": "text"
},
"source": [
"# Running on images"
]
},
{
"cell_type": "code",
"metadata": {
"id": "idU7p6Rzc2lz",
"colab_type": "code",
"colab": {}
},
"source": [
"#Uncomment and run this if you want to skip uploading your images (below) and run on sample_data instead\n",
"\n",
"#cp -r sample_data colab_inputs"
],
"execution_count": 0,
"outputs": []
},
{
"cell_type": "markdown",
"metadata": {
"id": "cPPmkCI6GxXl",
"colab_type": "text"
},
"source": [
"## Upload images"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "p9jYtmorbS3n",
"colab_type": "text"
},
"source": [
"Upload your *foreground images* (similar to https://github.com/senguptaumd/Background-Matting/tree/master/sample_data/input) after running the cell below - they will be saved to `colab_inputs` for processing in further cells. Each image you want matted should be uploaded as `NAME_img.png` and `NAME_back.png` for the respective background. Rerun the cell multiple times if you missed some the first time around."
]
},
{
"cell_type": "code",
"metadata": {
"id": "4KrIw5zaRlld",
"colab_type": "code",
"outputId": "c402e968-281d-4ba0-8077-89c872aac49e",
"colab": {
"resources": {
"http://localhost:8080/nbextensions/google.colab/files.js": {
"data": "Ly8gQ29weXJpZ2h0IDIwMTcgR29vZ2xlIExMQwovLwovLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgovLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLy8KLy8gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLy8KLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQovLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAovLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAovLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KCi8qKgogKiBAZmlsZW92ZXJ2aWV3IEhlbHBlcnMgZm9yIGdvb2dsZS5jb2xhYiBQeXRob24gbW9kdWxlLgogKi8KKGZ1bmN0aW9uKHNjb3BlKSB7CmZ1bmN0aW9uIHNwYW4odGV4dCwgc3R5bGVBdHRyaWJ1dGVzID0ge30pIHsKICBjb25zdCBlbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3BhbicpOwogIGVsZW1lbnQudGV4dENvbnRlbnQgPSB0ZXh0OwogIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKHN0eWxlQXR0cmlidXRlcykpIHsKICAgIGVsZW1lbnQuc3R5bGVba2V5XSA9IHN0eWxlQXR0cmlidXRlc1trZXldOwogIH0KICByZXR1cm4gZWxlbWVudDsKfQoKLy8gTWF4IG51bWJlciBvZiBieXRlcyB3aGljaCB3aWxsIGJlIHVwbG9hZGVkIGF0IGEgdGltZS4KY29uc3QgTUFYX1BBWUxPQURfU0laRSA9IDEwMCAqIDEwMjQ7Ci8vIE1heCBhbW91bnQgb2YgdGltZSB0byBibG9jayB3YWl0aW5nIGZvciB0aGUgdXNlci4KY29uc3QgRklMRV9DSEFOR0VfVElNRU9VVF9NUyA9IDMwICogMTAwMDsKCmZ1bmN0aW9uIF91cGxvYWRGaWxlcyhpbnB1dElkLCBvdXRwdXRJZCkgewogIGNvbnN0IHN0ZXBzID0gdXBsb2FkRmlsZXNTdGVwKGlucHV0SWQsIG91dHB1dElkKTsKICBjb25zdCBvdXRwdXRFbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQob3V0cHV0SWQpOwogIC8vIENhY2hlIHN0ZXBzIG9uIHRoZSBvdXRwdXRFbGVtZW50IHRvIG1ha2UgaXQgYXZhaWxhYmxlIGZvciB0aGUgbmV4dCBjYWxsCiAgLy8gdG8gdXBsb2FkRmlsZXNDb250aW51ZSBmcm9tIFB5dGhvbi4KICBvdXRwdXRFbGVtZW50LnN0ZXBzID0gc3RlcHM7CgogIHJldHVybiBfdXBsb2FkRmlsZXNDb250aW51ZShvdXRwdXRJZCk7Cn0KCi8vIFRoaXMgaXMgcm91Z2hseSBhbiBhc3luYyBnZW5lcmF0b3IgKG5vdCBzdXBwb3J0ZWQgaW4gdGhlIGJyb3dzZXIgeWV0KSwKLy8gd2hlcmUgdGhlcmUgYXJlIG11bHRpcGxlIGFzeW5jaHJvbm91cyBzdGVwcyBhbmQgdGhlIFB5dGhvbiBzaWRlIGlzIGdvaW5nCi8vIHRvIHBvbGwgZm9yIGNvbXBsZXRpb24gb2YgZWFjaCBzdGVwLgovLyBUaGlzIHVzZXMgYSBQcm9taXNlIHRvIGJsb2NrIHRoZSBweXRob24gc2lkZSBvbiBjb21wbGV0aW9uIG9mIGVhY2ggc3RlcCwKLy8gdGhlbiBwYXNzZXMgdGhlIHJlc3VsdCBvZiB0aGUgcHJldmlvdXMgc3RlcCBhcyB0aGUgaW5wdXQgdG8gdGhlIG5leHQgc3RlcC4KZnVuY3Rpb24gX3VwbG9hZEZpbGVzQ29udGludWUob3V0cHV0SWQpIHsKICBjb25zdCBvdXRwdXRFbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQob3V0cHV0SWQpOwogIGNvbnN0IHN0ZXBzID0gb3V0cHV0RWxlbWVudC5zdGVwczsKCiAgY29uc3QgbmV4dCA9IHN0ZXBzLm5leHQob3V0cHV0RWxlbWVudC5sYXN0UHJvbWlzZVZhbHVlKTsKICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG5leHQudmFsdWUucHJvbWlzZSkudGhlbigodmFsdWUpID0+IHsKICAgIC8vIENhY2hlIHRoZSBsYXN0IHByb21pc2UgdmFsdWUgdG8gbWFrZSBpdCBhdmFpbGFibGUgdG8gdGhlIG5leHQKICAgIC8vIHN0ZXAgb2YgdGhlIGdlbmVyYXRvci4KICAgIG91dHB1dEVsZW1lbnQubGFzdFByb21pc2VWYWx1ZSA9IHZhbHVlOwogICAgcmV0dXJuIG5leHQudmFsdWUucmVzcG9uc2U7CiAgfSk7Cn0KCi8qKgogKiBHZW5lcmF0b3IgZnVuY3Rpb24gd2hpY2ggaXMgY2FsbGVkIGJldHdlZW4gZWFjaCBhc3luYyBzdGVwIG9mIHRoZSB1cGxvYWQKICogcHJvY2Vzcy4KICogQHBhcmFtIHtzdHJpbmd9IGlucHV0SWQgRWxlbWVudCBJRCBvZiB0aGUgaW5wdXQgZmlsZSBwaWNrZXIgZWxlbWVudC4KICogQHBhcmFtIHtzdHJpbmd9IG91dHB1dElkIEVsZW1lbnQgSUQgb2YgdGhlIG91dHB1dCBkaXNwbGF5LgogKiBAcmV0dXJuIHshSXRlcmFibGU8IU9iamVjdD59IEl0ZXJhYmxlIG9mIG5leHQgc3RlcHMuCiAqLwpmdW5jdGlvbiogdXBsb2FkRmlsZXNTdGVwKGlucHV0SWQsIG91dHB1dElkKSB7CiAgY29uc3QgaW5wdXRFbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaW5wdXRJZCk7CiAgaW5wdXRFbGVtZW50LmRpc2FibGVkID0gZmFsc2U7CgogIGNvbnN0IG91dHB1dEVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChvdXRwdXRJZCk7CiAgb3V0cHV0RWxlbWVudC5pbm5lckhUTUwgPSAnJzsKCiAgY29uc3QgcGlja2VkUHJvbWlzZSA9IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7CiAgICBpbnB1dEVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgKGUpID0+IHsKICAgICAgcmVzb2x2ZShlLnRhcmdldC5maWxlcyk7CiAgICB9KTsKICB9KTsKCiAgY29uc3QgY2FuY2VsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYnV0dG9uJyk7CiAgaW5wdXRFbGVtZW50LnBhcmVudEVsZW1lbnQuYXBwZW5kQ2hpbGQoY2FuY2VsKTsKICBjYW5jZWwudGV4dENvbnRlbnQgPSAnQ2FuY2VsIHVwbG9hZCc7CiAgY29uc3QgY2FuY2VsUHJvbWlzZSA9IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7CiAgICBjYW5jZWwub25jbGljayA9ICgpID0+IHsKICAgICAgcmVzb2x2ZShudWxsKTsKICAgIH07CiAgfSk7CgogIC8vIENhbmNlbCB1cGxvYWQgaWYgdXNlciBoYXNuJ3QgcGlja2VkIGFueXRoaW5nIGluIHRpbWVvdXQuCiAgY29uc3QgdGltZW91dFByb21pc2UgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4gewogICAgc2V0VGltZW91dCgoKSA9PiB7CiAgICAgIHJlc29sdmUobnVsbCk7CiAgICB9LCBGSUxFX0NIQU5HRV9USU1FT1VUX01TKTsKICB9KTsKCiAgLy8gV2FpdCBmb3IgdGhlIHVzZXIgdG8gcGljayB0aGUgZmlsZXMuCiAgY29uc3QgZmlsZXMgPSB5aWVsZCB7CiAgICBwcm9taXNlOiBQcm9taXNlLnJhY2UoW3BpY2tlZFByb21pc2UsIHRpbWVvdXRQcm9taXNlLCBjYW5jZWxQcm9taXNlXSksCiAgICByZXNwb25zZTogewogICAgICBhY3Rpb246ICdzdGFydGluZycsCiAgICB9CiAgfTsKCiAgaWYgKCFmaWxlcykgewogICAgcmV0dXJuIHsKICAgICAgcmVzcG9uc2U6IHsKICAgICAgICBhY3Rpb246ICdjb21wbGV0ZScsCiAgICAgIH0KICAgIH07CiAgfQoKICBjYW5jZWwucmVtb3ZlKCk7CgogIC8vIERpc2FibGUgdGhlIGlucHV0IGVsZW1lbnQgc2luY2UgZnVydGhlciBwaWNrcyBhcmUgbm90IGFsbG93ZWQuCiAgaW5wdXRFbGVtZW50LmRpc2FibGVkID0gdHJ1ZTsKCiAgZm9yIChjb25zdCBmaWxlIG9mIGZpbGVzKSB7CiAgICBjb25zdCBsaSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2xpJyk7CiAgICBsaS5hcHBlbmQoc3BhbihmaWxlLm5hbWUsIHtmb250V2VpZ2h0OiAnYm9sZCd9KSk7CiAgICBsaS5hcHBlbmQoc3BhbigKICAgICAgICBgKCR7ZmlsZS50eXBlIHx8ICduL2EnfSkgLSAke2ZpbGUuc2l6ZX0gYnl0ZXMsIGAgKwogICAgICAgIGBsYXN0IG1vZGlmaWVkOiAkewogICAgICAgICAgICBmaWxlLmxhc3RNb2RpZmllZERhdGUgPyBmaWxlLmxhc3RNb2RpZmllZERhdGUudG9Mb2NhbGVEYXRlU3RyaW5nKCkgOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbi9hJ30gLSBgKSk7CiAgICBjb25zdCBwZXJjZW50ID0gc3BhbignMCUgZG9uZScpOwogICAgbGkuYXBwZW5kQ2hpbGQocGVyY2VudCk7CgogICAgb3V0cHV0RWxlbWVudC5hcHBlbmRDaGlsZChsaSk7CgogICAgY29uc3QgZmlsZURhdGFQcm9taXNlID0gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHsKICAgICAgY29uc3QgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTsKICAgICAgcmVhZGVyLm9ubG9hZCA9IChlKSA9PiB7CiAgICAgICAgcmVzb2x2ZShlLnRhcmdldC5yZXN1bHQpOwogICAgICB9OwogICAgICByZWFkZXIucmVhZEFzQXJyYXlCdWZmZXIoZmlsZSk7CiAgICB9KTsKICAgIC8vIFdhaXQgZm9yIHRoZSBkYXRhIHRvIGJlIHJlYWR5LgogICAgbGV0IGZpbGVEYXRhID0geWllbGQgewogICAgICBwcm9taXNlOiBmaWxlRGF0YVByb21pc2UsCiAgICAgIHJlc3BvbnNlOiB7CiAgICAgICAgYWN0aW9uOiAnY29udGludWUnLAogICAgICB9CiAgICB9OwoKICAgIC8vIFVzZSBhIGNodW5rZWQgc2VuZGluZyB0byBhdm9pZCBtZXNzYWdlIHNpemUgbGltaXRzLiBTZWUgYi82MjExNTY2MC4KICAgIGxldCBwb3NpdGlvbiA9IDA7CiAgICB3aGlsZSAocG9zaXRpb24gPCBmaWxlRGF0YS5ieXRlTGVuZ3RoKSB7CiAgICAgIGNvbnN0IGxlbmd0aCA9IE1hdGgubWluKGZpbGVEYXRhLmJ5dGVMZW5ndGggLSBwb3NpdGlvbiwgTUFYX1BBWUxPQURfU0laRSk7CiAgICAgIGNvbnN0IGNodW5rID0gbmV3IFVpbnQ4QXJyYXkoZmlsZURhdGEsIHBvc2l0aW9uLCBsZW5ndGgpOwogICAgICBwb3NpdGlvbiArPSBsZW5ndGg7CgogICAgICBjb25zdCBiYXNlNjQgPSBidG9hKFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkobnVsbCwgY2h1bmspKTsKICAgICAgeWllbGQgewogICAgICAgIHJlc3BvbnNlOiB7CiAgICAgICAgICBhY3Rpb246ICdhcHBlbmQnLAogICAgICAgICAgZmlsZTogZmlsZS5uYW1lLAogICAgICAgICAgZGF0YTogYmFzZTY0LAogICAgICAgIH0sCiAgICAgIH07CiAgICAgIHBlcmNlbnQudGV4dENvbnRlbnQgPQogICAgICAgICAgYCR7TWF0aC5yb3VuZCgocG9zaXRpb24gLyBmaWxlRGF0YS5ieXRlTGVuZ3RoKSAqIDEwMCl9JSBkb25lYDsKICAgIH0KICB9CgogIC8vIEFsbCBkb25lLgogIHlpZWxkIHsKICAgIHJlc3BvbnNlOiB7CiAgICAgIGFjdGlvbjogJ2NvbXBsZXRlJywKICAgIH0KICB9Owp9CgpzY29wZS5nb29nbGUgPSBzY29wZS5nb29nbGUgfHwge307CnNjb3BlLmdvb2dsZS5jb2xhYiA9IHNjb3BlLmdvb2dsZS5jb2xhYiB8fCB7fTsKc2NvcGUuZ29vZ2xlLmNvbGFiLl9maWxlcyA9IHsKICBfdXBsb2FkRmlsZXMsCiAgX3VwbG9hZEZpbGVzQ29udGludWUsCn07Cn0pKHNlbGYpOwo=",
"ok": true,
"headers": [
[
"content-type",
"application/javascript"
]
],
"status": 200,
"status_text": ""
}
},
"base_uri": "https://localhost:8080/",
"height": 482
}
},
"source": [
"!mkdir -p colab_inputs/input\n",
"%cd colab_inputs/input\n",
"from google.colab import files\n",
"uploaded = files.upload()\n",
"for filename in uploaded.keys():\n",
" print('User uploaded file \"{name}\" with {length} bytes'.format(name=filename, length=len(uploaded[filename])))\n",
"%cd ../.."
],
"execution_count": 0,
"outputs": [
{
"output_type": "stream",
"text": [
"/content/Background-Matting/colab_inputs/input\n"
],
"name": "stdout"
},
{
"output_type": "display_data",
"data": {
"text/html": [
"\n",
" <input type=\"file\" id=\"files-e32fd34a-bf16-42c1-8fc4-5c350ca8a389\" name=\"files[]\" multiple disabled />\n",
" <output id=\"result-e32fd34a-bf16-42c1-8fc4-5c350ca8a389\">\n",
" Upload widget is only available when the cell has been executed in the\n",
" current browser session. Please rerun this cell to enable.\n",
" </output>\n",
" <script src=\"/nbextensions/google.colab/files.js\"></script> "
],
"text/plain": [
"<IPython.core.display.HTML object>"
]
},
"metadata": {
"tags": []
}
},
{
"output_type": "stream",
"text": [
"Saving 1500_img.png to 1500_img.png\n",
"Saving 1500_back.png to 1500_back.png\n",
"Saving 1000_img.png to 1000_img.png\n",
"Saving 1000_back.png to 1000_back.png\n",
"Saving 0500_img.png to 0500_img.png\n",
"Saving 0500_back.png to 0500_back.png\n",
"Saving 0001_img.png to 0001_img.png\n",
"Saving 0001_back.png to 0001_back.png\n",
"User uploaded file \"1500_img.png\" with 3044106 bytes\n",
"User uploaded file \"1500_back.png\" with 2170053 bytes\n",
"User uploaded file \"1000_img.png\" with 3474001 bytes\n",
"User uploaded file \"1000_back.png\" with 2170053 bytes\n",
"User uploaded file \"0500_img.png\" with 3341550 bytes\n",
"User uploaded file \"0500_back.png\" with 2170053 bytes\n",
"User uploaded file \"0001_img.png\" with 3047998 bytes\n",
"User uploaded file \"0001_back.png\" with 2170053 bytes\n",
"/content/Background-Matting\n"
],
"name": "stdout"
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "36Nbg6aFdaAb",
"colab_type": "text"
},
"source": [
"Upload your *target background images* (similar to https://github.com/senguptaumd/Background-Matting/tree/master/sample_data/background) after running the cell below. You can choose the target background to use by name later.\n"
]
},
{
"cell_type": "code",
"metadata": {
"id": "6DzxZSFISbub",
"colab_type": "code",
"outputId": "f2171597-a7aa-409c-e4e1-c9f72a557cea",
"colab": {
"resources": {
"http://localhost:8080/nbextensions/google.colab/files.js": {
"data": "Ly8gQ29weXJpZ2h0IDIwMTcgR29vZ2xlIExMQwovLwovLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgovLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLy8KLy8gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLy8KLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQovLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAovLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAovLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KCi8qKgogKiBAZmlsZW92ZXJ2aWV3IEhlbHBlcnMgZm9yIGdvb2dsZS5jb2xhYiBQeXRob24gbW9kdWxlLgogKi8KKGZ1bmN0aW9uKHNjb3BlKSB7CmZ1bmN0aW9uIHNwYW4odGV4dCwgc3R5bGVBdHRyaWJ1dGVzID0ge30pIHsKICBjb25zdCBlbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3BhbicpOwogIGVsZW1lbnQudGV4dENvbnRlbnQgPSB0ZXh0OwogIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKHN0eWxlQXR0cmlidXRlcykpIHsKICAgIGVsZW1lbnQuc3R5bGVba2V5XSA9IHN0eWxlQXR0cmlidXRlc1trZXldOwogIH0KICByZXR1cm4gZWxlbWVudDsKfQoKLy8gTWF4IG51bWJlciBvZiBieXRlcyB3aGljaCB3aWxsIGJlIHVwbG9hZGVkIGF0IGEgdGltZS4KY29uc3QgTUFYX1BBWUxPQURfU0laRSA9IDEwMCAqIDEwMjQ7Ci8vIE1heCBhbW91bnQgb2YgdGltZSB0byBibG9jayB3YWl0aW5nIGZvciB0aGUgdXNlci4KY29uc3QgRklMRV9DSEFOR0VfVElNRU9VVF9NUyA9IDMwICogMTAwMDsKCmZ1bmN0aW9uIF91cGxvYWRGaWxlcyhpbnB1dElkLCBvdXRwdXRJZCkgewogIGNvbnN0IHN0ZXBzID0gdXBsb2FkRmlsZXNTdGVwKGlucHV0SWQsIG91dHB1dElkKTsKICBjb25zdCBvdXRwdXRFbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQob3V0cHV0SWQpOwogIC8vIENhY2hlIHN0ZXBzIG9uIHRoZSBvdXRwdXRFbGVtZW50IHRvIG1ha2UgaXQgYXZhaWxhYmxlIGZvciB0aGUgbmV4dCBjYWxsCiAgLy8gdG8gdXBsb2FkRmlsZXNDb250aW51ZSBmcm9tIFB5dGhvbi4KICBvdXRwdXRFbGVtZW50LnN0ZXBzID0gc3RlcHM7CgogIHJldHVybiBfdXBsb2FkRmlsZXNDb250aW51ZShvdXRwdXRJZCk7Cn0KCi8vIFRoaXMgaXMgcm91Z2hseSBhbiBhc3luYyBnZW5lcmF0b3IgKG5vdCBzdXBwb3J0ZWQgaW4gdGhlIGJyb3dzZXIgeWV0KSwKLy8gd2hlcmUgdGhlcmUgYXJlIG11bHRpcGxlIGFzeW5jaHJvbm91cyBzdGVwcyBhbmQgdGhlIFB5dGhvbiBzaWRlIGlzIGdvaW5nCi8vIHRvIHBvbGwgZm9yIGNvbXBsZXRpb24gb2YgZWFjaCBzdGVwLgovLyBUaGlzIHVzZXMgYSBQcm9taXNlIHRvIGJsb2NrIHRoZSBweXRob24gc2lkZSBvbiBjb21wbGV0aW9uIG9mIGVhY2ggc3RlcCwKLy8gdGhlbiBwYXNzZXMgdGhlIHJlc3VsdCBvZiB0aGUgcHJldmlvdXMgc3RlcCBhcyB0aGUgaW5wdXQgdG8gdGhlIG5leHQgc3RlcC4KZnVuY3Rpb24gX3VwbG9hZEZpbGVzQ29udGludWUob3V0cHV0SWQpIHsKICBjb25zdCBvdXRwdXRFbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQob3V0cHV0SWQpOwogIGNvbnN0IHN0ZXBzID0gb3V0cHV0RWxlbWVudC5zdGVwczsKCiAgY29uc3QgbmV4dCA9IHN0ZXBzLm5leHQob3V0cHV0RWxlbWVudC5sYXN0UHJvbWlzZVZhbHVlKTsKICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG5leHQudmFsdWUucHJvbWlzZSkudGhlbigodmFsdWUpID0+IHsKICAgIC8vIENhY2hlIHRoZSBsYXN0IHByb21pc2UgdmFsdWUgdG8gbWFrZSBpdCBhdmFpbGFibGUgdG8gdGhlIG5leHQKICAgIC8vIHN0ZXAgb2YgdGhlIGdlbmVyYXRvci4KICAgIG91dHB1dEVsZW1lbnQubGFzdFByb21pc2VWYWx1ZSA9IHZhbHVlOwogICAgcmV0dXJuIG5leHQudmFsdWUucmVzcG9uc2U7CiAgfSk7Cn0KCi8qKgogKiBHZW5lcmF0b3IgZnVuY3Rpb24gd2hpY2ggaXMgY2FsbGVkIGJldHdlZW4gZWFjaCBhc3luYyBzdGVwIG9mIHRoZSB1cGxvYWQKICogcHJvY2Vzcy4KICogQHBhcmFtIHtzdHJpbmd9IGlucHV0SWQgRWxlbWVudCBJRCBvZiB0aGUgaW5wdXQgZmlsZSBwaWNrZXIgZWxlbWVudC4KICogQHBhcmFtIHtzdHJpbmd9IG91dHB1dElkIEVsZW1lbnQgSUQgb2YgdGhlIG91dHB1dCBkaXNwbGF5LgogKiBAcmV0dXJuIHshSXRlcmFibGU8IU9iamVjdD59IEl0ZXJhYmxlIG9mIG5leHQgc3RlcHMuCiAqLwpmdW5jdGlvbiogdXBsb2FkRmlsZXNTdGVwKGlucHV0SWQsIG91dHB1dElkKSB7CiAgY29uc3QgaW5wdXRFbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaW5wdXRJZCk7CiAgaW5wdXRFbGVtZW50LmRpc2FibGVkID0gZmFsc2U7CgogIGNvbnN0IG91dHB1dEVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChvdXRwdXRJZCk7CiAgb3V0cHV0RWxlbWVudC5pbm5lckhUTUwgPSAnJzsKCiAgY29uc3QgcGlja2VkUHJvbWlzZSA9IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7CiAgICBpbnB1dEVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgKGUpID0+IHsKICAgICAgcmVzb2x2ZShlLnRhcmdldC5maWxlcyk7CiAgICB9KTsKICB9KTsKCiAgY29uc3QgY2FuY2VsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYnV0dG9uJyk7CiAgaW5wdXRFbGVtZW50LnBhcmVudEVsZW1lbnQuYXBwZW5kQ2hpbGQoY2FuY2VsKTsKICBjYW5jZWwudGV4dENvbnRlbnQgPSAnQ2FuY2VsIHVwbG9hZCc7CiAgY29uc3QgY2FuY2VsUHJvbWlzZSA9IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7CiAgICBjYW5jZWwub25jbGljayA9ICgpID0+IHsKICAgICAgcmVzb2x2ZShudWxsKTsKICAgIH07CiAgfSk7CgogIC8vIENhbmNlbCB1cGxvYWQgaWYgdXNlciBoYXNuJ3QgcGlja2VkIGFueXRoaW5nIGluIHRpbWVvdXQuCiAgY29uc3QgdGltZW91dFByb21pc2UgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4gewogICAgc2V0VGltZW91dCgoKSA9PiB7CiAgICAgIHJlc29sdmUobnVsbCk7CiAgICB9LCBGSUxFX0NIQU5HRV9USU1FT1VUX01TKTsKICB9KTsKCiAgLy8gV2FpdCBmb3IgdGhlIHVzZXIgdG8gcGljayB0aGUgZmlsZXMuCiAgY29uc3QgZmlsZXMgPSB5aWVsZCB7CiAgICBwcm9taXNlOiBQcm9taXNlLnJhY2UoW3BpY2tlZFByb21pc2UsIHRpbWVvdXRQcm9taXNlLCBjYW5jZWxQcm9taXNlXSksCiAgICByZXNwb25zZTogewogICAgICBhY3Rpb246ICdzdGFydGluZycsCiAgICB9CiAgfTsKCiAgaWYgKCFmaWxlcykgewogICAgcmV0dXJuIHsKICAgICAgcmVzcG9uc2U6IHsKICAgICAgICBhY3Rpb246ICdjb21wbGV0ZScsCiAgICAgIH0KICAgIH07CiAgfQoKICBjYW5jZWwucmVtb3ZlKCk7CgogIC8vIERpc2FibGUgdGhlIGlucHV0IGVsZW1lbnQgc2luY2UgZnVydGhlciBwaWNrcyBhcmUgbm90IGFsbG93ZWQuCiAgaW5wdXRFbGVtZW50LmRpc2FibGVkID0gdHJ1ZTsKCiAgZm9yIChjb25zdCBmaWxlIG9mIGZpbGVzKSB7CiAgICBjb25zdCBsaSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2xpJyk7CiAgICBsaS5hcHBlbmQoc3BhbihmaWxlLm5hbWUsIHtmb250V2VpZ2h0OiAnYm9sZCd9KSk7CiAgICBsaS5hcHBlbmQoc3BhbigKICAgICAgICBgKCR7ZmlsZS50eXBlIHx8ICduL2EnfSkgLSAke2ZpbGUuc2l6ZX0gYnl0ZXMsIGAgKwogICAgICAgIGBsYXN0IG1vZGlmaWVkOiAkewogICAgICAgICAgICBmaWxlLmxhc3RNb2RpZmllZERhdGUgPyBmaWxlLmxhc3RNb2RpZmllZERhdGUudG9Mb2NhbGVEYXRlU3RyaW5nKCkgOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbi9hJ30gLSBgKSk7CiAgICBjb25zdCBwZXJjZW50ID0gc3BhbignMCUgZG9uZScpOwogICAgbGkuYXBwZW5kQ2hpbGQocGVyY2VudCk7CgogICAgb3V0cHV0RWxlbWVudC5hcHBlbmRDaGlsZChsaSk7CgogICAgY29uc3QgZmlsZURhdGFQcm9taXNlID0gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHsKICAgICAgY29uc3QgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTsKICAgICAgcmVhZGVyLm9ubG9hZCA9IChlKSA9PiB7CiAgICAgICAgcmVzb2x2ZShlLnRhcmdldC5yZXN1bHQpOwogICAgICB9OwogICAgICByZWFkZXIucmVhZEFzQXJyYXlCdWZmZXIoZmlsZSk7CiAgICB9KTsKICAgIC8vIFdhaXQgZm9yIHRoZSBkYXRhIHRvIGJlIHJlYWR5LgogICAgbGV0IGZpbGVEYXRhID0geWllbGQgewogICAgICBwcm9taXNlOiBmaWxlRGF0YVByb21pc2UsCiAgICAgIHJlc3BvbnNlOiB7CiAgICAgICAgYWN0aW9uOiAnY29udGludWUnLAogICAgICB9CiAgICB9OwoKICAgIC8vIFVzZSBhIGNodW5rZWQgc2VuZGluZyB0byBhdm9pZCBtZXNzYWdlIHNpemUgbGltaXRzLiBTZWUgYi82MjExNTY2MC4KICAgIGxldCBwb3NpdGlvbiA9IDA7CiAgICB3aGlsZSAocG9zaXRpb24gPCBmaWxlRGF0YS5ieXRlTGVuZ3RoKSB7CiAgICAgIGNvbnN0IGxlbmd0aCA9IE1hdGgubWluKGZpbGVEYXRhLmJ5dGVMZW5ndGggLSBwb3NpdGlvbiwgTUFYX1BBWUxPQURfU0laRSk7CiAgICAgIGNvbnN0IGNodW5rID0gbmV3IFVpbnQ4QXJyYXkoZmlsZURhdGEsIHBvc2l0aW9uLCBsZW5ndGgpOwogICAgICBwb3NpdGlvbiArPSBsZW5ndGg7CgogICAgICBjb25zdCBiYXNlNjQgPSBidG9hKFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkobnVsbCwgY2h1bmspKTsKICAgICAgeWllbGQgewogICAgICAgIHJlc3BvbnNlOiB7CiAgICAgICAgICBhY3Rpb246ICdhcHBlbmQnLAogICAgICAgICAgZmlsZTogZmlsZS5uYW1lLAogICAgICAgICAgZGF0YTogYmFzZTY0LAogICAgICAgIH0sCiAgICAgIH07CiAgICAgIHBlcmNlbnQudGV4dENvbnRlbnQgPQogICAgICAgICAgYCR7TWF0aC5yb3VuZCgocG9zaXRpb24gLyBmaWxlRGF0YS5ieXRlTGVuZ3RoKSAqIDEwMCl9JSBkb25lYDsKICAgIH0KICB9CgogIC8vIEFsbCBkb25lLgogIHlpZWxkIHsKICAgIHJlc3BvbnNlOiB7CiAgICAgIGFjdGlvbjogJ2NvbXBsZXRlJywKICAgIH0KICB9Owp9CgpzY29wZS5nb29nbGUgPSBzY29wZS5nb29nbGUgfHwge307CnNjb3BlLmdvb2dsZS5jb2xhYiA9IHNjb3BlLmdvb2dsZS5jb2xhYiB8fCB7fTsKc2NvcGUuZ29vZ2xlLmNvbGFiLl9maWxlcyA9IHsKICBfdXBsb2FkRmlsZXMsCiAgX3VwbG9hZEZpbGVzQ29udGludWUsCn07Cn0pKHNlbGYpOwo=",
"ok": true,
"headers": [
[
"content-type",
"application/javascript"
]
],
"status": 200,
"status_text": ""
}
},
"base_uri": "https://localhost:8080/",
"height": 176
}
},
"source": [
"!mkdir -p colab_inputs/background\n",
"%cd colab_inputs/background\n",
"uploaded = files.upload()\n",
"for filename in uploaded.keys():\n",
" print('User uploaded file \"{name}\" with {length} bytes'.format(name=filename, length=len(uploaded[filename])))\n",
"%cd ../.."
],
"execution_count": 0,
"outputs": [
{
"output_type": "stream",
"text": [
"/content/Background-Matting/colab_inputs/background\n"
],
"name": "stdout"
},
{
"output_type": "display_data",
"data": {
"text/html": [
"\n",
" <input type=\"file\" id=\"files-4b2b2e3f-79c7-4e7a-ab2e-328b77821ef7\" name=\"files[]\" multiple disabled />\n",
" <output id=\"result-4b2b2e3f-79c7-4e7a-ab2e-328b77821ef7\">\n",
" Upload widget is only available when the cell has been executed in the\n",
" current browser session. Please rerun this cell to enable.\n",
" </output>\n",
" <script src=\"/nbextensions/google.colab/files.js\"></script> "
],
"text/plain": [
"<IPython.core.display.HTML object>"
]
},
"metadata": {
"tags": []
}
},
{
"output_type": "stream",
"text": [
"Saving 0002.png to 0002.png\n",
"Saving 0001.png to 0001.png\n",
"User uploaded file \"0002.png\" with 2409622 bytes\n",
"User uploaded file \"0001.png\" with 2094024 bytes\n",
"/content/Background-Matting\n"
],
"name": "stdout"
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "WYXnuvNRIsYH",
"colab_type": "text"
},
"source": [
"##Process images"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "q2_eLEExd0IZ",
"colab_type": "text"
},
"source": [
"Run segmentation\n"
]
},
{
"cell_type": "code",
"metadata": {
"id": "xftUAfuTTh-p",
"colab_type": "code",
"outputId": "232ea61b-155f-461c-8d7f-7a32e40e00dd",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 1000
}
},
"source": [
"!python3 test_segmentation_deeplab.py -i colab_inputs/input\n"
],
"execution_count": 0,
"outputs": [
{
"output_type": "stream",
"text": [
"/usr/local/lib/python3.6/dist-packages/tensorflow/python/framework/dtypes.py:516: FutureWarning: Passing (type, 1) or '1type' as a synonym of type is deprecated; in a future version of numpy, it will be understood as (type, (1,)) / '(1,)type'.\n",
" _np_qint8 = np.dtype([(\"qint8\", np.int8, 1)])\n",
"/usr/local/lib/python3.6/dist-packages/tensorflow/python/framework/dtypes.py:517: FutureWarning: Passing (type, 1) or '1type' as a synonym of type is deprecated; in a future version of numpy, it will be understood as (type, (1,)) / '(1,)type'.\n",
" _np_quint8 = np.dtype([(\"quint8\", np.uint8, 1)])\n",
"/usr/local/lib/python3.6/dist-packages/tensorflow/python/framework/dtypes.py:518: FutureWarning: Passing (type, 1) or '1type' as a synonym of type is deprecated; in a future version of numpy, it will be understood as (type, (1,)) / '(1,)type'.\n",
" _np_qint16 = np.dtype([(\"qint16\", np.int16, 1)])\n",
"/usr/local/lib/python3.6/dist-packages/tensorflow/python/framework/dtypes.py:519: FutureWarning: Passing (type, 1) or '1type' as a synonym of type is deprecated; in a future version of numpy, it will be understood as (type, (1,)) / '(1,)type'.\n",
" _np_quint16 = np.dtype([(\"quint16\", np.uint16, 1)])\n",
"/usr/local/lib/python3.6/dist-packages/tensorflow/python/framework/dtypes.py:520: FutureWarning: Passing (type, 1) or '1type' as a synonym of type is deprecated; in a future version of numpy, it will be understood as (type, (1,)) / '(1,)type'.\n",
" _np_qint32 = np.dtype([(\"qint32\", np.int32, 1)])\n",
"/usr/local/lib/python3.6/dist-packages/tensorflow/python/framework/dtypes.py:525: FutureWarning: Passing (type, 1) or '1type' as a synonym of type is deprecated; in a future version of numpy, it will be understood as (type, (1,)) / '(1,)type'.\n",
" np_resource = np.dtype([(\"resource\", np.ubyte, 1)])\n",
"/usr/local/lib/python3.6/dist-packages/tensorboard/compat/tensorflow_stub/dtypes.py:541: FutureWarning: Passing (type, 1) or '1type' as a synonym of type is deprecated; in a future version of numpy, it will be understood as (type, (1,)) / '(1,)type'.\n",
" _np_qint8 = np.dtype([(\"qint8\", np.int8, 1)])\n",
"/usr/local/lib/python3.6/dist-packages/tensorboard/compat/tensorflow_stub/dtypes.py:542: FutureWarning: Passing (type, 1) or '1type' as a synonym of type is deprecated; in a future version of numpy, it will be understood as (type, (1,)) / '(1,)type'.\n",
" _np_quint8 = np.dtype([(\"quint8\", np.uint8, 1)])\n",
"/usr/local/lib/python3.6/dist-packages/tensorboard/compat/tensorflow_stub/dtypes.py:543: FutureWarning: Passing (type, 1) or '1type' as a synonym of type is deprecated; in a future version of numpy, it will be understood as (type, (1,)) / '(1,)type'.\n",
" _np_qint16 = np.dtype([(\"qint16\", np.int16, 1)])\n",
"/usr/local/lib/python3.6/dist-packages/tensorboard/compat/tensorflow_stub/dtypes.py:544: FutureWarning: Passing (type, 1) or '1type' as a synonym of type is deprecated; in a future version of numpy, it will be understood as (type, (1,)) / '(1,)type'.\n",
" _np_quint16 = np.dtype([(\"quint16\", np.uint16, 1)])\n",
"/usr/local/lib/python3.6/dist-packages/tensorboard/compat/tensorflow_stub/dtypes.py:545: FutureWarning: Passing (type, 1) or '1type' as a synonym of type is deprecated; in a future version of numpy, it will be understood as (type, (1,)) / '(1,)type'.\n",
" _np_qint32 = np.dtype([(\"qint32\", np.int32, 1)])\n",
"/usr/local/lib/python3.6/dist-packages/tensorboard/compat/tensorflow_stub/dtypes.py:550: FutureWarning: Passing (type, 1) or '1type' as a synonym of type is deprecated; in a future version of numpy, it will be understood as (type, (1,)) / '(1,)type'.\n",
" np_resource = np.dtype([(\"resource\", np.ubyte, 1)])\n",
"WARNING:tensorflow:From test_segmentation_deeplab.py:144: The name tf.gfile.MakeDirs is deprecated. Please use tf.io.gfile.makedirs instead.\n",
"\n",
"downloading model to deeplab_model/deeplabv3_pascal_trainval_2018_01_04.tar.gz, this might take a while...\n",
"download completed! loading DeepLab model...\n",
"WARNING:tensorflow:From test_segmentation_deeplab.py:32: The name tf.GraphDef is deprecated. Please use tf.compat.v1.GraphDef instead.\n",
"\n",
"WARNING:tensorflow:From test_segmentation_deeplab.py:43: The name tf.Session is deprecated. Please use tf.compat.v1.Session instead.\n",
"\n",
"2020-04-19 04:00:21.887805: I tensorflow/stream_executor/platform/default/dso_loader.cc:42] Successfully opened dynamic library libcuda.so.1\n",
"2020-04-19 04:00:21.940900: I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:1005] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero\n",
"2020-04-19 04:00:21.941906: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1640] Found device 0 with properties: \n",
"name: Tesla P100-PCIE-16GB major: 6 minor: 0 memoryClockRate(GHz): 1.3285\n",
"pciBusID: 0000:00:04.0\n",
"2020-04-19 04:00:21.958742: I tensorflow/stream_executor/platform/default/dso_loader.cc:42] Successfully opened dynamic library libcudart.so.10.0\n",
"2020-04-19 04:00:22.141735: I tensorflow/stream_executor/platform/default/dso_loader.cc:42] Successfully opened dynamic library libcublas.so.10.0\n",
"2020-04-19 04:00:22.234863: I tensorflow/stream_executor/platform/default/dso_loader.cc:42] Successfully opened dynamic library libcufft.so.10.0\n",
"2020-04-19 04:00:22.262353: I tensorflow/stream_executor/platform/default/dso_loader.cc:42] Successfully opened dynamic library libcurand.so.10.0\n",
"2020-04-19 04:00:22.511497: I tensorflow/stream_executor/platform/default/dso_loader.cc:42] Successfully opened dynamic library libcusolver.so.10.0\n",
"2020-04-19 04:00:22.638392: I tensorflow/stream_executor/platform/default/dso_loader.cc:42] Successfully opened dynamic library libcusparse.so.10.0\n",
"2020-04-19 04:00:23.141687: I tensorflow/stream_executor/platform/default/dso_loader.cc:42] Successfully opened dynamic library libcudnn.so.7\n",
"2020-04-19 04:00:23.141922: I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:1005] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero\n",
"2020-04-19 04:00:23.142999: I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:1005] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero\n",
"2020-04-19 04:00:23.143894: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1763] Adding visible gpu devices: 0\n",
"2020-04-19 04:00:23.144378: I tensorflow/core/platform/cpu_feature_guard.cc:142] Your CPU supports instructions that this TensorFlow binary was not compiled to use: AVX2 FMA\n",
"2020-04-19 04:00:23.269389: I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:1005] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero\n",
"2020-04-19 04:00:23.270526: I tensorflow/compiler/xla/service/service.cc:168] XLA service 0x29ed2c0 executing computations on platform CUDA. Devices:\n",
"2020-04-19 04:00:23.270559: I tensorflow/compiler/xla/service/service.cc:175] StreamExecutor device (0): Tesla P100-PCIE-16GB, Compute Capability 6.0\n",
"2020-04-19 04:00:23.274753: I tensorflow/core/platform/profile_utils/cpu_utils.cc:94] CPU Frequency: 2300000000 Hz\n",
"2020-04-19 04:00:23.275004: I tensorflow/compiler/xla/service/service.cc:168] XLA service 0x29ed480 executing computations on platform Host. Devices:\n",
"2020-04-19 04:00:23.275039: I tensorflow/compiler/xla/service/service.cc:175] StreamExecutor device (0): <undefined>, <undefined>\n",
"2020-04-19 04:00:23.275271: I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:1005] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero\n",
"2020-04-19 04:00:23.276209: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1640] Found device 0 with properties: \n",
"name: Tesla P100-PCIE-16GB major: 6 minor: 0 memoryClockRate(GHz): 1.3285\n",
"pciBusID: 0000:00:04.0\n",
"2020-04-19 04:00:23.276294: I tensorflow/stream_executor/platform/default/dso_loader.cc:42] Successfully opened dynamic library libcudart.so.10.0\n",
"2020-04-19 04:00:23.276333: I tensorflow/stream_executor/platform/default/dso_loader.cc:42] Successfully opened dynamic library libcublas.so.10.0\n",
"2020-04-19 04:00:23.276374: I tensorflow/stream_executor/platform/default/dso_loader.cc:42] Successfully opened dynamic library libcufft.so.10.0\n",
"2020-04-19 04:00:23.276410: I tensorflow/stream_executor/platform/default/dso_loader.cc:42] Successfully opened dynamic library libcurand.so.10.0\n",
"2020-04-19 04:00:23.276448: I tensorflow/stream_executor/platform/default/dso_loader.cc:42] Successfully opened dynamic library libcusolver.so.10.0\n",
"2020-04-19 04:00:23.276486: I tensorflow/stream_executor/platform/default/dso_loader.cc:42] Successfully opened dynamic library libcusparse.so.10.0\n",
"2020-04-19 04:00:23.276534: I tensorflow/stream_executor/platform/default/dso_loader.cc:42] Successfully opened dynamic library libcudnn.so.7\n",
"2020-04-19 04:00:23.276643: I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:1005] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero\n",
"2020-04-19 04:00:23.277538: I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:1005] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero\n",
"2020-04-19 04:00:23.278372: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1763] Adding visible gpu devices: 0\n",
"2020-04-19 04:00:23.278446: I tensorflow/stream_executor/platform/default/dso_loader.cc:42] Successfully opened dynamic library libcudart.so.10.0\n",
"2020-04-19 04:00:23.280324: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1181] Device interconnect StreamExecutor with strength 1 edge matrix:\n",
"2020-04-19 04:00:23.280355: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1187] 0 \n",
"2020-04-19 04:00:23.280371: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1200] 0: N \n",
"2020-04-19 04:00:23.280559: I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:1005] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero\n",
"2020-04-19 04:00:23.281448: I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:1005] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero\n",
"2020-04-19 04:00:23.282243: W tensorflow/core/common_runtime/gpu/gpu_bfc_allocator.cc:40] Overriding allow_growth setting because the TF_FORCE_GPU_ALLOW_GROWTH environment variable is set. Original config value was 0.\n",
"2020-04-19 04:00:23.282289: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1326] Created TensorFlow device (/job:localhost/replica:0/task:0/device:GPU:0 with 15216 MB memory) -> physical GPU (device: 0, name: Tesla P100-PCIE-16GB, pci bus id: 0000:00:04.0, compute capability: 6.0)\n",
"model loaded successfully!\n",
"2020-04-19 04:00:25.766841: I tensorflow/stream_executor/platform/default/dso_loader.cc:42] Successfully opened dynamic library libcudnn.so.7\n",
"\n",
"Done: colab_inputs/input\n"
],
"name": "stdout"
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "8cKNrCmXhRH1",
"colab_type": "text"
},
"source": [
"Pre-process (transform-align) with AKAZE features. Skip the following cell if your data was captured with a tripod."
]
},
{
"cell_type": "code",
"metadata": {
"id": "MgRuRiOAd8rZ",
"colab_type": "code",
"outputId": "f713f8e5-5eef-4fd8-f8ee-10f88f2f4ff7",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 51
}
},
"source": [
"!python test_pre_process.py -i colab_inputs/input"
],
"execution_count": 0,
"outputs": [
{
"output_type": "stream",
"text": [
"\n",
"Done: colab_inputs/input\n"
],
"name": "stdout"
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "Q2Y9QfsGnPHS",
"colab_type": "text"
},
"source": [
"Run matting - replace \"0001.png\" with the uploaded background you wish to use. Replace \"real-hand-held\" with \"real-fixed-cam\" for tripod images for best results."
]
},
{
"cell_type": "code",
"metadata": {
"id": "ByORL6hEnBsa",
"colab_type": "code",
"outputId": "739bffbd-7c2d-4d95-ba0e-bf059a067a4f",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 119
}
},
"source": [
"!CUDA_VISIBLE_DEVICES=0 python test_background-matting_image.py -m real-hand-held -i colab_inputs/input/ -o colab_inputs/output/ -tb colab_inputs/background/0001.png"
],
"execution_count": 0,
"outputs": [
{
"output_type": "stream",
"text": [
"CUDA Device: 0\n",
"Using image mode\n",
"Done: 1/4\n",
"Done: 2/4\n",
"Done: 3/4\n",
"Done: 4/4\n"
],
"name": "stdout"
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "qkF4sd1_n6oF",
"colab_type": "text"
},
"source": [
"Visualize results!"
]
},
{
"cell_type": "code",
"metadata": {
"id": "SKAr-x2inOEw",
"colab_type": "code",
"outputId": "bf8f2761-7e37-4c3d-f033-e777192b79a3",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 274
}
},
"source": [
"import matplotlib.image as mpimg \n",
"from matplotlib.pyplot import imshow\n",
"from glob import glob\n",
"%matplotlib inline\n",
"results = glob(\"colab_inputs/output/*_compose.png\")\n",
"print(results)\n",
"if len(results) > 0:\n",
" print(f\"Showing {results[0]}\")\n",
" testim = mpimg.imread(results[0])\n",
" imshow(testim)\n"
],
"execution_count": 0,
"outputs": [
{
"output_type": "stream",
"text": [
"['colab_inputs/output/1000_compose.png', 'colab_inputs/output/1500_compose.png', 'colab_inputs/output/0500_compose.png', 'colab_inputs/output/0001_compose.png']\n",
"Showing colab_inputs/output/1000_compose.png\n"
],
"name": "stdout"
},
{
"output_type": "display_data",
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"tags": [],
"needs_background": "light"
}
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "7TtcugkwLtyR",
"colab_type": "text"
},
"source": [
"#Running on video"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "BU2moFoeyQe_",
"colab_type": "text"
},
"source": [
"Warning: going through the process on videos, especially in excess of 10 seconds, can take quite some time on Colab"
]
},
{
"cell_type": "code",
"metadata": {
"id": "8K4MmdJjWdr9",
"colab_type": "code",
"colab": {}
},
"source": [
"#Uncomment and run this if you want to skip uploading your videos (below) and run on the sample videos instead (choose fixed or handheld)\n",
"\n",
"# !wget https://gist.githubusercontent.com/andreyryabtsev/79d1166452ebd5d5775fbf9169431967/raw/4d20c260d3b3379d1ea9e2e4baab013caf25bc4d/download_vids.sh\n",
"# !chmod +x download_vids.sh\n",
"# !./download_vids.sh handheld\n",
"# # !./download_vids.sh fixed"
],
"execution_count": 0,
"outputs": []
},
{
"cell_type": "markdown",
"metadata": {
"id": "n9ZH-3H0MGHO",
"colab_type": "text"
},
"source": [
"## Upload videos\n"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "ZUAi6R6EMLaR",
"colab_type": "text"
},
"source": [
"Upload the video from which you would like to extract the foreground, a still of the background, as well as a target background video. Name them `video.mp4`, `video_back.png`, and `target_background.mp4` respectively -- or change the first cell under \"process videos\" to use your names. You can use any other method to upload if this one takes long (e.g. mount Drive and copy files over)."
]
},
{
"cell_type": "code",
"metadata": {
"id": "-GsBD-sJMSP3",
"colab_type": "code",
"colab": {
"resources": {
"http://localhost:8080/nbextensions/google.colab/files.js": {
"data": "Ly8gQ29weXJpZ2h0IDIwMTcgR29vZ2xlIExMQwovLwovLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgovLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLy8KLy8gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLy8KLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQovLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAovLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAovLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KCi8qKgogKiBAZmlsZW92ZXJ2aWV3IEhlbHBlcnMgZm9yIGdvb2dsZS5jb2xhYiBQeXRob24gbW9kdWxlLgogKi8KKGZ1bmN0aW9uKHNjb3BlKSB7CmZ1bmN0aW9uIHNwYW4odGV4dCwgc3R5bGVBdHRyaWJ1dGVzID0ge30pIHsKICBjb25zdCBlbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3BhbicpOwogIGVsZW1lbnQudGV4dENvbnRlbnQgPSB0ZXh0OwogIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKHN0eWxlQXR0cmlidXRlcykpIHsKICAgIGVsZW1lbnQuc3R5bGVba2V5XSA9IHN0eWxlQXR0cmlidXRlc1trZXldOwogIH0KICByZXR1cm4gZWxlbWVudDsKfQoKLy8gTWF4IG51bWJlciBvZiBieXRlcyB3aGljaCB3aWxsIGJlIHVwbG9hZGVkIGF0IGEgdGltZS4KY29uc3QgTUFYX1BBWUxPQURfU0laRSA9IDEwMCAqIDEwMjQ7Ci8vIE1heCBhbW91bnQgb2YgdGltZSB0byBibG9jayB3YWl0aW5nIGZvciB0aGUgdXNlci4KY29uc3QgRklMRV9DSEFOR0VfVElNRU9VVF9NUyA9IDMwICogMTAwMDsKCmZ1bmN0aW9uIF91cGxvYWRGaWxlcyhpbnB1dElkLCBvdXRwdXRJZCkgewogIGNvbnN0IHN0ZXBzID0gdXBsb2FkRmlsZXNTdGVwKGlucHV0SWQsIG91dHB1dElkKTsKICBjb25zdCBvdXRwdXRFbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQob3V0cHV0SWQpOwogIC8vIENhY2hlIHN0ZXBzIG9uIHRoZSBvdXRwdXRFbGVtZW50IHRvIG1ha2UgaXQgYXZhaWxhYmxlIGZvciB0aGUgbmV4dCBjYWxsCiAgLy8gdG8gdXBsb2FkRmlsZXNDb250aW51ZSBmcm9tIFB5dGhvbi4KICBvdXRwdXRFbGVtZW50LnN0ZXBzID0gc3RlcHM7CgogIHJldHVybiBfdXBsb2FkRmlsZXNDb250aW51ZShvdXRwdXRJZCk7Cn0KCi8vIFRoaXMgaXMgcm91Z2hseSBhbiBhc3luYyBnZW5lcmF0b3IgKG5vdCBzdXBwb3J0ZWQgaW4gdGhlIGJyb3dzZXIgeWV0KSwKLy8gd2hlcmUgdGhlcmUgYXJlIG11bHRpcGxlIGFzeW5jaHJvbm91cyBzdGVwcyBhbmQgdGhlIFB5dGhvbiBzaWRlIGlzIGdvaW5nCi8vIHRvIHBvbGwgZm9yIGNvbXBsZXRpb24gb2YgZWFjaCBzdGVwLgovLyBUaGlzIHVzZXMgYSBQcm9taXNlIHRvIGJsb2NrIHRoZSBweXRob24gc2lkZSBvbiBjb21wbGV0aW9uIG9mIGVhY2ggc3RlcCwKLy8gdGhlbiBwYXNzZXMgdGhlIHJlc3VsdCBvZiB0aGUgcHJldmlvdXMgc3RlcCBhcyB0aGUgaW5wdXQgdG8gdGhlIG5leHQgc3RlcC4KZnVuY3Rpb24gX3VwbG9hZEZpbGVzQ29udGludWUob3V0cHV0SWQpIHsKICBjb25zdCBvdXRwdXRFbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQob3V0cHV0SWQpOwogIGNvbnN0IHN0ZXBzID0gb3V0cHV0RWxlbWVudC5zdGVwczsKCiAgY29uc3QgbmV4dCA9IHN0ZXBzLm5leHQob3V0cHV0RWxlbWVudC5sYXN0UHJvbWlzZVZhbHVlKTsKICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG5leHQudmFsdWUucHJvbWlzZSkudGhlbigodmFsdWUpID0+IHsKICAgIC8vIENhY2hlIHRoZSBsYXN0IHByb21pc2UgdmFsdWUgdG8gbWFrZSBpdCBhdmFpbGFibGUgdG8gdGhlIG5leHQKICAgIC8vIHN0ZXAgb2YgdGhlIGdlbmVyYXRvci4KICAgIG91dHB1dEVsZW1lbnQubGFzdFByb21pc2VWYWx1ZSA9IHZhbHVlOwogICAgcmV0dXJuIG5leHQudmFsdWUucmVzcG9uc2U7CiAgfSk7Cn0KCi8qKgogKiBHZW5lcmF0b3IgZnVuY3Rpb24gd2hpY2ggaXMgY2FsbGVkIGJldHdlZW4gZWFjaCBhc3luYyBzdGVwIG9mIHRoZSB1cGxvYWQKICogcHJvY2Vzcy4KICogQHBhcmFtIHtzdHJpbmd9IGlucHV0SWQgRWxlbWVudCBJRCBvZiB0aGUgaW5wdXQgZmlsZSBwaWNrZXIgZWxlbWVudC4KICogQHBhcmFtIHtzdHJpbmd9IG91dHB1dElkIEVsZW1lbnQgSUQgb2YgdGhlIG91dHB1dCBkaXNwbGF5LgogKiBAcmV0dXJuIHshSXRlcmFibGU8IU9iamVjdD59IEl0ZXJhYmxlIG9mIG5leHQgc3RlcHMuCiAqLwpmdW5jdGlvbiogdXBsb2FkRmlsZXNTdGVwKGlucHV0SWQsIG91dHB1dElkKSB7CiAgY29uc3QgaW5wdXRFbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaW5wdXRJZCk7CiAgaW5wdXRFbGVtZW50LmRpc2FibGVkID0gZmFsc2U7CgogIGNvbnN0IG91dHB1dEVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChvdXRwdXRJZCk7CiAgb3V0cHV0RWxlbWVudC5pbm5lckhUTUwgPSAnJzsKCiAgY29uc3QgcGlja2VkUHJvbWlzZSA9IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7CiAgICBpbnB1dEVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgKGUpID0+IHsKICAgICAgcmVzb2x2ZShlLnRhcmdldC5maWxlcyk7CiAgICB9KTsKICB9KTsKCiAgY29uc3QgY2FuY2VsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYnV0dG9uJyk7CiAgaW5wdXRFbGVtZW50LnBhcmVudEVsZW1lbnQuYXBwZW5kQ2hpbGQoY2FuY2VsKTsKICBjYW5jZWwudGV4dENvbnRlbnQgPSAnQ2FuY2VsIHVwbG9hZCc7CiAgY29uc3QgY2FuY2VsUHJvbWlzZSA9IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7CiAgICBjYW5jZWwub25jbGljayA9ICgpID0+IHsKICAgICAgcmVzb2x2ZShudWxsKTsKICAgIH07CiAgfSk7CgogIC8vIENhbmNlbCB1cGxvYWQgaWYgdXNlciBoYXNuJ3QgcGlja2VkIGFueXRoaW5nIGluIHRpbWVvdXQuCiAgY29uc3QgdGltZW91dFByb21pc2UgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4gewogICAgc2V0VGltZW91dCgoKSA9PiB7CiAgICAgIHJlc29sdmUobnVsbCk7CiAgICB9LCBGSUxFX0NIQU5HRV9USU1FT1VUX01TKTsKICB9KTsKCiAgLy8gV2FpdCBmb3IgdGhlIHVzZXIgdG8gcGljayB0aGUgZmlsZXMuCiAgY29uc3QgZmlsZXMgPSB5aWVsZCB7CiAgICBwcm9taXNlOiBQcm9taXNlLnJhY2UoW3BpY2tlZFByb21pc2UsIHRpbWVvdXRQcm9taXNlLCBjYW5jZWxQcm9taXNlXSksCiAgICByZXNwb25zZTogewogICAgICBhY3Rpb246ICdzdGFydGluZycsCiAgICB9CiAgfTsKCiAgaWYgKCFmaWxlcykgewogICAgcmV0dXJuIHsKICAgICAgcmVzcG9uc2U6IHsKICAgICAgICBhY3Rpb246ICdjb21wbGV0ZScsCiAgICAgIH0KICAgIH07CiAgfQoKICBjYW5jZWwucmVtb3ZlKCk7CgogIC8vIERpc2FibGUgdGhlIGlucHV0IGVsZW1lbnQgc2luY2UgZnVydGhlciBwaWNrcyBhcmUgbm90IGFsbG93ZWQuCiAgaW5wdXRFbGVtZW50LmRpc2FibGVkID0gdHJ1ZTsKCiAgZm9yIChjb25zdCBmaWxlIG9mIGZpbGVzKSB7CiAgICBjb25zdCBsaSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2xpJyk7CiAgICBsaS5hcHBlbmQoc3BhbihmaWxlLm5hbWUsIHtmb250V2VpZ2h0OiAnYm9sZCd9KSk7CiAgICBsaS5hcHBlbmQoc3BhbigKICAgICAgICBgKCR7ZmlsZS50eXBlIHx8ICduL2EnfSkgLSAke2ZpbGUuc2l6ZX0gYnl0ZXMsIGAgKwogICAgICAgIGBsYXN0IG1vZGlmaWVkOiAkewogICAgICAgICAgICBmaWxlLmxhc3RNb2RpZmllZERhdGUgPyBmaWxlLmxhc3RNb2RpZmllZERhdGUudG9Mb2NhbGVEYXRlU3RyaW5nKCkgOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbi9hJ30gLSBgKSk7CiAgICBjb25zdCBwZXJjZW50ID0gc3BhbignMCUgZG9uZScpOwogICAgbGkuYXBwZW5kQ2hpbGQocGVyY2VudCk7CgogICAgb3V0cHV0RWxlbWVudC5hcHBlbmRDaGlsZChsaSk7CgogICAgY29uc3QgZmlsZURhdGFQcm9taXNlID0gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHsKICAgICAgY29uc3QgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTsKICAgICAgcmVhZGVyLm9ubG9hZCA9IChlKSA9PiB7CiAgICAgICAgcmVzb2x2ZShlLnRhcmdldC5yZXN1bHQpOwogICAgICB9OwogICAgICByZWFkZXIucmVhZEFzQXJyYXlCdWZmZXIoZmlsZSk7CiAgICB9KTsKICAgIC8vIFdhaXQgZm9yIHRoZSBkYXRhIHRvIGJlIHJlYWR5LgogICAgbGV0IGZpbGVEYXRhID0geWllbGQgewogICAgICBwcm9taXNlOiBmaWxlRGF0YVByb21pc2UsCiAgICAgIHJlc3BvbnNlOiB7CiAgICAgICAgYWN0aW9uOiAnY29udGludWUnLAogICAgICB9CiAgICB9OwoKICAgIC8vIFVzZSBhIGNodW5rZWQgc2VuZGluZyB0byBhdm9pZCBtZXNzYWdlIHNpemUgbGltaXRzLiBTZWUgYi82MjExNTY2MC4KICAgIGxldCBwb3NpdGlvbiA9IDA7CiAgICB3aGlsZSAocG9zaXRpb24gPCBmaWxlRGF0YS5ieXRlTGVuZ3RoKSB7CiAgICAgIGNvbnN0IGxlbmd0aCA9IE1hdGgubWluKGZpbGVEYXRhLmJ5dGVMZW5ndGggLSBwb3NpdGlvbiwgTUFYX1BBWUxPQURfU0laRSk7CiAgICAgIGNvbnN0IGNodW5rID0gbmV3IFVpbnQ4QXJyYXkoZmlsZURhdGEsIHBvc2l0aW9uLCBsZW5ndGgpOwogICAgICBwb3NpdGlvbiArPSBsZW5ndGg7CgogICAgICBjb25zdCBiYXNlNjQgPSBidG9hKFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkobnVsbCwgY2h1bmspKTsKICAgICAgeWllbGQgewogICAgICAgIHJlc3BvbnNlOiB7CiAgICAgICAgICBhY3Rpb246ICdhcHBlbmQnLAogICAgICAgICAgZmlsZTogZmlsZS5uYW1lLAogICAgICAgICAgZGF0YTogYmFzZTY0LAogICAgICAgIH0sCiAgICAgIH07CiAgICAgIHBlcmNlbnQudGV4dENvbnRlbnQgPQogICAgICAgICAgYCR7TWF0aC5yb3VuZCgocG9zaXRpb24gLyBmaWxlRGF0YS5ieXRlTGVuZ3RoKSAqIDEwMCl9JSBkb25lYDsKICAgIH0KICB9CgogIC8vIEFsbCBkb25lLgogIHlpZWxkIHsKICAgIHJlc3BvbnNlOiB7CiAgICAgIGFjdGlvbjogJ2NvbXBsZXRlJywKICAgIH0KICB9Owp9CgpzY29wZS5nb29nbGUgPSBzY29wZS5nb29nbGUgfHwge307CnNjb3BlLmdvb2dsZS5jb2xhYiA9IHNjb3BlLmdvb2dsZS5jb2xhYiB8fCB7fTsKc2NvcGUuZ29vZ2xlLmNvbGFiLl9maWxlcyA9IHsKICBfdXBsb2FkRmlsZXMsCiAgX3VwbG9hZEZpbGVzQ29udGludWUsCn07Cn0pKHNlbGYpOwo=",
"ok": true,
"headers": [
[
"content-type",
"application/javascript"
]
],
"status": 200,
"status_text": ""
}
},
"base_uri": "https://localhost:8080/",
"height": 125
},
"outputId": "6386d4a3-7c61-4765-9aba-db100f5f22b7"
},
"source": [
"!mkdir -p colab_inputs_video\n",
"%cd colab_inputs_video\n",
"from google.colab import files\n",
"uploaded = files.upload()\n",
"for filename in uploaded.keys():\n",
" print('User uploaded file \"{name}\" with {length} bytes'.format(name=filename, length=len(uploaded[filename])))\n",
"%cd .."
],
"execution_count": 7,
"outputs": [
{
"output_type": "stream",
"text": [
"/content/Background-Matting/colab_inputs_video/colab_inputs_video\n"
],
"name": "stdout"
},
{
"output_type": "display_data",
"data": {
"text/html": [
"\n",
" <input type=\"file\" id=\"files-aa1f2bbb-5679-4e2c-b549-8cd330488fd6\" name=\"files[]\" multiple disabled />\n",
" <output id=\"result-aa1f2bbb-5679-4e2c-b549-8cd330488fd6\">\n",
" Upload widget is only available when the cell has been executed in the\n",
" current browser session. Please rerun this cell to enable.\n",
" </output>\n",
" <script src=\"/nbextensions/google.colab/files.js\"></script> "
],
"text/plain": [
"<IPython.core.display.HTML object>"
]
},
"metadata": {
"tags": []
}
},
{
"output_type": "stream",
"text": [
"Saving target_background.mp4 to target_background.mp4\n",
"User uploaded file \"target_background.mp4\" with 82187849 bytes\n",
"/content/Background-Matting/colab_inputs_video\n"
],
"name": "stdout"
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "1OKjsdLKN1dL",
"colab_type": "text"
},
"source": [
"## Process videos"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "tHI1N3pUOTVR",
"colab_type": "text"
},
"source": [
"Select the files to use:"
]
},
{
"cell_type": "code",
"metadata": {
"id": "tr8wS39kOWfG",
"colab_type": "code",
"colab": {}
},
"source": [
"os.environ[\"BM_SOURCE_VIDEO\"] = \"video.mp4\"\n",
"os.environ[\"BM_SOURCE_STILL\"] = \"video_back.png\"\n",
"os.environ[\"BM_TARGET_VIDEO\"] = \"target_background.mp4\"\n",
"os.environ[\"FRAME_RATE\"] = \"60\" # used only in combining output frames\n",
"\n",
"os.environ[\"BM_OUTPUT_COMPOSE\"] = \"video_result.mp4\"\n",
"os.environ[\"BM_OUTPUT_MATTE\"] = \"video_result_matte.mp4\""
],
"execution_count": 0,
"outputs": []
},
{
"cell_type": "markdown",
"metadata": {
"id": "lCSUPY51OZLf",
"colab_type": "text"
},
"source": [
"Extract frames"
]
},
{
"cell_type": "code",
"metadata": {
"id": "XFyGeu0gOa0C",
"colab_type": "code",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 1000
},
"outputId": "11bf6f7b-c8ad-411c-d43f-f34fcd5717b1"
},
"source": [
"%cd colab_inputs_video\n",
"%mkdir input background\n",
"!ffmpeg -i $BM_SOURCE_VIDEO input/%04d_img.png -hide_banner\n",
"!ffmpeg -i $BM_TARGET_VIDEO background/%04d.png -hide_banner\n",
"%cd .."
],
"execution_count": 20,
"outputs": [
{
"output_type": "stream",
"text": [
"[Errno 2] No such file or directory: 'colab_inputs_video'\n",
"/content/Background-Matting/colab_inputs_video\n",
"mkdir: cannot create directory ‘input’: File exists\n",
"mkdir: cannot create directory ‘background’: File exists\n",
"Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'video.mp4':\n",
" Metadata:\n",
" major_brand : qt \n",
" minor_version : 0\n",
" compatible_brands: qt \n",
" creation_time : 2019-11-13T23:28:33.000000Z\n",
" com.apple.quicktime.location.ISO6709: +47.6532-122.3053+045.382/\n",
" com.apple.quicktime.make: Apple\n",
" com.apple.quicktime.model: iPhone 6s\n",
" com.apple.quicktime.software: 11.4.1\n",
" com.apple.quicktime.creationdate: 2019-11-13T14:55:52-0800\n",
" Duration: 00:00:26.83, start: 0.000000, bitrate: 23706 kb/s\n",
" Stream #0:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p(tv, bt709), 1920x1080, 23586 kb/s, 59.96 fps, 59.94 tbr, 600 tbn, 1200 tbc (default)\n",
" Metadata:\n",
" creation_time : 2019-11-13T23:28:33.000000Z\n",
" handler_name : Core Media Data Handler\n",
" encoder : H.264\n",
" Stream #0:1(und): Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, mono, fltp, 92 kb/s (default)\n",
" Metadata:\n",
" creation_time : 2019-11-13T23:28:33.000000Z\n",
" handler_name : Core Media Data Handler\n",
" Stream #0:2(und): Data: none (mebx / 0x7862656D), 12 kb/s (default)\n",
" Metadata:\n",
" creation_time : 2019-11-13T23:28:33.000000Z\n",
" handler_name : Core Media Data Handler\n",
" Stream #0:3(und): Data: none (mebx / 0x7862656D), 0 kb/s (default)\n",
" Metadata:\n",
" creation_time : 2019-11-13T23:28:33.000000Z\n",
" handler_name : Core Media Data Handler\n",
"Stream mapping:\n",
" Stream #0:0 -> #0:0 (h264 (native) -> png (native))\n",
"Press [q] to stop, [?] for help\n",
"Output #0, image2, to 'input/%04d_img.png':\n",
" Metadata:\n",
" major_brand : qt \n",
" minor_version : 0\n",
" compatible_brands: qt \n",
" com.apple.quicktime.creationdate: 2019-11-13T14:55:52-0800\n",
" com.apple.quicktime.location.ISO6709: +47.6532-122.3053+045.382/\n",
" com.apple.quicktime.make: Apple\n",
" com.apple.quicktime.model: iPhone 6s\n",
" com.apple.quicktime.software: 11.4.1\n",
" encoder : Lavf57.83.100\n",
" Stream #0:0(und): Video: png, rgb24, 1920x1080, q=2-31, 200 kb/s, 59.94 fps, 59.94 tbn, 59.94 tbc (default)\n",
" Metadata:\n",
" creation_time : 2019-11-13T23:28:33.000000Z\n",
" handler_name : Core Media Data Handler\n",
" encoder : Lavc57.107.100 png\n",
"frame= 1609 fps=6.1 q=-0.0 Lsize=N/A time=00:00:26.84 bitrate=N/A speed=0.102x \n",
"video:4597786kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: unknown\n",
"Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'target_background.mp4':\n",
" Metadata:\n",
" major_brand : qt \n",
" minor_version : 0\n",
" compatible_brands: qt \n",
" creation_time : 2019-11-07T20:04:21.000000Z\n",
" com.apple.quicktime.location.ISO6709: +47.6539-122.3072+036.193/\n",
" com.apple.quicktime.make: Apple\n",
" com.apple.quicktime.model: iPhone 6s\n",
" com.apple.quicktime.software: 11.4.1\n",
" com.apple.quicktime.creationdate: 2019-11-07T11:44:12-0800\n",
" Duration: 00:00:27.95, start: -0.000023, bitrate: 23524 kb/s\n",
" Stream #0:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p(tv, bt709), 1920x1080, 23419 kb/s, 59.96 fps, 59.94 tbr, 600 tbn, 1200 tbc (default)\n",
" Metadata:\n",
" creation_time : 2019-11-07T20:04:21.000000Z\n",
" handler_name : Core Media Data Handler\n",
" encoder : H.264\n",
" Stream #0:1(und): Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, mono, fltp, 95 kb/s (default)\n",
" Metadata:\n",
" creation_time : 2019-11-07T20:04:21.000000Z\n",
" handler_name : Core Media Data Handler\n",
" Stream #0:2(und): Data: none (mebx / 0x7862656D), 0 kb/s (default)\n",
" Metadata:\n",
" creation_time : 2019-11-07T20:04:21.000000Z\n",
" handler_name : Core Media Data Handler\n",
" Stream #0:3(und): Data: none (mebx / 0x7862656D), 0 kb/s (default)\n",
" Metadata:\n",
" creation_time : 2019-11-07T20:04:21.000000Z\n",
" handler_name : Core Media Data Handler\n",
"Stream mapping:\n",
" Stream #0:0 -> #0:0 (h264 (native) -> png (native))\n",
"Press [q] to stop, [?] for help\n",
"Output #0, image2, to 'background/%04d.png':\n",
" Metadata:\n",
" major_brand : qt \n",
" minor_version : 0\n",
" compatible_brands: qt \n",
" com.apple.quicktime.creationdate: 2019-11-07T11:44:12-0800\n",
" com.apple.quicktime.location.ISO6709: +47.6539-122.3072+036.193/\n",
" com.apple.quicktime.make: Apple\n",
" com.apple.quicktime.model: iPhone 6s\n",
" com.apple.quicktime.software: 11.4.1\n",
" encoder : Lavf57.83.100\n",
" Stream #0:0(und): Video: png, rgb24, 1920x1080, q=2-31, 200 kb/s, 59.94 fps, 59.94 tbn, 59.94 tbc (default)\n",
" Metadata:\n",
" creation_time : 2019-11-07T20:04:21.000000Z\n",
" handler_name : Core Media Data Handler\n",
" encoder : Lavc57.107.100 png\n",
"frame= 1676 fps=5.3 q=-0.0 Lsize=N/A time=00:00:27.96 bitrate=N/A speed=0.0891x \n",
"video:4370014kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: unknown\n",
"/content/Background-Matting\n"
],
"name": "stdout"
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "EwtQBIARQEv2",
"colab_type": "text"
},
"source": [
"Run segmentation"
]
},
{
"cell_type": "code",
"metadata": {
"id": "kETGFbwSQF88",
"colab_type": "code",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 1000
},
"outputId": "f463c337-68b7-4719-ab41-6e00ed24131f"
},
"source": [
"!python test_segmentation_deeplab.py -i colab_inputs_video/input"
],
"execution_count": 21,
"outputs": [
{
"output_type": "stream",
"text": [
"/usr/local/lib/python3.6/dist-packages/tensorflow/python/framework/dtypes.py:516: FutureWarning: Passing (type, 1) or '1type' as a synonym of type is deprecated; in a future version of numpy, it will be understood as (type, (1,)) / '(1,)type'.\n",
" _np_qint8 = np.dtype([(\"qint8\", np.int8, 1)])\n",
"/usr/local/lib/python3.6/dist-packages/tensorflow/python/framework/dtypes.py:517: FutureWarning: Passing (type, 1) or '1type' as a synonym of type is deprecated; in a future version of numpy, it will be understood as (type, (1,)) / '(1,)type'.\n",
" _np_quint8 = np.dtype([(\"quint8\", np.uint8, 1)])\n",
"/usr/local/lib/python3.6/dist-packages/tensorflow/python/framework/dtypes.py:518: FutureWarning: Passing (type, 1) or '1type' as a synonym of type is deprecated; in a future version of numpy, it will be understood as (type, (1,)) / '(1,)type'.\n",
" _np_qint16 = np.dtype([(\"qint16\", np.int16, 1)])\n",
"/usr/local/lib/python3.6/dist-packages/tensorflow/python/framework/dtypes.py:519: FutureWarning: Passing (type, 1) or '1type' as a synonym of type is deprecated; in a future version of numpy, it will be understood as (type, (1,)) / '(1,)type'.\n",
" _np_quint16 = np.dtype([(\"quint16\", np.uint16, 1)])\n",
"/usr/local/lib/python3.6/dist-packages/tensorflow/python/framework/dtypes.py:520: FutureWarning: Passing (type, 1) or '1type' as a synonym of type is deprecated; in a future version of numpy, it will be understood as (type, (1,)) / '(1,)type'.\n",
" _np_qint32 = np.dtype([(\"qint32\", np.int32, 1)])\n",
"/usr/local/lib/python3.6/dist-packages/tensorflow/python/framework/dtypes.py:525: FutureWarning: Passing (type, 1) or '1type' as a synonym of type is deprecated; in a future version of numpy, it will be understood as (type, (1,)) / '(1,)type'.\n",
" np_resource = np.dtype([(\"resource\", np.ubyte, 1)])\n",
"/usr/local/lib/python3.6/dist-packages/tensorboard/compat/tensorflow_stub/dtypes.py:541: FutureWarning: Passing (type, 1) or '1type' as a synonym of type is deprecated; in a future version of numpy, it will be understood as (type, (1,)) / '(1,)type'.\n",
" _np_qint8 = np.dtype([(\"qint8\", np.int8, 1)])\n",
"/usr/local/lib/python3.6/dist-packages/tensorboard/compat/tensorflow_stub/dtypes.py:542: FutureWarning: Passing (type, 1) or '1type' as a synonym of type is deprecated; in a future version of numpy, it will be understood as (type, (1,)) / '(1,)type'.\n",
" _np_quint8 = np.dtype([(\"quint8\", np.uint8, 1)])\n",
"/usr/local/lib/python3.6/dist-packages/tensorboard/compat/tensorflow_stub/dtypes.py:543: FutureWarning: Passing (type, 1) or '1type' as a synonym of type is deprecated; in a future version of numpy, it will be understood as (type, (1,)) / '(1,)type'.\n",
" _np_qint16 = np.dtype([(\"qint16\", np.int16, 1)])\n",
"/usr/local/lib/python3.6/dist-packages/tensorboard/compat/tensorflow_stub/dtypes.py:544: FutureWarning: Passing (type, 1) or '1type' as a synonym of type is deprecated; in a future version of numpy, it will be understood as (type, (1,)) / '(1,)type'.\n",
" _np_quint16 = np.dtype([(\"quint16\", np.uint16, 1)])\n",
"/usr/local/lib/python3.6/dist-packages/tensorboard/compat/tensorflow_stub/dtypes.py:545: FutureWarning: Passing (type, 1) or '1type' as a synonym of type is deprecated; in a future version of numpy, it will be understood as (type, (1,)) / '(1,)type'.\n",
" _np_qint32 = np.dtype([(\"qint32\", np.int32, 1)])\n",
"/usr/local/lib/python3.6/dist-packages/tensorboard/compat/tensorflow_stub/dtypes.py:550: FutureWarning: Passing (type, 1) or '1type' as a synonym of type is deprecated; in a future version of numpy, it will be understood as (type, (1,)) / '(1,)type'.\n",
" np_resource = np.dtype([(\"resource\", np.ubyte, 1)])\n",
"WARNING:tensorflow:From test_segmentation_deeplab.py:144: The name tf.gfile.MakeDirs is deprecated. Please use tf.io.gfile.makedirs instead.\n",
"\n",
"downloading model to deeplab_model/deeplabv3_pascal_trainval_2018_01_04.tar.gz, this might take a while...\n",
"download completed! loading DeepLab model...\n",
"WARNING:tensorflow:From test_segmentation_deeplab.py:32: The name tf.GraphDef is deprecated. Please use tf.compat.v1.GraphDef instead.\n",
"\n",
"WARNING:tensorflow:From test_segmentation_deeplab.py:43: The name tf.Session is deprecated. Please use tf.compat.v1.Session instead.\n",
"\n",
"2020-04-19 22:29:59.196314: I tensorflow/stream_executor/platform/default/dso_loader.cc:42] Successfully opened dynamic library libcuda.so.1\n",
"2020-04-19 22:29:59.256417: I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:1005] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero\n",
"2020-04-19 22:29:59.257362: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1640] Found device 0 with properties: \n",
"name: Tesla P4 major: 6 minor: 1 memoryClockRate(GHz): 1.1135\n",
"pciBusID: 0000:00:04.0\n",
"2020-04-19 22:29:59.279226: I tensorflow/stream_executor/platform/default/dso_loader.cc:42] Successfully opened dynamic library libcudart.so.10.0\n",
"2020-04-19 22:29:59.489564: I tensorflow/stream_executor/platform/default/dso_loader.cc:42] Successfully opened dynamic library libcublas.so.10.0\n",
"2020-04-19 22:29:59.581404: I tensorflow/stream_executor/platform/default/dso_loader.cc:42] Successfully opened dynamic library libcufft.so.10.0\n",
"2020-04-19 22:29:59.605606: I tensorflow/stream_executor/platform/default/dso_loader.cc:42] Successfully opened dynamic library libcurand.so.10.0\n",
"2020-04-19 22:29:59.854590: I tensorflow/stream_executor/platform/default/dso_loader.cc:42] Successfully opened dynamic library libcusolver.so.10.0\n",
"2020-04-19 22:29:59.983366: I tensorflow/stream_executor/platform/default/dso_loader.cc:42] Successfully opened dynamic library libcusparse.so.10.0\n",
"2020-04-19 22:30:00.477882: I tensorflow/stream_executor/platform/default/dso_loader.cc:42] Successfully opened dynamic library libcudnn.so.7\n",
"2020-04-19 22:30:00.478105: I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:1005] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero\n",
"2020-04-19 22:30:00.478882: I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:1005] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero\n",
"2020-04-19 22:30:00.479479: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1763] Adding visible gpu devices: 0\n",
"2020-04-19 22:30:00.479863: I tensorflow/core/platform/cpu_feature_guard.cc:142] Your CPU supports instructions that this TensorFlow binary was not compiled to use: AVX2 FMA\n",
"2020-04-19 22:30:00.618186: I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:1005] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero\n",
"2020-04-19 22:30:00.618854: I tensorflow/compiler/xla/service/service.cc:168] XLA service 0x1c2f2c0 executing computations on platform CUDA. Devices:\n",
"2020-04-19 22:30:00.618891: I tensorflow/compiler/xla/service/service.cc:175] StreamExecutor device (0): Tesla P4, Compute Capability 6.1\n",
"2020-04-19 22:30:00.652180: I tensorflow/core/platform/profile_utils/cpu_utils.cc:94] CPU Frequency: 2200000000 Hz\n",
"2020-04-19 22:30:00.652362: I tensorflow/compiler/xla/service/service.cc:168] XLA service 0x1c2f480 executing computations on platform Host. Devices:\n",
"2020-04-19 22:30:00.652389: I tensorflow/compiler/xla/service/service.cc:175] StreamExecutor device (0): <undefined>, <undefined>\n",
"2020-04-19 22:30:00.652779: I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:1005] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero\n",
"2020-04-19 22:30:00.653179: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1640] Found device 0 with properties: \n",
"name: Tesla P4 major: 6 minor: 1 memoryClockRate(GHz): 1.1135\n",
"pciBusID: 0000:00:04.0\n",
"2020-04-19 22:30:00.653262: I tensorflow/stream_executor/platform/default/dso_loader.cc:42] Successfully opened dynamic library libcudart.so.10.0\n",
"2020-04-19 22:30:00.653285: I tensorflow/stream_executor/platform/default/dso_loader.cc:42] Successfully opened dynamic library libcublas.so.10.0\n",
"2020-04-19 22:30:00.653307: I tensorflow/stream_executor/platform/default/dso_loader.cc:42] Successfully opened dynamic library libcufft.so.10.0\n",
"2020-04-19 22:30:00.653325: I tensorflow/stream_executor/platform/default/dso_loader.cc:42] Successfully opened dynamic library libcurand.so.10.0\n",
"2020-04-19 22:30:00.653343: I tensorflow/stream_executor/platform/default/dso_loader.cc:42] Successfully opened dynamic library libcusolver.so.10.0\n",
"2020-04-19 22:30:00.653363: I tensorflow/stream_executor/platform/default/dso_loader.cc:42] Successfully opened dynamic library libcusparse.so.10.0\n",
"2020-04-19 22:30:00.653384: I tensorflow/stream_executor/platform/default/dso_loader.cc:42] Successfully opened dynamic library libcudnn.so.7\n",
"2020-04-19 22:30:00.653451: I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:1005] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero\n",
"2020-04-19 22:30:00.653856: I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:1005] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero\n",
"2020-04-19 22:30:00.654206: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1763] Adding visible gpu devices: 0\n",
"2020-04-19 22:30:00.664840: I tensorflow/stream_executor/platform/default/dso_loader.cc:42] Successfully opened dynamic library libcudart.so.10.0\n",
"2020-04-19 22:30:00.666006: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1181] Device interconnect StreamExecutor with strength 1 edge matrix:\n",
"2020-04-19 22:30:00.666046: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1187] 0 \n",
"2020-04-19 22:30:00.666058: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1200] 0: N \n",
"2020-04-19 22:30:00.673030: I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:1005] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero\n",
"2020-04-19 22:30:00.673450: I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:1005] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero\n",
"2020-04-19 22:30:00.673840: W tensorflow/core/common_runtime/gpu/gpu_bfc_allocator.cc:40] Overriding allow_growth setting because the TF_FORCE_GPU_ALLOW_GROWTH environment variable is set. Original config value was 0.\n",
"2020-04-19 22:30:00.673978: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1326] Created TensorFlow device (/job:localhost/replica:0/task:0/device:GPU:0 with 7123 MB memory) -> physical GPU (device: 0, name: Tesla P4, pci bus id: 0000:00:04.0, compute capability: 6.1)\n",
"model loaded successfully!\n",
"2020-04-19 22:30:09.723900: I tensorflow/stream_executor/platform/default/dso_loader.cc:42] Successfully opened dynamic library libcudnn.so.7\n",
"\n",
"Done: colab_inputs_video/input\n"
],
"name": "stdout"
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "oxRm0ypXQYIN",
"colab_type": "text"
},
"source": [
"Align the frames -- skip this step if your video was captured with a fixed camera"
]
},
{
"cell_type": "code",
"metadata": {
"id": "RsXaKRs6QedX",
"colab_type": "code",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 1000
},
"outputId": "08298811-f43f-4fc8-d405-853ba4561343"
},
"source": [
"!python test_pre_process_video.py -i colab_inputs_video/input -v_name colab_inputs_video/$BM_SOURCE_STILL"
],
"execution_count": 23,
"outputs": [
{
"output_type": "stream",
"text": [
"Done: 1/1609\n",
"Done: 2/1609\n",
"Done: 3/1609\n",
"Done: 4/1609\n",
"Done: 5/1609\n",
"Done: 6/1609\n",
"Done: 7/1609\n",
"Done: 8/1609\n",
"Done: 9/1609\n",
"Done: 10/1609\n",
"Done: 11/1609\n",
"Done: 12/1609\n",
"Done: 13/1609\n",
"Done: 14/1609\n",
"Done: 15/1609\n",
"Done: 16/1609\n",
"Done: 17/1609\n",
"Done: 18/1609\n",
"Done: 19/1609\n",
"Done: 20/1609\n",
"Done: 21/1609\n",
"Done: 22/1609\n",
"Done: 23/1609\n",
"Done: 24/1609\n",
"Done: 25/1609\n",
"Done: 26/1609\n",
"Done: 27/1609\n",
"Done: 28/1609\n",
"Done: 29/1609\n",
"Done: 30/1609\n",
"Done: 31/1609\n",
"Done: 32/1609\n",
"Done: 33/1609\n",
"Done: 34/1609\n",
"Done: 35/1609\n",
"Done: 36/1609\n",
"Done: 37/1609\n",
"Done: 38/1609\n",
"Done: 39/1609\n",
"Done: 40/1609\n",
"Done: 41/1609\n",
"Done: 42/1609\n",
"Done: 43/1609\n",
"Done: 44/1609\n",
"Done: 45/1609\n",
"Done: 46/1609\n",
"Done: 47/1609\n",
"Done: 48/1609\n",
"Done: 49/1609\n",
"Done: 50/1609\n",
"Done: 51/1609\n",
"Done: 52/1609\n",
"Done: 53/1609\n",
"Done: 54/1609\n",
"Done: 55/1609\n",
"Done: 56/1609\n",
"Done: 57/1609\n",
"Done: 58/1609\n",
"Done: 59/1609\n",
"Done: 60/1609\n",
"Done: 61/1609\n",
"Done: 62/1609\n",
"Done: 63/1609\n",
"Done: 64/1609\n",
"Done: 65/1609\n",
"Done: 66/1609\n",
"Done: 67/1609\n",
"Done: 68/1609\n",
"Done: 69/1609\n",
"Done: 70/1609\n",
"Done: 71/1609\n",
"Done: 72/1609\n",
"Done: 73/1609\n",
"Done: 74/1609\n",
"Done: 75/1609\n",
"Done: 76/1609\n",
"Done: 77/1609\n",
"Done: 78/1609\n",
"Done: 79/1609\n",
"Done: 80/1609\n",
"Done: 81/1609\n",
"Done: 82/1609\n",
"Done: 83/1609\n",
"Done: 84/1609\n",
"Done: 85/1609\n",
"Done: 86/1609\n",
"Done: 87/1609\n",
"Done: 88/1609\n",
"Done: 89/1609\n",
"Done: 90/1609\n",
"Done: 91/1609\n",
"Done: 92/1609\n",
"Done: 93/1609\n",
"Done: 94/1609\n",
"Done: 95/1609\n",
"Done: 96/1609\n",
"Done: 97/1609\n",
"Done: 98/1609\n",
"Done: 99/1609\n",
"Done: 100/1609\n",
"Done: 101/1609\n",
"Done: 102/1609\n",
"Done: 103/1609\n",
"Done: 104/1609\n",
"Done: 105/1609\n",
"Done: 106/1609\n",
"Done: 107/1609\n",
"Done: 108/1609\n",
"Done: 109/1609\n",
"Done: 110/1609\n",
"Done: 111/1609\n",
"Done: 112/1609\n",
"Done: 113/1609\n",
"Done: 114/1609\n",
"Done: 115/1609\n",
"Done: 116/1609\n",
"Done: 117/1609\n",
"Done: 118/1609\n",
"Done: 119/1609\n",
"Done: 120/1609\n",
"Done: 121/1609\n",
"Done: 122/1609\n",
"Done: 123/1609\n",
"Done: 124/1609\n",
"Done: 125/1609\n",
"Done: 126/1609\n",
"Done: 127/1609\n",
"Done: 128/1609\n",
"Done: 129/1609\n",
"Done: 130/1609\n",
"Done: 131/1609\n",
"Done: 132/1609\n",
"Done: 133/1609\n",
"Done: 134/1609\n",
"Done: 135/1609\n",
"Done: 136/1609\n",
"Done: 137/1609\n",
"Done: 138/1609\n",
"Done: 139/1609\n",
"Done: 140/1609\n",
"Done: 141/1609\n",
"Done: 142/1609\n",
"Done: 143/1609\n",
"Done: 144/1609\n",
"Done: 145/1609\n",
"Done: 146/1609\n",
"Done: 147/1609\n",
"Done: 148/1609\n",
"Done: 149/1609\n",
"Done: 150/1609\n",
"Done: 151/1609\n",
"Done: 152/1609\n",
"Done: 153/1609\n",
"Done: 154/1609\n",
"Done: 155/1609\n",
"Done: 156/1609\n",
"Done: 157/1609\n",
"Done: 158/1609\n",
"Done: 159/1609\n",
"Done: 160/1609\n",
"Done: 161/1609\n",
"Done: 162/1609\n",
"Done: 163/1609\n",
"Done: 164/1609\n",
"Done: 165/1609\n",
"Done: 166/1609\n",
"Done: 167/1609\n",
"Done: 168/1609\n",
"Done: 169/1609\n",
"Done: 170/1609\n",
"Done: 171/1609\n",
"Done: 172/1609\n",
"Done: 173/1609\n",
"Done: 174/1609\n",
"Done: 175/1609\n",
"Done: 176/1609\n",
"Done: 177/1609\n",
"Done: 178/1609\n",
"Done: 179/1609\n",
"Done: 180/1609\n",
"Done: 181/1609\n",
"Done: 182/1609\n",
"Done: 183/1609\n",
"Done: 184/1609\n",
"Done: 185/1609\n",
"Done: 186/1609\n",
"Done: 187/1609\n",
"Done: 188/1609\n",
"Done: 189/1609\n",
"Done: 190/1609\n",
"Done: 191/1609\n",
"Done: 192/1609\n",
"Done: 193/1609\n",
"Done: 194/1609\n",
"Done: 195/1609\n",
"Done: 196/1609\n",
"Done: 197/1609\n",
"Done: 198/1609\n",
"Done: 199/1609\n",
"Done: 200/1609\n",
"Done: 201/1609\n",
"Done: 202/1609\n",
"Done: 203/1609\n",
"Done: 204/1609\n",
"Done: 205/1609\n",
"Done: 206/1609\n",
"Done: 207/1609\n",
"Done: 208/1609\n",
"Done: 209/1609\n",
"Done: 210/1609\n",
"Done: 211/1609\n",
"Done: 212/1609\n",
"Done: 213/1609\n",
"Done: 214/1609\n",
"Done: 215/1609\n",
"Done: 216/1609\n",
"Done: 217/1609\n",
"Done: 218/1609\n",
"Done: 219/1609\n",
"Done: 220/1609\n",
"Done: 221/1609\n",
"Done: 222/1609\n",
"Done: 223/1609\n",
"Done: 224/1609\n",
"Done: 225/1609\n",
"Done: 226/1609\n",
"Done: 227/1609\n",
"Done: 228/1609\n",
"Done: 229/1609\n",
"Done: 230/1609\n",
"Done: 231/1609\n",
"Done: 232/1609\n",
"Done: 233/1609\n",
"Done: 234/1609\n",
"Done: 235/1609\n",
"Done: 236/1609\n",
"Done: 237/1609\n",
"Done: 238/1609\n",
"Done: 239/1609\n",
"Done: 240/1609\n",
"Done: 241/1609\n",
"Done: 242/1609\n",
"Done: 243/1609\n",
"Done: 244/1609\n",
"Done: 245/1609\n",
"Done: 246/1609\n",
"Done: 247/1609\n",
"Done: 248/1609\n",
"Done: 249/1609\n",
"Done: 250/1609\n",
"Done: 251/1609\n",
"Done: 252/1609\n",
"Done: 253/1609\n",
"Done: 254/1609\n",
"Done: 255/1609\n",
"Done: 256/1609\n",
"Done: 257/1609\n",
"Done: 258/1609\n",
"Done: 259/1609\n",
"Done: 260/1609\n",
"Done: 261/1609\n",
"Done: 262/1609\n",
"Done: 263/1609\n",
"Done: 264/1609\n",
"Done: 265/1609\n",
"Done: 266/1609\n",
"Done: 267/1609\n",
"Done: 268/1609\n",
"Done: 269/1609\n",
"Done: 270/1609\n",
"Done: 271/1609\n",
"Done: 272/1609\n",
"Done: 273/1609\n",
"Done: 274/1609\n",
"Done: 275/1609\n",
"Done: 276/1609\n",
"Done: 277/1609\n",
"Done: 278/1609\n",
"Done: 279/1609\n",
"Done: 280/1609\n",
"Done: 281/1609\n",
"Done: 282/1609\n",
"Done: 283/1609\n",
"Done: 284/1609\n",
"Done: 285/1609\n",
"Done: 286/1609\n",
"Done: 287/1609\n",
"Done: 288/1609\n",
"Done: 289/1609\n",
"Done: 290/1609\n",
"Done: 291/1609\n",
"Done: 292/1609\n",
"Done: 293/1609\n",
"Done: 294/1609\n",
"Done: 295/1609\n",
"Done: 296/1609\n",
"Done: 297/1609\n",
"Done: 298/1609\n",
"Done: 299/1609\n",
"Done: 300/1609\n",
"Done: 301/1609\n",
"Done: 302/1609\n",
"Done: 303/1609\n",
"Done: 304/1609\n",
"Done: 305/1609\n",
"Done: 306/1609\n",
"Done: 307/1609\n",
"Done: 308/1609\n",
"Done: 309/1609\n",
"Done: 310/1609\n",
"Done: 311/1609\n",
"Done: 312/1609\n",
"Done: 313/1609\n",
"Done: 314/1609\n",
"Done: 315/1609\n",
"Done: 316/1609\n",
"Done: 317/1609\n",
"Done: 318/1609\n",
"Done: 319/1609\n",
"Done: 320/1609\n",
"Done: 321/1609\n",
"Done: 322/1609\n",
"Done: 323/1609\n",
"Done: 324/1609\n",
"Done: 325/1609\n",
"Done: 326/1609\n",
"Done: 327/1609\n",
"Done: 328/1609\n",
"Done: 329/1609\n",
"Done: 330/1609\n",
"Done: 331/1609\n",
"Done: 332/1609\n",
"Done: 333/1609\n",
"Done: 334/1609\n",
"Done: 335/1609\n",
"Done: 336/1609\n",
"Done: 337/1609\n",
"Done: 338/1609\n",
"Done: 339/1609\n",
"Done: 340/1609\n",
"Done: 341/1609\n",
"Done: 342/1609\n",
"Done: 343/1609\n",
"Done: 344/1609\n",
"Done: 345/1609\n",
"Done: 346/1609\n",
"Done: 347/1609\n",
"Done: 348/1609\n",
"Done: 349/1609\n",
"Done: 350/1609\n",
"Done: 351/1609\n",
"Done: 352/1609\n",
"Done: 353/1609\n",
"Done: 354/1609\n",
"Done: 355/1609\n",
"Done: 356/1609\n",
"Done: 357/1609\n",
"Done: 358/1609\n",
"Done: 359/1609\n",
"Done: 360/1609\n",
"Done: 361/1609\n",
"Done: 362/1609\n",
"Done: 363/1609\n",
"Done: 364/1609\n",
"Done: 365/1609\n",
"Done: 366/1609\n",
"Done: 367/1609\n",
"Done: 368/1609\n",
"Done: 369/1609\n",
"Done: 370/1609\n",
"Done: 371/1609\n",
"Done: 372/1609\n",
"Done: 373/1609\n",
"Done: 374/1609\n",
"Done: 375/1609\n",
"Done: 376/1609\n",
"Done: 377/1609\n",
"Done: 378/1609\n",
"Done: 379/1609\n",
"Done: 380/1609\n",
"Done: 381/1609\n",
"Done: 382/1609\n",
"Done: 383/1609\n",
"Done: 384/1609\n",
"Done: 385/1609\n",
"Done: 386/1609\n",
"Done: 387/1609\n",
"Done: 388/1609\n",
"Done: 389/1609\n",
"Done: 390/1609\n",
"Done: 391/1609\n",
"Done: 392/1609\n",
"Done: 393/1609\n",
"Done: 394/1609\n",
"Done: 395/1609\n",
"Done: 396/1609\n",
"Done: 397/1609\n",
"Done: 398/1609\n",
"Done: 399/1609\n",
"Done: 400/1609\n",
"Done: 401/1609\n",
"Done: 402/1609\n",
"Done: 403/1609\n",
"Done: 404/1609\n",
"Done: 405/1609\n",
"Done: 406/1609\n",
"Done: 407/1609\n",
"Done: 408/1609\n",
"Done: 409/1609\n",
"Done: 410/1609\n",
"Done: 411/1609\n",
"Done: 412/1609\n",
"Done: 413/1609\n",
"Done: 414/1609\n",
"Done: 415/1609\n",
"Done: 416/1609\n",
"Done: 417/1609\n",
"Done: 418/1609\n",
"Done: 419/1609\n",
"Done: 420/1609\n",
"Done: 421/1609\n",
"Done: 422/1609\n",
"Done: 423/1609\n",
"Done: 424/1609\n",
"Done: 425/1609\n",
"Done: 426/1609\n",
"Done: 427/1609\n",
"Done: 428/1609\n",
"Done: 429/1609\n",
"Done: 430/1609\n",
"Done: 431/1609\n",
"Done: 432/1609\n",
"Done: 433/1609\n",
"Done: 434/1609\n",
"Done: 435/1609\n",
"Done: 436/1609\n",
"Done: 437/1609\n",
"Done: 438/1609\n",
"Done: 439/1609\n",
"Done: 440/1609\n",
"Done: 441/1609\n",
"Done: 442/1609\n",
"Done: 443/1609\n",
"Done: 444/1609\n",
"Done: 445/1609\n",
"Done: 446/1609\n",
"Done: 447/1609\n",
"Done: 448/1609\n",
"Done: 449/1609\n",
"Done: 450/1609\n",
"Done: 451/1609\n",
"Done: 452/1609\n",
"Done: 453/1609\n",
"Done: 454/1609\n",
"Done: 455/1609\n",
"Done: 456/1609\n",
"Done: 457/1609\n",
"Done: 458/1609\n",
"Done: 459/1609\n",
"Done: 460/1609\n",
"Done: 461/1609\n",
"Done: 462/1609\n",
"Done: 463/1609\n",
"Done: 464/1609\n",
"Done: 465/1609\n",
"Done: 466/1609\n",
"Done: 467/1609\n",
"Done: 468/1609\n",
"Done: 469/1609\n",
"Done: 470/1609\n",
"Done: 471/1609\n",
"Done: 472/1609\n",
"Done: 473/1609\n",
"Done: 474/1609\n",
"Done: 475/1609\n",
"Done: 476/1609\n",
"Done: 477/1609\n",
"Done: 478/1609\n",
"Done: 479/1609\n",
"Done: 480/1609\n",
"Done: 481/1609\n",
"Done: 482/1609\n",
"Done: 483/1609\n",
"Done: 484/1609\n",
"Done: 485/1609\n",
"Done: 486/1609\n",
"Done: 487/1609\n",
"Done: 488/1609\n",
"Done: 489/1609\n",
"Done: 490/1609\n",
"Done: 491/1609\n",
"Done: 492/1609\n",
"Done: 493/1609\n",
"Done: 494/1609\n",
"Done: 495/1609\n",
"Done: 496/1609\n",
"Done: 497/1609\n",
"Done: 498/1609\n",
"Done: 499/1609\n",
"Done: 500/1609\n",
"Done: 501/1609\n",
"Done: 502/1609\n",
"Done: 503/1609\n",
"Done: 504/1609\n",
"Done: 505/1609\n",
"Done: 506/1609\n",
"Done: 507/1609\n",
"Done: 508/1609\n",
"Done: 509/1609\n",
"Done: 510/1609\n",
"Done: 511/1609\n",
"Done: 512/1609\n",
"Done: 513/1609\n",
"Done: 514/1609\n",
"Done: 515/1609\n",
"Done: 516/1609\n",
"Done: 517/1609\n",
"Done: 518/1609\n",
"Done: 519/1609\n",
"Done: 520/1609\n",
"Done: 521/1609\n",
"Done: 522/1609\n",
"Done: 523/1609\n",
"Done: 524/1609\n",
"Done: 525/1609\n",
"Done: 526/1609\n",
"Done: 527/1609\n",
"Done: 528/1609\n",
"Done: 529/1609\n",
"Done: 530/1609\n",
"Done: 531/1609\n",
"Done: 532/1609\n",
"Done: 533/1609\n",
"Done: 534/1609\n",
"Done: 535/1609\n",
"Done: 536/1609\n",
"Done: 537/1609\n",
"Done: 538/1609\n",
"Done: 539/1609\n",
"Done: 540/1609\n",
"Done: 541/1609\n",
"Done: 542/1609\n",
"Done: 543/1609\n",
"Done: 544/1609\n",
"Done: 545/1609\n",
"Done: 546/1609\n",
"Done: 547/1609\n",
"Done: 548/1609\n",
"Done: 549/1609\n",
"Done: 550/1609\n",
"Done: 551/1609\n",
"Done: 552/1609\n",
"Done: 553/1609\n",
"Done: 554/1609\n",
"Done: 555/1609\n",
"Done: 556/1609\n",
"Done: 557/1609\n",
"Done: 558/1609\n",
"Done: 559/1609\n",
"Done: 560/1609\n",
"Done: 561/1609\n",
"Done: 562/1609\n",
"Done: 563/1609\n",
"Done: 564/1609\n",
"Done: 565/1609\n",
"Done: 566/1609\n",
"Done: 567/1609\n",
"Done: 568/1609\n",
"Done: 569/1609\n",
"Done: 570/1609\n",
"Done: 571/1609\n",
"Done: 572/1609\n",
"Done: 573/1609\n",
"Done: 574/1609\n",
"Done: 575/1609\n",
"Done: 576/1609\n",
"Done: 577/1609\n",
"Done: 578/1609\n",
"Done: 579/1609\n",
"Done: 580/1609\n",
"Done: 581/1609\n",
"Done: 582/1609\n",
"Done: 583/1609\n",
"Done: 584/1609\n",
"Done: 585/1609\n",
"Done: 586/1609\n",
"Done: 587/1609\n",
"Done: 588/1609\n",
"Done: 589/1609\n",
"Done: 590/1609\n",
"Done: 591/1609\n",
"Done: 592/1609\n",
"Done: 593/1609\n",
"Done: 594/1609\n",
"Done: 595/1609\n",
"Done: 596/1609\n",
"Done: 597/1609\n",
"Done: 598/1609\n",
"Done: 599/1609\n",
"Done: 600/1609\n",
"Done: 601/1609\n",
"Done: 602/1609\n",
"Done: 603/1609\n",
"Done: 604/1609\n",
"Done: 605/1609\n",
"Done: 606/1609\n",
"Done: 607/1609\n",
"Done: 608/1609\n",
"Done: 609/1609\n",
"Done: 610/1609\n",
"Done: 611/1609\n",
"Done: 612/1609\n",
"Done: 613/1609\n",
"Done: 614/1609\n",
"Done: 615/1609\n",
"Done: 616/1609\n",
"Done: 617/1609\n",
"Done: 618/1609\n",
"Done: 619/1609\n",
"Done: 620/1609\n",
"Done: 621/1609\n",
"Done: 622/1609\n",
"Done: 623/1609\n",
"Done: 624/1609\n",
"Done: 625/1609\n",
"Done: 626/1609\n",
"Done: 627/1609\n",
"Done: 628/1609\n",
"Done: 629/1609\n",
"Done: 630/1609\n",
"Done: 631/1609\n",
"Done: 632/1609\n",
"Done: 633/1609\n",
"Done: 634/1609\n",
"Done: 635/1609\n",
"Done: 636/1609\n",
"Done: 637/1609\n",
"Done: 638/1609\n",
"Done: 639/1609\n",
"Done: 640/1609\n",
"Done: 641/1609\n",
"Done: 642/1609\n",
"Done: 643/1609\n",
"Done: 644/1609\n",
"Done: 645/1609\n",
"Done: 646/1609\n",
"Done: 647/1609\n",
"Done: 648/1609\n",
"Done: 649/1609\n",
"Done: 650/1609\n",
"Done: 651/1609\n",
"Done: 652/1609\n",
"Done: 653/1609\n",
"Done: 654/1609\n",
"Done: 655/1609\n",
"Done: 656/1609\n",
"Done: 657/1609\n",
"Done: 658/1609\n",
"Done: 659/1609\n",
"Done: 660/1609\n",
"Done: 661/1609\n",
"Done: 662/1609\n",
"Done: 663/1609\n",
"Done: 664/1609\n",
"Done: 665/1609\n",
"Done: 666/1609\n",
"Done: 667/1609\n",
"Done: 668/1609\n",
"Done: 669/1609\n",
"Done: 670/1609\n",
"Done: 671/1609\n",
"Done: 672/1609\n",
"Done: 673/1609\n",
"Done: 674/1609\n",
"Done: 675/1609\n",
"Done: 676/1609\n",
"Done: 677/1609\n",
"Done: 678/1609\n",
"Done: 679/1609\n",
"Done: 680/1609\n",
"Done: 681/1609\n",
"Done: 682/1609\n",
"Done: 683/1609\n",
"Done: 684/1609\n",
"Done: 685/1609\n",
"Done: 686/1609\n",
"Done: 687/1609\n",
"Done: 688/1609\n",
"Done: 689/1609\n",
"Done: 690/1609\n",
"Done: 691/1609\n",
"Done: 692/1609\n",
"Done: 693/1609\n",
"Done: 694/1609\n",
"Done: 695/1609\n",
"Done: 696/1609\n",
"Done: 697/1609\n",
"Done: 698/1609\n",
"Done: 699/1609\n",
"Done: 700/1609\n",
"Done: 701/1609\n",
"Done: 702/1609\n",
"Done: 703/1609\n",
"Done: 704/1609\n",
"Done: 705/1609\n",
"Done: 706/1609\n",
"Done: 707/1609\n",
"Done: 708/1609\n",
"Done: 709/1609\n",
"Done: 710/1609\n",
"Done: 711/1609\n",
"Done: 712/1609\n",
"Done: 713/1609\n",
"Done: 714/1609\n",
"Done: 715/1609\n",
"Done: 716/1609\n",
"Done: 717/1609\n",
"Done: 718/1609\n",
"Done: 719/1609\n",
"Done: 720/1609\n",
"Done: 721/1609\n",
"Done: 722/1609\n",
"Done: 723/1609\n",
"Done: 724/1609\n",
"Done: 725/1609\n",
"Done: 726/1609\n",
"Done: 727/1609\n",
"Done: 728/1609\n",
"Done: 729/1609\n",
"Done: 730/1609\n",
"Done: 731/1609\n",
"Done: 732/1609\n",
"Done: 733/1609\n",
"Done: 734/1609\n",
"Done: 735/1609\n",
"Done: 736/1609\n",
"Done: 737/1609\n",
"Done: 738/1609\n",
"Done: 739/1609\n",
"Done: 740/1609\n",
"Done: 741/1609\n",
"Done: 742/1609\n",
"Done: 743/1609\n",
"Done: 744/1609\n",
"Done: 745/1609\n",
"Done: 746/1609\n",
"Done: 747/1609\n",
"Done: 748/1609\n",
"Done: 749/1609\n",
"Done: 750/1609\n",
"Done: 751/1609\n",
"Done: 752/1609\n",
"Done: 753/1609\n",
"Done: 754/1609\n",
"Done: 755/1609\n",
"Done: 756/1609\n",
"Done: 757/1609\n",
"Done: 758/1609\n",
"Done: 759/1609\n",
"Done: 760/1609\n",
"Done: 761/1609\n",
"Done: 762/1609\n",
"Done: 763/1609\n",
"Done: 764/1609\n",
"Done: 765/1609\n",
"Done: 766/1609\n",
"Done: 767/1609\n",
"Done: 768/1609\n",
"Done: 769/1609\n",
"Done: 770/1609\n",
"Done: 771/1609\n",
"Done: 772/1609\n",
"Done: 773/1609\n",
"Done: 774/1609\n",
"Done: 775/1609\n",
"Done: 776/1609\n",
"Done: 777/1609\n",
"Done: 778/1609\n",
"Done: 779/1609\n",
"Done: 780/1609\n",
"Done: 781/1609\n",
"Done: 782/1609\n",
"Done: 783/1609\n",
"Done: 784/1609\n",
"Done: 785/1609\n",
"Done: 786/1609\n",
"Done: 787/1609\n",
"Done: 788/1609\n",
"Done: 789/1609\n",
"Done: 790/1609\n",
"Done: 791/1609\n",
"Done: 792/1609\n",
"Done: 793/1609\n",
"Done: 794/1609\n",
"Done: 795/1609\n",
"Done: 796/1609\n",
"Done: 797/1609\n",
"Done: 798/1609\n",
"Done: 799/1609\n",
"Done: 800/1609\n",
"Done: 801/1609\n",
"Done: 802/1609\n",
"Done: 803/1609\n",
"Done: 804/1609\n",
"Done: 805/1609\n",
"Done: 806/1609\n",
"Done: 807/1609\n",
"Done: 808/1609\n",
"Done: 809/1609\n",
"Done: 810/1609\n",
"Done: 811/1609\n",
"Done: 812/1609\n",
"Done: 813/1609\n",
"Done: 814/1609\n",
"Done: 815/1609\n",
"Done: 816/1609\n",
"Done: 817/1609\n",
"Done: 818/1609\n",
"Done: 819/1609\n",
"Done: 820/1609\n",
"Done: 821/1609\n",
"Done: 822/1609\n",
"Done: 823/1609\n",
"Done: 824/1609\n",
"Done: 825/1609\n",
"Done: 826/1609\n",
"Done: 827/1609\n",
"Done: 828/1609\n",
"Done: 829/1609\n",
"Done: 830/1609\n",
"Done: 831/1609\n",
"Done: 832/1609\n",
"Done: 833/1609\n",
"Done: 834/1609\n",
"Done: 835/1609\n",
"Done: 836/1609\n",
"Done: 837/1609\n",
"Done: 838/1609\n",
"Done: 839/1609\n",
"Done: 840/1609\n",
"Done: 841/1609\n",
"Done: 842/1609\n",
"Done: 843/1609\n",
"Done: 844/1609\n",
"Done: 845/1609\n",
"Done: 846/1609\n",
"Done: 847/1609\n",
"Done: 848/1609\n",
"Done: 849/1609\n",
"Done: 850/1609\n",
"Done: 851/1609\n",
"Done: 852/1609\n",
"Done: 853/1609\n",
"Done: 854/1609\n",
"Done: 855/1609\n",
"Done: 856/1609\n",
"Done: 857/1609\n",
"Done: 858/1609\n",
"Done: 859/1609\n",
"Done: 860/1609\n",
"Done: 861/1609\n",
"Done: 862/1609\n",
"Done: 863/1609\n",
"Done: 864/1609\n",
"Done: 865/1609\n",
"Done: 866/1609\n",
"Done: 867/1609\n",
"Done: 868/1609\n",
"Done: 869/1609\n",
"Done: 870/1609\n",
"Done: 871/1609\n",
"Done: 872/1609\n",
"Done: 873/1609\n",
"Done: 874/1609\n",
"Done: 875/1609\n",
"Done: 876/1609\n",
"Done: 877/1609\n",
"Done: 878/1609\n",
"Done: 879/1609\n",
"Done: 880/1609\n",
"Done: 881/1609\n",
"Done: 882/1609\n",
"Done: 883/1609\n",
"Done: 884/1609\n",
"Done: 885/1609\n",
"Done: 886/1609\n",
"Done: 887/1609\n",
"Done: 888/1609\n",
"Done: 889/1609\n",
"Done: 890/1609\n",
"Done: 891/1609\n",
"Done: 892/1609\n",
"Done: 893/1609\n",
"Done: 894/1609\n",
"Done: 895/1609\n",
"Done: 896/1609\n",
"Done: 897/1609\n",
"Done: 898/1609\n",
"Done: 899/1609\n",
"Done: 900/1609\n",
"Done: 901/1609\n",
"Done: 902/1609\n",
"Done: 903/1609\n",
"Done: 904/1609\n",
"Done: 905/1609\n",
"Done: 906/1609\n",
"Done: 907/1609\n",
"Done: 908/1609\n",
"Done: 909/1609\n",
"Done: 910/1609\n",
"Done: 911/1609\n",
"Done: 912/1609\n",
"Done: 913/1609\n",
"Done: 914/1609\n",
"Done: 915/1609\n",
"Done: 916/1609\n",
"Done: 917/1609\n",
"Done: 918/1609\n",
"Done: 919/1609\n",
"Done: 920/1609\n",
"Done: 921/1609\n",
"Done: 922/1609\n",
"Done: 923/1609\n",
"Done: 924/1609\n",
"Done: 925/1609\n",
"Done: 926/1609\n",
"Done: 927/1609\n",
"Done: 928/1609\n",
"Done: 929/1609\n",
"Done: 930/1609\n",
"Done: 931/1609\n",
"Done: 932/1609\n",
"Done: 933/1609\n",
"Done: 934/1609\n",
"Done: 935/1609\n",
"Done: 936/1609\n",
"Done: 937/1609\n",
"Done: 938/1609\n",
"Done: 939/1609\n",
"Done: 940/1609\n",
"Done: 941/1609\n",
"Done: 942/1609\n",
"Done: 943/1609\n",
"Done: 944/1609\n",
"Done: 945/1609\n",
"Done: 946/1609\n",
"Done: 947/1609\n",
"Done: 948/1609\n",
"Done: 949/1609\n",
"Done: 950/1609\n",
"Done: 951/1609\n",
"Done: 952/1609\n",
"Done: 953/1609\n",
"Done: 954/1609\n",
"Done: 955/1609\n",
"Done: 956/1609\n",
"Done: 957/1609\n",
"Done: 958/1609\n",
"Done: 959/1609\n",
"Done: 960/1609\n",
"Done: 961/1609\n",
"Done: 962/1609\n",
"Done: 963/1609\n",
"Done: 964/1609\n",
"Done: 965/1609\n",
"Done: 966/1609\n",
"Done: 967/1609\n",
"Done: 968/1609\n",
"Done: 969/1609\n",
"Done: 970/1609\n",
"Done: 971/1609\n",
"Done: 972/1609\n",
"Done: 973/1609\n",
"Done: 974/1609\n",
"Done: 975/1609\n",
"Done: 976/1609\n",
"Done: 977/1609\n",
"Done: 978/1609\n",
"Done: 979/1609\n",
"Done: 980/1609\n",
"Done: 981/1609\n",
"Done: 982/1609\n",
"Done: 983/1609\n",
"Done: 984/1609\n",
"Done: 985/1609\n",
"Done: 986/1609\n",
"Done: 987/1609\n",
"Done: 988/1609\n",
"Done: 989/1609\n",
"Done: 990/1609\n",
"Done: 991/1609\n",
"Done: 992/1609\n",
"Done: 993/1609\n",
"Done: 994/1609\n",
"Done: 995/1609\n",
"Done: 996/1609\n",
"Done: 997/1609\n",
"Done: 998/1609\n",
"Done: 999/1609\n",
"Done: 1000/1609\n",
"Done: 1001/1609\n",
"Done: 1002/1609\n",
"Done: 1003/1609\n",
"Done: 1004/1609\n",
"Done: 1005/1609\n",
"Done: 1006/1609\n",
"Done: 1007/1609\n",
"Done: 1008/1609\n",
"Done: 1009/1609\n",
"Done: 1010/1609\n",
"Done: 1011/1609\n",
"Done: 1012/1609\n",
"Done: 1013/1609\n",
"Done: 1014/1609\n",
"Done: 1015/1609\n",
"Done: 1016/1609\n",
"Done: 1017/1609\n",
"Done: 1018/1609\n",
"Done: 1019/1609\n",
"Done: 1020/1609\n",
"Done: 1021/1609\n",
"Done: 1022/1609\n",
"Done: 1023/1609\n",
"Done: 1024/1609\n",
"Done: 1025/1609\n",
"Done: 1026/1609\n",
"Done: 1027/1609\n",
"Done: 1028/1609\n",
"Done: 1029/1609\n",
"Done: 1030/1609\n",
"Done: 1031/1609\n",
"Done: 1032/1609\n",
"Done: 1033/1609\n",
"Done: 1034/1609\n",
"Done: 1035/1609\n",
"Done: 1036/1609\n",
"Done: 1037/1609\n",
"Done: 1038/1609\n",
"Done: 1039/1609\n",
"Done: 1040/1609\n",
"Done: 1041/1609\n",
"Done: 1042/1609\n",
"Done: 1043/1609\n",
"Done: 1044/1609\n",
"Done: 1045/1609\n",
"Done: 1046/1609\n",
"Done: 1047/1609\n",
"Done: 1048/1609\n",
"Done: 1049/1609\n",
"Done: 1050/1609\n",
"Done: 1051/1609\n",
"Done: 1052/1609\n",
"Done: 1053/1609\n",
"Done: 1054/1609\n",
"Done: 1055/1609\n",
"Done: 1056/1609\n",
"Done: 1057/1609\n",
"Done: 1058/1609\n",
"Done: 1059/1609\n",
"Done: 1060/1609\n",
"Done: 1061/1609\n",
"Done: 1062/1609\n",
"Done: 1063/1609\n",
"Done: 1064/1609\n",
"Done: 1065/1609\n",
"Done: 1066/1609\n",
"Done: 1067/1609\n",
"Done: 1068/1609\n",
"Done: 1069/1609\n",
"Done: 1070/1609\n",
"Done: 1071/1609\n",
"Done: 1072/1609\n",
"Done: 1073/1609\n",
"Done: 1074/1609\n",
"Done: 1075/1609\n",
"Done: 1076/1609\n",
"Done: 1077/1609\n",
"Done: 1078/1609\n",
"Done: 1079/1609\n",
"Done: 1080/1609\n",
"Done: 1081/1609\n",
"Done: 1082/1609\n",
"Done: 1083/1609\n",
"Done: 1084/1609\n",
"Done: 1085/1609\n",
"Done: 1086/1609\n",
"Done: 1087/1609\n",
"Done: 1088/1609\n",
"Done: 1089/1609\n",
"Done: 1090/1609\n",
"Done: 1091/1609\n",
"Done: 1092/1609\n",
"Done: 1093/1609\n",
"Done: 1094/1609\n",
"Done: 1095/1609\n",
"Done: 1096/1609\n",
"Done: 1097/1609\n",
"Done: 1098/1609\n",
"Done: 1099/1609\n",
"Done: 1100/1609\n",
"Done: 1101/1609\n",
"Done: 1102/1609\n",
"Done: 1103/1609\n",
"Done: 1104/1609\n",
"Done: 1105/1609\n",
"Done: 1106/1609\n",
"Done: 1107/1609\n",
"Done: 1108/1609\n",
"Done: 1109/1609\n",
"Done: 1110/1609\n",
"Done: 1111/1609\n",
"Done: 1112/1609\n",
"Done: 1113/1609\n",
"Done: 1114/1609\n",
"Done: 1115/1609\n",
"Done: 1116/1609\n",
"Done: 1117/1609\n",
"Done: 1118/1609\n",
"Done: 1119/1609\n",
"Done: 1120/1609\n",
"Done: 1121/1609\n",
"Done: 1122/1609\n",
"Done: 1123/1609\n",
"Done: 1124/1609\n",
"Done: 1125/1609\n",
"Done: 1126/1609\n",
"Done: 1127/1609\n",
"Done: 1128/1609\n",
"Done: 1129/1609\n",
"Done: 1130/1609\n",
"Done: 1131/1609\n",
"Done: 1132/1609\n",
"Done: 1133/1609\n",
"Done: 1134/1609\n",
"Done: 1135/1609\n",
"Done: 1136/1609\n",
"Done: 1137/1609\n",
"Done: 1138/1609\n",
"Done: 1139/1609\n",
"Done: 1140/1609\n",
"Done: 1141/1609\n",
"Done: 1142/1609\n",
"Done: 1143/1609\n",
"Done: 1144/1609\n",
"Done: 1145/1609\n",
"Done: 1146/1609\n",
"Done: 1147/1609\n",
"Done: 1148/1609\n",
"Done: 1149/1609\n",
"Done: 1150/1609\n",
"Done: 1151/1609\n",
"Done: 1152/1609\n",
"Done: 1153/1609\n",
"Done: 1154/1609\n",
"Done: 1155/1609\n",
"Done: 1156/1609\n",
"Done: 1157/1609\n",
"Done: 1158/1609\n",
"Done: 1159/1609\n",
"Done: 1160/1609\n",
"Done: 1161/1609\n",
"Done: 1162/1609\n",
"Done: 1163/1609\n",
"Done: 1164/1609\n",
"Done: 1165/1609\n",
"Done: 1166/1609\n",
"Done: 1167/1609\n",
"Done: 1168/1609\n",
"Done: 1169/1609\n",
"Done: 1170/1609\n",
"Done: 1171/1609\n",
"Done: 1172/1609\n",
"Done: 1173/1609\n",
"Done: 1174/1609\n",
"Done: 1175/1609\n",
"Done: 1176/1609\n",
"Done: 1177/1609\n",
"Done: 1178/1609\n",
"Done: 1179/1609\n",
"Done: 1180/1609\n",
"Done: 1181/1609\n",
"Done: 1182/1609\n",
"Done: 1183/1609\n",
"Done: 1184/1609\n",
"Done: 1185/1609\n",
"Done: 1186/1609\n",
"Done: 1187/1609\n",
"Done: 1188/1609\n",
"Done: 1189/1609\n",
"Done: 1190/1609\n",
"Done: 1191/1609\n",
"Done: 1192/1609\n",
"Done: 1193/1609\n",
"Done: 1194/1609\n",
"Done: 1195/1609\n",
"Done: 1196/1609\n",
"Done: 1197/1609\n",
"Done: 1198/1609\n",
"Done: 1199/1609\n",
"Done: 1200/1609\n",
"Done: 1201/1609\n",
"Done: 1202/1609\n",
"Done: 1203/1609\n",
"Done: 1204/1609\n",
"Done: 1205/1609\n",
"Done: 1206/1609\n",
"Done: 1207/1609\n",
"Done: 1208/1609\n",
"Done: 1209/1609\n",
"Done: 1210/1609\n",
"Done: 1211/1609\n",
"Done: 1212/1609\n",
"Done: 1213/1609\n",
"Done: 1214/1609\n",
"Done: 1215/1609\n",
"Done: 1216/1609\n",
"Done: 1217/1609\n",
"Done: 1218/1609\n",
"Done: 1219/1609\n",
"Done: 1220/1609\n",
"Done: 1221/1609\n",
"Done: 1222/1609\n",
"Done: 1223/1609\n",
"Done: 1224/1609\n",
"Done: 1225/1609\n",
"Done: 1226/1609\n",
"Done: 1227/1609\n",
"Done: 1228/1609\n",
"Done: 1229/1609\n",
"Done: 1230/1609\n",
"Done: 1231/1609\n",
"Done: 1232/1609\n",
"Done: 1233/1609\n",
"Done: 1234/1609\n",
"Done: 1235/1609\n",
"Done: 1236/1609\n",
"Done: 1237/1609\n",
"Done: 1238/1609\n",
"Done: 1239/1609\n",
"Done: 1240/1609\n",
"Done: 1241/1609\n",
"Done: 1242/1609\n",
"Done: 1243/1609\n",
"Done: 1244/1609\n",
"Done: 1245/1609\n",
"Done: 1246/1609\n",
"Done: 1247/1609\n",
"Done: 1248/1609\n",
"Done: 1249/1609\n",
"Done: 1250/1609\n",
"Done: 1251/1609\n",
"Done: 1252/1609\n",
"Done: 1253/1609\n",
"Done: 1254/1609\n",
"Done: 1255/1609\n",
"Done: 1256/1609\n",
"Done: 1257/1609\n",
"Done: 1258/1609\n",
"Done: 1259/1609\n",
"Done: 1260/1609\n",
"Done: 1261/1609\n",
"Done: 1262/1609\n",
"Done: 1263/1609\n",
"Done: 1264/1609\n",
"Done: 1265/1609\n",
"Done: 1266/1609\n",
"Done: 1267/1609\n",
"Done: 1268/1609\n",
"Done: 1269/1609\n",
"Done: 1270/1609\n",
"Done: 1271/1609\n",
"Done: 1272/1609\n",
"Done: 1273/1609\n",
"Done: 1274/1609\n",
"Done: 1275/1609\n",
"Done: 1276/1609\n",
"Done: 1277/1609\n",
"Done: 1278/1609\n",
"Done: 1279/1609\n",
"Done: 1280/1609\n",
"Done: 1281/1609\n",
"Done: 1282/1609\n",
"Done: 1283/1609\n",
"Done: 1284/1609\n",
"Done: 1285/1609\n",
"Done: 1286/1609\n",
"Done: 1287/1609\n",
"Done: 1288/1609\n",
"Done: 1289/1609\n",
"Done: 1290/1609\n",
"Done: 1291/1609\n",
"Done: 1292/1609\n",
"Done: 1293/1609\n",
"Done: 1294/1609\n",
"Done: 1295/1609\n",
"Done: 1296/1609\n",
"Done: 1297/1609\n",
"Done: 1298/1609\n",
"Done: 1299/1609\n",
"Done: 1300/1609\n",
"Done: 1301/1609\n",
"Done: 1302/1609\n",
"Done: 1303/1609\n",
"Done: 1304/1609\n",
"Done: 1305/1609\n",
"Done: 1306/1609\n",
"Done: 1307/1609\n",
"Done: 1308/1609\n",
"Done: 1309/1609\n",
"Done: 1310/1609\n",
"Done: 1311/1609\n",
"Done: 1312/1609\n",
"Done: 1313/1609\n",
"Done: 1314/1609\n",
"Done: 1315/1609\n",
"Done: 1316/1609\n",
"Done: 1317/1609\n",
"Done: 1318/1609\n",
"Done: 1319/1609\n",
"Done: 1320/1609\n",
"Done: 1321/1609\n",
"Done: 1322/1609\n",
"Done: 1323/1609\n",
"Done: 1324/1609\n",
"Done: 1325/1609\n",
"Done: 1326/1609\n",
"Done: 1327/1609\n",
"Done: 1328/1609\n",
"Done: 1329/1609\n",
"Done: 1330/1609\n",
"Done: 1331/1609\n",
"Done: 1332/1609\n",
"Done: 1333/1609\n",
"Done: 1334/1609\n",
"Done: 1335/1609\n",
"Done: 1336/1609\n",
"Done: 1337/1609\n",
"Done: 1338/1609\n",
"Done: 1339/1609\n",
"Done: 1340/1609\n",
"Done: 1341/1609\n",
"Done: 1342/1609\n",
"Done: 1343/1609\n",
"Done: 1344/1609\n",
"Done: 1345/1609\n",
"Done: 1346/1609\n",
"Done: 1347/1609\n",
"Done: 1348/1609\n",
"Done: 1349/1609\n",
"Done: 1350/1609\n",
"Done: 1351/1609\n",
"Done: 1352/1609\n",
"Done: 1353/1609\n",
"Done: 1354/1609\n",
"Done: 1355/1609\n",
"Done: 1356/1609\n",
"Done: 1357/1609\n",
"Done: 1358/1609\n",
"Done: 1359/1609\n",
"Done: 1360/1609\n",
"Done: 1361/1609\n",
"Done: 1362/1609\n",
"Done: 1363/1609\n",
"Done: 1364/1609\n",
"Done: 1365/1609\n",
"Done: 1366/1609\n",
"Done: 1367/1609\n",
"Done: 1368/1609\n",
"Done: 1369/1609\n",
"Done: 1370/1609\n",
"Done: 1371/1609\n",
"Done: 1372/1609\n",
"Done: 1373/1609\n",
"Done: 1374/1609\n",
"Done: 1375/1609\n",
"Done: 1376/1609\n",
"Done: 1377/1609\n",
"Done: 1378/1609\n",
"Done: 1379/1609\n",
"Done: 1380/1609\n",
"Done: 1381/1609\n",
"Done: 1382/1609\n",
"Done: 1383/1609\n",
"Done: 1384/1609\n",
"Done: 1385/1609\n",
"Done: 1386/1609\n",
"Done: 1387/1609\n",
"Done: 1388/1609\n",
"Done: 1389/1609\n",
"Done: 1390/1609\n",
"Done: 1391/1609\n",
"Done: 1392/1609\n",
"Done: 1393/1609\n",
"Done: 1394/1609\n",
"Done: 1395/1609\n",
"Done: 1396/1609\n",
"Done: 1397/1609\n",
"Done: 1398/1609\n",
"Done: 1399/1609\n",
"Done: 1400/1609\n",
"Done: 1401/1609\n",
"Done: 1402/1609\n",
"Done: 1403/1609\n",
"Done: 1404/1609\n",
"Done: 1405/1609\n",
"Done: 1406/1609\n",
"Done: 1407/1609\n",
"Done: 1408/1609\n",
"Done: 1409/1609\n",
"Done: 1410/1609\n",
"Done: 1411/1609\n",
"Done: 1412/1609\n",
"Done: 1413/1609\n",
"Done: 1414/1609\n",
"Done: 1415/1609\n",
"Done: 1416/1609\n",
"Done: 1417/1609\n",
"Done: 1418/1609\n",
"Done: 1419/1609\n",
"Done: 1420/1609\n",
"Done: 1421/1609\n",
"Done: 1422/1609\n",
"Done: 1423/1609\n",
"Done: 1424/1609\n",
"Done: 1425/1609\n",
"Done: 1426/1609\n",
"Done: 1427/1609\n",
"Done: 1428/1609\n",
"Done: 1429/1609\n",
"Done: 1430/1609\n",
"Done: 1431/1609\n",
"Done: 1432/1609\n",
"Done: 1433/1609\n",
"Done: 1434/1609\n",
"Done: 1435/1609\n",
"Done: 1436/1609\n",
"Done: 1437/1609\n",
"Done: 1438/1609\n",
"Done: 1439/1609\n",
"Done: 1440/1609\n",
"Done: 1441/1609\n",
"Done: 1442/1609\n",
"Done: 1443/1609\n",
"Done: 1444/1609\n",
"Done: 1445/1609\n",
"Done: 1446/1609\n",
"Done: 1447/1609\n",
"Done: 1448/1609\n",
"Done: 1449/1609\n",
"Done: 1450/1609\n",
"Done: 1451/1609\n",
"Done: 1452/1609\n",
"Done: 1453/1609\n",
"Done: 1454/1609\n",
"Done: 1455/1609\n",
"Done: 1456/1609\n",
"Done: 1457/1609\n",
"Done: 1458/1609\n",
"Done: 1459/1609\n",
"Done: 1460/1609\n",
"Done: 1461/1609\n",
"Done: 1462/1609\n",
"Done: 1463/1609\n",
"Done: 1464/1609\n",
"Done: 1465/1609\n",
"Done: 1466/1609\n",
"Done: 1467/1609\n",
"Done: 1468/1609\n",
"Done: 1469/1609\n",
"Done: 1470/1609\n",
"Done: 1471/1609\n",
"Done: 1472/1609\n",
"Done: 1473/1609\n",
"Done: 1474/1609\n",
"Done: 1475/1609\n",
"Done: 1476/1609\n",
"Done: 1477/1609\n",
"Done: 1478/1609\n",
"Done: 1479/1609\n",
"Done: 1480/1609\n",
"Done: 1481/1609\n",
"Done: 1482/1609\n",
"Done: 1483/1609\n",
"Done: 1484/1609\n",
"Done: 1485/1609\n",
"Done: 1486/1609\n",
"Done: 1487/1609\n",
"Done: 1488/1609\n",
"Done: 1489/1609\n",
"Done: 1490/1609\n",
"Done: 1491/1609\n",
"Done: 1492/1609\n",
"Done: 1493/1609\n",
"Done: 1494/1609\n",
"Done: 1495/1609\n",
"Done: 1496/1609\n",
"Done: 1497/1609\n",
"Done: 1498/1609\n",
"Done: 1499/1609\n",
"Done: 1500/1609\n",
"Done: 1501/1609\n",
"Done: 1502/1609\n",
"Done: 1503/1609\n",
"Done: 1504/1609\n",
"Done: 1505/1609\n",
"Done: 1506/1609\n",
"Done: 1507/1609\n",
"Done: 1508/1609\n",
"Done: 1509/1609\n",
"Done: 1510/1609\n",
"Done: 1511/1609\n",
"Done: 1512/1609\n",
"Done: 1513/1609\n",
"Done: 1514/1609\n",
"Done: 1515/1609\n",
"Done: 1516/1609\n",
"Done: 1517/1609\n",
"Done: 1518/1609\n",
"Done: 1519/1609\n",
"Done: 1520/1609\n",
"Done: 1521/1609\n",
"Done: 1522/1609\n",
"Done: 1523/1609\n",
"Done: 1524/1609\n",
"Done: 1525/1609\n",
"Done: 1526/1609\n",
"Done: 1527/1609\n",
"Done: 1528/1609\n",
"Done: 1529/1609\n",
"Done: 1530/1609\n",
"Done: 1531/1609\n",
"Done: 1532/1609\n",
"Done: 1533/1609\n",
"Done: 1534/1609\n",
"Done: 1535/1609\n",
"Done: 1536/1609\n",
"Done: 1537/1609\n",
"Done: 1538/1609\n",
"Done: 1539/1609\n",
"Done: 1540/1609\n",
"Done: 1541/1609\n",
"Done: 1542/1609\n",
"Done: 1543/1609\n",
"Done: 1544/1609\n",
"Done: 1545/1609\n",
"Done: 1546/1609\n",
"Done: 1547/1609\n",
"Done: 1548/1609\n",
"Done: 1549/1609\n",
"Done: 1550/1609\n",
"Done: 1551/1609\n",
"Done: 1552/1609\n",
"Done: 1553/1609\n",
"Done: 1554/1609\n",
"Done: 1555/1609\n",
"Done: 1556/1609\n",
"Done: 1557/1609\n",
"Done: 1558/1609\n",
"Done: 1559/1609\n",
"Done: 1560/1609\n",
"Done: 1561/1609\n",
"Done: 1562/1609\n",
"Done: 1563/1609\n",
"Done: 1564/1609\n",
"Done: 1565/1609\n",
"Done: 1566/1609\n",
"Done: 1567/1609\n",
"Done: 1568/1609\n",
"Done: 1569/1609\n",
"Done: 1570/1609\n",
"Done: 1571/1609\n",
"Done: 1572/1609\n",
"Done: 1573/1609\n",
"Done: 1574/1609\n",
"Done: 1575/1609\n",
"Done: 1576/1609\n",
"Done: 1577/1609\n",
"Done: 1578/1609\n",
"Done: 1579/1609\n",
"Done: 1580/1609\n",
"Done: 1581/1609\n",
"Done: 1582/1609\n",
"Done: 1583/1609\n",
"Done: 1584/1609\n",
"Done: 1585/1609\n",
"Done: 1586/1609\n",
"Done: 1587/1609\n",
"Done: 1588/1609\n",
"Done: 1589/1609\n",
"Done: 1590/1609\n",
"Done: 1591/1609\n",
"Done: 1592/1609\n",
"Done: 1593/1609\n",
"Done: 1594/1609\n",
"Done: 1595/1609\n",
"Done: 1596/1609\n",
"Done: 1597/1609\n",
"Done: 1598/1609\n",
"Done: 1599/1609\n",
"Done: 1600/1609\n",
"Done: 1601/1609\n",
"Done: 1602/1609\n",
"Done: 1603/1609\n",
"Done: 1604/1609\n",
"Done: 1605/1609\n",
"Done: 1606/1609\n",
"Done: 1607/1609\n",
"Done: 1608/1609\n",
"Done: 1609/1609\n"
],
"name": "stdout"
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "bOmupai7RKnq",
"colab_type": "text"
},
"source": [
"Run the matting algorithm. If your video was captured with a fixed camera, comment the first line and uncomment the second before running."
]
},
{
"cell_type": "code",
"metadata": {
"id": "_OLkkwr8RRJD",
"colab_type": "code",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 1000
},
"outputId": "6874d402-04d1-4048-d3d0-6a798d43114c"
},
"source": [
"!CUDA_VISIBLE_DEVICES=0 python test_background-matting_image.py -m real-hand-held -i colab_inputs_video/input/ -o colab_inputs_video/output/ -tb colab_inputs_video/background/\n",
"# !CUDA_VISIBLE_DEVICES=0 python test_background-matting_image.py -m real-fixed-cam -i colab_inputs_video/input/ -o colab_inputs_video/output/ -tb colab_inputs_video/background/ -b colab_inputs_video/$BM_SOURCE_STILL"
],
"execution_count": 25,
"outputs": [
{
"output_type": "stream",
"text": [
"CUDA Device: 0\n",
"Using video mode\n",
"Done: 1/1609\n",
"Done: 2/1609\n",
"Done: 3/1609\n",
"Done: 4/1609\n",
"Done: 5/1609\n",
"Done: 6/1609\n",
"Done: 7/1609\n",
"Done: 8/1609\n",
"Done: 9/1609\n",
"Done: 10/1609\n",
"Done: 11/1609\n",
"Done: 12/1609\n",
"Done: 13/1609\n",
"Done: 14/1609\n",
"Done: 15/1609\n",
"Done: 16/1609\n",
"Done: 17/1609\n",
"Done: 18/1609\n",
"Done: 19/1609\n",
"Done: 20/1609\n",
"Done: 21/1609\n",
"Done: 22/1609\n",
"Done: 23/1609\n",
"Done: 24/1609\n",
"Done: 25/1609\n",
"Done: 26/1609\n",
"Done: 27/1609\n",
"Done: 28/1609\n",
"Done: 29/1609\n",
"Done: 30/1609\n",
"Done: 31/1609\n",
"Done: 32/1609\n",
"Done: 33/1609\n",
"Done: 34/1609\n",
"Done: 35/1609\n",
"Done: 36/1609\n",
"Done: 37/1609\n",
"Done: 38/1609\n",
"Done: 39/1609\n",
"Done: 40/1609\n",
"Done: 41/1609\n",
"Done: 42/1609\n",
"Done: 43/1609\n",
"Done: 44/1609\n",
"Done: 45/1609\n",
"Done: 46/1609\n",
"Done: 47/1609\n",
"Done: 48/1609\n",
"Done: 49/1609\n",
"Done: 50/1609\n",
"Done: 51/1609\n",
"Done: 52/1609\n",
"Done: 53/1609\n",
"Done: 54/1609\n",
"Done: 55/1609\n",
"Done: 56/1609\n",
"Done: 57/1609\n",
"Done: 58/1609\n",
"Done: 59/1609\n",
"Done: 60/1609\n",
"Done: 61/1609\n",
"Done: 62/1609\n",
"Done: 63/1609\n",
"Done: 64/1609\n",
"Done: 65/1609\n",
"Done: 66/1609\n",
"Done: 67/1609\n",
"Done: 68/1609\n",
"Done: 69/1609\n",
"Done: 70/1609\n",
"Done: 71/1609\n",
"Done: 72/1609\n",
"Done: 73/1609\n",
"Done: 74/1609\n",
"Done: 75/1609\n",
"Done: 76/1609\n",
"Done: 77/1609\n",
"Done: 78/1609\n",
"Done: 79/1609\n",
"Done: 80/1609\n",
"Done: 81/1609\n",
"Done: 82/1609\n",
"Done: 83/1609\n",
"Done: 84/1609\n",
"Done: 85/1609\n",
"Done: 86/1609\n",
"Done: 87/1609\n",
"Done: 88/1609\n",
"Done: 89/1609\n",
"Done: 90/1609\n",
"Done: 91/1609\n",
"Done: 92/1609\n",
"Done: 93/1609\n",
"Done: 94/1609\n",
"Done: 95/1609\n",
"Done: 96/1609\n",
"Done: 97/1609\n",
"Done: 98/1609\n",
"Done: 99/1609\n",
"Done: 100/1609\n",
"Done: 101/1609\n",
"Done: 102/1609\n",
"Done: 103/1609\n",
"Done: 104/1609\n",
"Done: 105/1609\n",
"Done: 106/1609\n",
"Done: 107/1609\n",
"Done: 108/1609\n",
"Done: 109/1609\n",
"Done: 110/1609\n",
"Done: 111/1609\n",
"Done: 112/1609\n",
"Done: 113/1609\n",
"Done: 114/1609\n",
"Done: 115/1609\n",
"Done: 116/1609\n",
"Done: 117/1609\n",
"Done: 118/1609\n",
"Done: 119/1609\n",
"Done: 120/1609\n",
"Done: 121/1609\n",
"Done: 122/1609\n",
"Done: 123/1609\n",
"Done: 124/1609\n",
"Done: 125/1609\n",
"Done: 126/1609\n",
"Done: 127/1609\n",
"Done: 128/1609\n",
"Done: 129/1609\n",
"Done: 130/1609\n",
"Done: 131/1609\n",
"Done: 132/1609\n",
"Done: 133/1609\n",
"Done: 134/1609\n",
"Done: 135/1609\n",
"Done: 136/1609\n",
"Done: 137/1609\n",
"Done: 138/1609\n",
"Done: 139/1609\n",
"Done: 140/1609\n",
"Done: 141/1609\n",
"Done: 142/1609\n",
"Done: 143/1609\n",
"Done: 144/1609\n",
"Done: 145/1609\n",
"Done: 146/1609\n",
"Done: 147/1609\n",
"Done: 148/1609\n",
"Done: 149/1609\n",
"Done: 150/1609\n",
"Done: 151/1609\n",
"Done: 152/1609\n",
"Done: 153/1609\n",
"Done: 154/1609\n",
"Done: 155/1609\n",
"Done: 156/1609\n",
"Done: 157/1609\n",
"Done: 158/1609\n",
"Done: 159/1609\n",
"Done: 160/1609\n",
"Done: 161/1609\n",
"Done: 162/1609\n",
"Done: 163/1609\n",
"Done: 164/1609\n",
"Done: 165/1609\n",
"Done: 166/1609\n",
"Done: 167/1609\n",
"Done: 168/1609\n",
"Done: 169/1609\n",
"Done: 170/1609\n",
"Done: 171/1609\n",
"Done: 172/1609\n",
"Done: 173/1609\n",
"Done: 174/1609\n",
"Done: 175/1609\n",
"Done: 176/1609\n",
"Done: 177/1609\n",
"Done: 178/1609\n",
"Done: 179/1609\n",
"Done: 180/1609\n",
"Done: 181/1609\n",
"Done: 182/1609\n",
"Done: 183/1609\n",
"Done: 184/1609\n",
"Done: 185/1609\n",
"Done: 186/1609\n",
"Done: 187/1609\n",
"Done: 188/1609\n",
"Done: 189/1609\n",
"Done: 190/1609\n",
"Done: 191/1609\n",
"Done: 192/1609\n",
"Done: 193/1609\n",
"Done: 194/1609\n",
"Done: 195/1609\n",
"Done: 196/1609\n",
"Done: 197/1609\n",
"Done: 198/1609\n",
"Done: 199/1609\n",
"Done: 200/1609\n",
"Done: 201/1609\n",
"Done: 202/1609\n",
"Done: 203/1609\n",
"Done: 204/1609\n",
"Done: 205/1609\n",
"Done: 206/1609\n",
"Done: 207/1609\n",
"Done: 208/1609\n",
"Done: 209/1609\n",
"Done: 210/1609\n",
"Done: 211/1609\n",
"Done: 212/1609\n",
"Done: 213/1609\n",
"Done: 214/1609\n",
"Done: 215/1609\n",
"Done: 216/1609\n",
"Done: 217/1609\n",
"Done: 218/1609\n",
"Done: 219/1609\n",
"Done: 220/1609\n",
"Done: 221/1609\n",
"Done: 222/1609\n",
"Done: 223/1609\n",
"Done: 224/1609\n",
"Done: 225/1609\n",
"Done: 226/1609\n",
"Done: 227/1609\n",
"Done: 228/1609\n",
"Done: 229/1609\n",
"Done: 230/1609\n",
"Done: 231/1609\n",
"Done: 232/1609\n",
"Done: 233/1609\n",
"Done: 234/1609\n",
"Done: 235/1609\n",
"Done: 236/1609\n",
"Done: 237/1609\n",
"Done: 238/1609\n",
"Done: 239/1609\n",
"Done: 240/1609\n",
"Done: 241/1609\n",
"Done: 242/1609\n",
"Done: 243/1609\n",
"Done: 244/1609\n",
"Done: 245/1609\n",
"Done: 246/1609\n",
"Done: 247/1609\n",
"Done: 248/1609\n",
"Done: 249/1609\n",
"Done: 250/1609\n",
"Done: 251/1609\n",
"Done: 252/1609\n",
"Done: 253/1609\n",
"Done: 254/1609\n",
"Done: 255/1609\n",
"Done: 256/1609\n",
"Done: 257/1609\n",
"Done: 258/1609\n",
"Done: 259/1609\n",
"Done: 260/1609\n",
"Done: 261/1609\n",
"Done: 262/1609\n",
"Done: 263/1609\n",
"Done: 264/1609\n",
"Done: 265/1609\n",
"Done: 266/1609\n",
"Done: 267/1609\n",
"Done: 268/1609\n",
"Done: 269/1609\n",
"Done: 270/1609\n",
"Done: 271/1609\n",
"Done: 272/1609\n",
"Done: 273/1609\n",
"Done: 274/1609\n",
"Done: 275/1609\n",
"Done: 276/1609\n",
"Done: 277/1609\n",
"Done: 278/1609\n",
"Done: 279/1609\n",
"Done: 280/1609\n",
"Done: 281/1609\n",
"Done: 282/1609\n",
"Done: 283/1609\n",
"Done: 284/1609\n",
"Done: 285/1609\n",
"Done: 286/1609\n",
"Done: 287/1609\n",
"Done: 288/1609\n",
"Done: 289/1609\n",
"Done: 290/1609\n",
"Done: 291/1609\n",
"Done: 292/1609\n",
"Done: 293/1609\n",
"Done: 294/1609\n",
"Done: 295/1609\n",
"Done: 296/1609\n",
"Done: 297/1609\n",
"Done: 298/1609\n",
"Done: 299/1609\n",
"Done: 300/1609\n",
"Done: 301/1609\n",
"Done: 302/1609\n",
"Done: 303/1609\n",
"Done: 304/1609\n",
"Done: 305/1609\n",
"Done: 306/1609\n",
"Done: 307/1609\n",
"Done: 308/1609\n",
"Done: 309/1609\n",
"Done: 310/1609\n",
"Done: 311/1609\n",
"Done: 312/1609\n",
"Done: 313/1609\n",
"Done: 314/1609\n",
"Done: 315/1609\n",
"Done: 316/1609\n",
"Done: 317/1609\n",
"Done: 318/1609\n",
"Done: 319/1609\n",
"Done: 320/1609\n",
"Done: 321/1609\n",
"Done: 322/1609\n",
"Done: 323/1609\n",
"Done: 324/1609\n",
"Done: 325/1609\n",
"Done: 326/1609\n",
"Done: 327/1609\n",
"Done: 328/1609\n",
"Done: 329/1609\n",
"Done: 330/1609\n",
"Done: 331/1609\n",
"Done: 332/1609\n",
"Done: 333/1609\n",
"Done: 334/1609\n",
"Done: 335/1609\n",
"Done: 336/1609\n",
"Done: 337/1609\n",
"Done: 338/1609\n",
"Done: 339/1609\n",
"Done: 340/1609\n",
"Done: 341/1609\n",
"Done: 342/1609\n",
"Done: 343/1609\n",
"Done: 344/1609\n",
"Done: 345/1609\n",
"Done: 346/1609\n",
"Done: 347/1609\n",
"Done: 348/1609\n",
"Done: 349/1609\n",
"Done: 350/1609\n",
"Done: 351/1609\n",
"Done: 352/1609\n",
"Done: 353/1609\n",
"Done: 354/1609\n",
"Done: 355/1609\n",
"Done: 356/1609\n",
"Done: 357/1609\n",
"Done: 358/1609\n",
"Done: 359/1609\n",
"Done: 360/1609\n",
"Done: 361/1609\n",
"Done: 362/1609\n",
"Done: 363/1609\n",
"Done: 364/1609\n",
"Done: 365/1609\n",
"Done: 366/1609\n",
"Done: 367/1609\n",
"Done: 368/1609\n",
"Done: 369/1609\n",
"Done: 370/1609\n",
"Done: 371/1609\n",
"Done: 372/1609\n",
"Done: 373/1609\n",
"Done: 374/1609\n",
"Done: 375/1609\n",
"Done: 376/1609\n",
"Done: 377/1609\n",
"Done: 378/1609\n",
"Done: 379/1609\n",
"Done: 380/1609\n",
"Done: 381/1609\n",
"Done: 382/1609\n",
"Done: 383/1609\n",
"Done: 384/1609\n",
"Done: 385/1609\n",
"Done: 386/1609\n",
"Done: 387/1609\n",
"Done: 388/1609\n",
"Done: 389/1609\n",
"Done: 390/1609\n",
"Done: 391/1609\n",
"Done: 392/1609\n",
"Done: 393/1609\n",
"Done: 394/1609\n",
"Done: 395/1609\n",
"Done: 396/1609\n",
"Done: 397/1609\n",
"Done: 398/1609\n",
"Done: 399/1609\n",
"Done: 400/1609\n",
"Done: 401/1609\n",
"Done: 402/1609\n",
"Done: 403/1609\n",
"Done: 404/1609\n",
"Done: 405/1609\n",
"Done: 406/1609\n",
"Done: 407/1609\n",
"Done: 408/1609\n",
"Done: 409/1609\n",
"Done: 410/1609\n",
"Done: 411/1609\n",
"Done: 412/1609\n",
"Done: 413/1609\n",
"Done: 414/1609\n",
"Done: 415/1609\n",
"Done: 416/1609\n",
"Done: 417/1609\n",
"Done: 418/1609\n",
"Done: 419/1609\n",
"Done: 420/1609\n",
"Done: 421/1609\n",
"Done: 422/1609\n",
"Done: 423/1609\n",
"Done: 424/1609\n",
"Done: 425/1609\n",
"Done: 426/1609\n",
"Done: 427/1609\n",
"Done: 428/1609\n",
"Done: 429/1609\n",
"Done: 430/1609\n",
"Done: 431/1609\n",
"Done: 432/1609\n",
"Done: 433/1609\n",
"Done: 434/1609\n",
"Done: 435/1609\n",
"Done: 436/1609\n",
"Done: 437/1609\n",
"Done: 438/1609\n",
"Done: 439/1609\n",
"Done: 440/1609\n",
"Done: 441/1609\n",
"Done: 442/1609\n",
"Done: 443/1609\n",
"Done: 444/1609\n",
"Done: 445/1609\n",
"Done: 446/1609\n",
"Done: 447/1609\n",
"Done: 448/1609\n",
"Done: 449/1609\n",
"Done: 450/1609\n",
"Done: 451/1609\n",
"Done: 452/1609\n",
"Done: 453/1609\n",
"Done: 454/1609\n",
"Done: 455/1609\n",
"Done: 456/1609\n",
"Done: 457/1609\n",
"Done: 458/1609\n",
"Done: 459/1609\n",
"Done: 460/1609\n",
"Done: 461/1609\n",
"Done: 462/1609\n",
"Done: 463/1609\n",
"Done: 464/1609\n",
"Done: 465/1609\n",
"Done: 466/1609\n",
"Done: 467/1609\n",
"Done: 468/1609\n",
"Done: 469/1609\n",
"Done: 470/1609\n",
"Done: 471/1609\n",
"Done: 472/1609\n",
"Done: 473/1609\n",
"Done: 474/1609\n",
"Done: 475/1609\n",
"Done: 476/1609\n",
"Done: 477/1609\n",
"Done: 478/1609\n",
"Done: 479/1609\n",
"Done: 480/1609\n",
"Done: 481/1609\n",
"Done: 482/1609\n",
"Done: 483/1609\n",
"Done: 484/1609\n",
"Done: 485/1609\n",
"Done: 486/1609\n",
"Done: 487/1609\n",
"Done: 488/1609\n",
"Done: 489/1609\n",
"Done: 490/1609\n",
"Done: 491/1609\n",
"Done: 492/1609\n",
"Done: 493/1609\n",
"Done: 494/1609\n",
"Done: 495/1609\n",
"Done: 496/1609\n",
"Done: 497/1609\n",
"Done: 498/1609\n",
"Done: 499/1609\n",
"Done: 500/1609\n",
"Done: 501/1609\n",
"Done: 502/1609\n",
"Done: 503/1609\n",
"Done: 504/1609\n",
"Done: 505/1609\n",
"Done: 506/1609\n",
"Done: 507/1609\n",
"Done: 508/1609\n",
"Done: 509/1609\n",
"Done: 510/1609\n",
"Done: 511/1609\n",
"Done: 512/1609\n",
"Done: 513/1609\n",
"Done: 514/1609\n",
"Done: 515/1609\n",
"Done: 516/1609\n",
"Done: 517/1609\n",
"Done: 518/1609\n",
"Done: 519/1609\n",
"Done: 520/1609\n",
"Done: 521/1609\n",
"Done: 522/1609\n",
"Done: 523/1609\n",
"Done: 524/1609\n",
"Done: 525/1609\n",
"Done: 526/1609\n",
"Done: 527/1609\n",
"Done: 528/1609\n",
"Done: 529/1609\n",
"Done: 530/1609\n",
"Done: 531/1609\n",
"Done: 532/1609\n",
"Done: 533/1609\n",
"Done: 534/1609\n",
"Done: 535/1609\n",
"Done: 536/1609\n",
"Done: 537/1609\n",
"Done: 538/1609\n",
"Done: 539/1609\n",
"Done: 540/1609\n",
"Done: 541/1609\n",
"Done: 542/1609\n",
"Done: 543/1609\n",
"Done: 544/1609\n",
"Done: 545/1609\n",
"Done: 546/1609\n",
"Done: 547/1609\n",
"Done: 548/1609\n",
"Done: 549/1609\n",
"Done: 550/1609\n",
"Done: 551/1609\n",
"Done: 552/1609\n",
"Done: 553/1609\n",
"Done: 554/1609\n",
"Done: 555/1609\n",
"Done: 556/1609\n",
"Done: 557/1609\n",
"Done: 558/1609\n",
"Done: 559/1609\n",
"Done: 560/1609\n",
"Done: 561/1609\n",
"Done: 562/1609\n",
"Done: 563/1609\n",
"Done: 564/1609\n",
"Done: 565/1609\n",
"Done: 566/1609\n",
"Done: 567/1609\n",
"Done: 568/1609\n",
"Done: 569/1609\n",
"Done: 570/1609\n",
"Done: 571/1609\n",
"Done: 572/1609\n",
"Done: 573/1609\n",
"Done: 574/1609\n",
"Done: 575/1609\n",
"Done: 576/1609\n",
"Done: 577/1609\n",
"Done: 578/1609\n",
"Done: 579/1609\n",
"Done: 580/1609\n",
"Done: 581/1609\n",
"Done: 582/1609\n",
"Done: 583/1609\n",
"Done: 584/1609\n",
"Done: 585/1609\n",
"Done: 586/1609\n",
"Done: 587/1609\n",
"Done: 588/1609\n",
"Done: 589/1609\n",
"Done: 590/1609\n",
"Done: 591/1609\n",
"Done: 592/1609\n",
"Done: 593/1609\n",
"Done: 594/1609\n",
"Done: 595/1609\n",
"Done: 596/1609\n",
"Done: 597/1609\n",
"Done: 598/1609\n",
"Done: 599/1609\n",
"Done: 600/1609\n",
"Done: 601/1609\n",
"Done: 602/1609\n",
"Done: 603/1609\n",
"Done: 604/1609\n",
"Done: 605/1609\n",
"Done: 606/1609\n",
"Done: 607/1609\n",
"Done: 608/1609\n",
"Done: 609/1609\n",
"Done: 610/1609\n",
"Done: 611/1609\n",
"Done: 612/1609\n",
"Done: 613/1609\n",
"Done: 614/1609\n",
"Done: 615/1609\n",
"Done: 616/1609\n",
"Done: 617/1609\n",
"Done: 618/1609\n",
"Done: 619/1609\n",
"Done: 620/1609\n",
"Done: 621/1609\n",
"Done: 622/1609\n",
"Done: 623/1609\n",
"Done: 624/1609\n",
"Done: 625/1609\n",
"Done: 626/1609\n",
"Done: 627/1609\n",
"Done: 628/1609\n",
"Done: 629/1609\n",
"Done: 630/1609\n",
"Done: 631/1609\n",
"Done: 632/1609\n",
"Done: 633/1609\n",
"Done: 634/1609\n",
"Done: 635/1609\n",
"Done: 636/1609\n",
"Done: 637/1609\n",
"Done: 638/1609\n",
"Done: 639/1609\n",
"Done: 640/1609\n",
"Done: 641/1609\n",
"Done: 642/1609\n",
"Done: 643/1609\n",
"Done: 644/1609\n",
"Done: 645/1609\n",
"Done: 646/1609\n",
"Done: 647/1609\n",
"Done: 648/1609\n",
"Done: 649/1609\n",
"Done: 650/1609\n",
"Done: 651/1609\n",
"Done: 652/1609\n",
"Done: 653/1609\n",
"Done: 654/1609\n",
"Done: 655/1609\n",
"Done: 656/1609\n",
"Done: 657/1609\n",
"Done: 658/1609\n",
"Done: 659/1609\n",
"Done: 660/1609\n",
"Done: 661/1609\n",
"Done: 662/1609\n",
"Done: 663/1609\n",
"Done: 664/1609\n",
"Done: 665/1609\n",
"Done: 666/1609\n",
"Done: 667/1609\n",
"Done: 668/1609\n",
"Done: 669/1609\n",
"Done: 670/1609\n",
"Done: 671/1609\n",
"Done: 672/1609\n",
"Done: 673/1609\n",
"Done: 674/1609\n",
"Done: 675/1609\n",
"Done: 676/1609\n",
"Done: 677/1609\n",
"Done: 678/1609\n",
"Done: 679/1609\n",
"Done: 680/1609\n",
"Done: 681/1609\n",
"Done: 682/1609\n",
"Done: 683/1609\n",
"Done: 684/1609\n",
"Done: 685/1609\n",
"Done: 686/1609\n",
"Done: 687/1609\n",
"Done: 688/1609\n",
"Done: 689/1609\n",
"Done: 690/1609\n",
"Done: 691/1609\n",
"Done: 692/1609\n",
"Done: 693/1609\n",
"Done: 694/1609\n",
"Done: 695/1609\n",
"Done: 696/1609\n",
"Done: 697/1609\n",
"Done: 698/1609\n",
"Done: 699/1609\n",
"Done: 700/1609\n",
"Done: 701/1609\n",
"Done: 702/1609\n",
"Done: 703/1609\n",
"Done: 704/1609\n",
"Done: 705/1609\n",
"Done: 706/1609\n",
"Done: 707/1609\n",
"Done: 708/1609\n",
"Done: 709/1609\n",
"Done: 710/1609\n",
"Done: 711/1609\n",
"Done: 712/1609\n",
"Done: 713/1609\n",
"Done: 714/1609\n",
"Done: 715/1609\n",
"Done: 716/1609\n",
"Done: 717/1609\n",
"Done: 718/1609\n",
"Done: 719/1609\n",
"Done: 720/1609\n",
"Done: 721/1609\n",
"Done: 722/1609\n",
"Done: 723/1609\n",
"Done: 724/1609\n",
"Done: 725/1609\n",
"Done: 726/1609\n",
"Done: 727/1609\n",
"Done: 728/1609\n",
"Done: 729/1609\n",
"Done: 730/1609\n",
"Done: 731/1609\n",
"Done: 732/1609\n",
"Done: 733/1609\n",
"Done: 734/1609\n",
"Done: 735/1609\n",
"Done: 736/1609\n",
"Done: 737/1609\n",
"Done: 738/1609\n",
"Done: 739/1609\n",
"Done: 740/1609\n",
"Done: 741/1609\n",
"Done: 742/1609\n",
"Done: 743/1609\n",
"Done: 744/1609\n",
"Done: 745/1609\n",
"Done: 746/1609\n",
"Done: 747/1609\n",
"Done: 748/1609\n",
"Done: 749/1609\n",
"Done: 750/1609\n",
"Done: 751/1609\n",
"Done: 752/1609\n",
"Done: 753/1609\n",
"Done: 754/1609\n",
"Done: 755/1609\n",
"Done: 756/1609\n",
"Done: 757/1609\n",
"Done: 758/1609\n",
"Done: 759/1609\n",
"Done: 760/1609\n",
"Done: 761/1609\n",
"Done: 762/1609\n",
"Done: 763/1609\n",
"Done: 764/1609\n",
"Done: 765/1609\n",
"Done: 766/1609\n",
"Done: 767/1609\n",
"Done: 768/1609\n",
"Done: 769/1609\n",
"Done: 770/1609\n",
"Done: 771/1609\n",
"Done: 772/1609\n",
"Done: 773/1609\n",
"Done: 774/1609\n",
"Done: 775/1609\n",
"Done: 776/1609\n",
"Done: 777/1609\n",
"Done: 778/1609\n",
"Done: 779/1609\n",
"Done: 780/1609\n",
"Done: 781/1609\n",
"Done: 782/1609\n",
"Done: 783/1609\n",
"Done: 784/1609\n",
"Done: 785/1609\n",
"Done: 786/1609\n",
"Done: 787/1609\n",
"Done: 788/1609\n",
"Done: 789/1609\n",
"Done: 790/1609\n",
"Done: 791/1609\n",
"Done: 792/1609\n",
"Done: 793/1609\n",
"Done: 794/1609\n",
"Done: 795/1609\n",
"Done: 796/1609\n",
"Done: 797/1609\n",
"Done: 798/1609\n",
"Done: 799/1609\n",
"Done: 800/1609\n",
"Done: 801/1609\n",
"Done: 802/1609\n",
"Done: 803/1609\n",
"Done: 804/1609\n",
"Done: 805/1609\n",
"Done: 806/1609\n",
"Done: 807/1609\n",
"Done: 808/1609\n",
"Done: 809/1609\n",
"Done: 810/1609\n",
"Done: 811/1609\n",
"Done: 812/1609\n",
"Done: 813/1609\n",
"Done: 814/1609\n",
"Done: 815/1609\n",
"Done: 816/1609\n",
"Done: 817/1609\n",
"Done: 818/1609\n",
"Done: 819/1609\n",
"Done: 820/1609\n",
"Done: 821/1609\n",
"Done: 822/1609\n",
"Done: 823/1609\n",
"Done: 824/1609\n",
"Done: 825/1609\n",
"Done: 826/1609\n",
"Done: 827/1609\n",
"Done: 828/1609\n",
"Done: 829/1609\n",
"Done: 830/1609\n",
"Done: 831/1609\n",
"Done: 832/1609\n",
"Done: 833/1609\n",
"Done: 834/1609\n",
"Done: 835/1609\n",
"Done: 836/1609\n",
"Done: 837/1609\n",
"Done: 838/1609\n",
"Done: 839/1609\n",
"Done: 840/1609\n",
"Done: 841/1609\n",
"Done: 842/1609\n",
"Done: 843/1609\n",
"Done: 844/1609\n",
"Done: 845/1609\n",
"Done: 846/1609\n",
"Done: 847/1609\n",
"Done: 848/1609\n",
"Done: 849/1609\n",
"Done: 850/1609\n",
"Done: 851/1609\n",
"Done: 852/1609\n",
"Done: 853/1609\n",
"Done: 854/1609\n",
"Done: 855/1609\n",
"Done: 856/1609\n",
"Done: 857/1609\n",
"Done: 858/1609\n",
"Done: 859/1609\n",
"Done: 860/1609\n",
"Done: 861/1609\n",
"Done: 862/1609\n",
"Done: 863/1609\n",
"Done: 864/1609\n",
"Done: 865/1609\n",
"Done: 866/1609\n",
"Done: 867/1609\n",
"Done: 868/1609\n",
"Done: 869/1609\n",
"Done: 870/1609\n",
"Done: 871/1609\n",
"Done: 872/1609\n",
"Done: 873/1609\n",
"Done: 874/1609\n",
"Done: 875/1609\n",
"Done: 876/1609\n",
"Done: 877/1609\n",
"Done: 878/1609\n",
"Done: 879/1609\n",
"Done: 880/1609\n",
"Done: 881/1609\n",
"Done: 882/1609\n",
"Done: 883/1609\n",
"Done: 884/1609\n",
"Done: 885/1609\n",
"Done: 886/1609\n",
"Done: 887/1609\n",
"Done: 888/1609\n",
"Done: 889/1609\n",
"Done: 890/1609\n",
"Done: 891/1609\n",
"Done: 892/1609\n",
"Done: 893/1609\n",
"Done: 894/1609\n",
"Done: 895/1609\n",
"Done: 896/1609\n",
"Done: 897/1609\n",
"Done: 898/1609\n",
"Done: 899/1609\n",
"Done: 900/1609\n",
"Done: 901/1609\n",
"Done: 902/1609\n",
"Done: 903/1609\n",
"Done: 904/1609\n",
"Done: 905/1609\n",
"Done: 906/1609\n",
"Done: 907/1609\n",
"Done: 908/1609\n",
"Done: 909/1609\n",
"Done: 910/1609\n",
"Done: 911/1609\n",
"Done: 912/1609\n",
"Done: 913/1609\n",
"Done: 914/1609\n",
"Done: 915/1609\n",
"Done: 916/1609\n",
"Done: 917/1609\n",
"Done: 918/1609\n",
"Done: 919/1609\n",
"Done: 920/1609\n",
"Done: 921/1609\n",
"Done: 922/1609\n",
"Done: 923/1609\n",
"Done: 924/1609\n",
"Done: 925/1609\n",
"Done: 926/1609\n",
"Done: 927/1609\n",
"Done: 928/1609\n",
"Done: 929/1609\n",
"Done: 930/1609\n",
"Done: 931/1609\n",
"Done: 932/1609\n",
"Done: 933/1609\n",
"Done: 934/1609\n",
"Done: 935/1609\n",
"Done: 936/1609\n",
"Done: 937/1609\n",
"Done: 938/1609\n",
"Done: 939/1609\n",
"Done: 940/1609\n",
"Done: 941/1609\n",
"Done: 942/1609\n",
"Done: 943/1609\n",
"Done: 944/1609\n",
"Done: 945/1609\n",
"Done: 946/1609\n",
"Done: 947/1609\n",
"Done: 948/1609\n",
"Done: 949/1609\n",
"Done: 950/1609\n",
"Done: 951/1609\n",
"Done: 952/1609\n",
"Done: 953/1609\n",
"Done: 954/1609\n",
"Done: 955/1609\n",
"Done: 956/1609\n",
"Done: 957/1609\n",
"Done: 958/1609\n",
"Done: 959/1609\n",
"Done: 960/1609\n",
"Done: 961/1609\n",
"Done: 962/1609\n",
"Done: 963/1609\n",
"Done: 964/1609\n",
"Done: 965/1609\n",
"Done: 966/1609\n",
"Done: 967/1609\n",
"Done: 968/1609\n",
"Done: 969/1609\n",
"Done: 970/1609\n",
"Done: 971/1609\n",
"Done: 972/1609\n",
"Done: 973/1609\n",
"Done: 974/1609\n",
"Done: 975/1609\n",
"Done: 976/1609\n",
"Done: 977/1609\n",
"Done: 978/1609\n",
"Done: 979/1609\n",
"Done: 980/1609\n",
"Done: 981/1609\n",
"Done: 982/1609\n",
"Done: 983/1609\n",
"Done: 984/1609\n",
"Done: 985/1609\n",
"Done: 986/1609\n",
"Done: 987/1609\n",
"Done: 988/1609\n",
"Done: 989/1609\n",
"Done: 990/1609\n",
"Done: 991/1609\n",
"Done: 992/1609\n",
"Done: 993/1609\n",
"Done: 994/1609\n",
"Done: 995/1609\n",
"Done: 996/1609\n",
"Done: 997/1609\n",
"Done: 998/1609\n",
"Done: 999/1609\n",
"Done: 1000/1609\n",
"Done: 1001/1609\n",
"Done: 1002/1609\n",
"Done: 1003/1609\n",
"Done: 1004/1609\n",
"Done: 1005/1609\n",
"Done: 1006/1609\n",
"Done: 1007/1609\n",
"Done: 1008/1609\n",
"Done: 1009/1609\n",
"Done: 1010/1609\n",
"Done: 1011/1609\n",
"Done: 1012/1609\n",
"Done: 1013/1609\n",
"Done: 1014/1609\n",
"Done: 1015/1609\n",
"Done: 1016/1609\n",
"Done: 1017/1609\n",
"Done: 1018/1609\n",
"Done: 1019/1609\n",
"Done: 1020/1609\n",
"Done: 1021/1609\n",
"Done: 1022/1609\n",
"Done: 1023/1609\n",
"Done: 1024/1609\n",
"Done: 1025/1609\n",
"Done: 1026/1609\n",
"Done: 1027/1609\n",
"Done: 1028/1609\n",
"Done: 1029/1609\n",
"Done: 1030/1609\n",
"Done: 1031/1609\n",
"Done: 1032/1609\n",
"Done: 1033/1609\n",
"Done: 1034/1609\n",
"Done: 1035/1609\n",
"Done: 1036/1609\n",
"Done: 1037/1609\n",
"Done: 1038/1609\n",
"Done: 1039/1609\n",
"Done: 1040/1609\n",
"Done: 1041/1609\n",
"Done: 1042/1609\n",
"Done: 1043/1609\n",
"Done: 1044/1609\n",
"Done: 1045/1609\n",
"Done: 1046/1609\n",
"Done: 1047/1609\n",
"Done: 1048/1609\n",
"Done: 1049/1609\n",
"Done: 1050/1609\n",
"Done: 1051/1609\n",
"Done: 1052/1609\n",
"Done: 1053/1609\n",
"Done: 1054/1609\n",
"Done: 1055/1609\n",
"Done: 1056/1609\n",
"Done: 1057/1609\n",
"Done: 1058/1609\n",
"Done: 1059/1609\n",
"Done: 1060/1609\n",
"Done: 1061/1609\n",
"Done: 1062/1609\n",
"Done: 1063/1609\n",
"Done: 1064/1609\n",
"Done: 1065/1609\n",
"Done: 1066/1609\n",
"Done: 1067/1609\n",
"Done: 1068/1609\n",
"Done: 1069/1609\n",
"Done: 1070/1609\n",
"Done: 1071/1609\n",
"Done: 1072/1609\n",
"Done: 1073/1609\n",
"Done: 1074/1609\n",
"Done: 1075/1609\n",
"Done: 1076/1609\n",
"Done: 1077/1609\n",
"Done: 1078/1609\n",
"Done: 1079/1609\n",
"Done: 1080/1609\n",
"Done: 1081/1609\n",
"Done: 1082/1609\n",
"Done: 1083/1609\n",
"Done: 1084/1609\n",
"Done: 1085/1609\n",
"Done: 1086/1609\n",
"Done: 1087/1609\n",
"Done: 1088/1609\n",
"Done: 1089/1609\n",
"Done: 1090/1609\n",
"Done: 1091/1609\n",
"Done: 1092/1609\n",
"Done: 1093/1609\n",
"Done: 1094/1609\n",
"Done: 1095/1609\n",
"Done: 1096/1609\n",
"Done: 1097/1609\n",
"Done: 1098/1609\n",
"Done: 1099/1609\n",
"Done: 1100/1609\n",
"Done: 1101/1609\n",
"Done: 1102/1609\n",
"Done: 1103/1609\n",
"Done: 1104/1609\n",
"Done: 1105/1609\n",
"Done: 1106/1609\n",
"Done: 1107/1609\n",
"Done: 1108/1609\n",
"Done: 1109/1609\n",
"Done: 1110/1609\n",
"Done: 1111/1609\n",
"Done: 1112/1609\n",
"Done: 1113/1609\n",
"Done: 1114/1609\n",
"Done: 1115/1609\n",
"Done: 1116/1609\n",
"Done: 1117/1609\n",
"Done: 1118/1609\n",
"Done: 1119/1609\n",
"Done: 1120/1609\n",
"Done: 1121/1609\n",
"Done: 1122/1609\n",
"Done: 1123/1609\n",
"Done: 1124/1609\n",
"Done: 1125/1609\n",
"Done: 1126/1609\n",
"Done: 1127/1609\n",
"Done: 1128/1609\n",
"Done: 1129/1609\n",
"Done: 1130/1609\n",
"Done: 1131/1609\n",
"Done: 1132/1609\n",
"Done: 1133/1609\n",
"Done: 1134/1609\n",
"Done: 1135/1609\n",
"Done: 1136/1609\n",
"Done: 1137/1609\n",
"Done: 1138/1609\n",
"Done: 1139/1609\n",
"Done: 1140/1609\n",
"Done: 1141/1609\n",
"Done: 1142/1609\n",
"Done: 1143/1609\n",
"Done: 1144/1609\n",
"Done: 1145/1609\n",
"Done: 1146/1609\n",
"Done: 1147/1609\n",
"Done: 1148/1609\n",
"Done: 1149/1609\n",
"Done: 1150/1609\n",
"Done: 1151/1609\n",
"Done: 1152/1609\n",
"Done: 1153/1609\n",
"Done: 1154/1609\n",
"Done: 1155/1609\n",
"Done: 1156/1609\n",
"Done: 1157/1609\n",
"Done: 1158/1609\n",
"Done: 1159/1609\n",
"Done: 1160/1609\n",
"Done: 1161/1609\n",
"Done: 1162/1609\n",
"Done: 1163/1609\n",
"Done: 1164/1609\n",
"Done: 1165/1609\n",
"Done: 1166/1609\n",
"Done: 1167/1609\n",
"Done: 1168/1609\n",
"Done: 1169/1609\n",
"Done: 1170/1609\n",
"Done: 1171/1609\n",
"Done: 1172/1609\n",
"Done: 1173/1609\n",
"Done: 1174/1609\n",
"Done: 1175/1609\n",
"Done: 1176/1609\n",
"Done: 1177/1609\n",
"Done: 1178/1609\n",
"Done: 1179/1609\n",
"Done: 1180/1609\n",
"Done: 1181/1609\n",
"Done: 1182/1609\n",
"Done: 1183/1609\n",
"Done: 1184/1609\n",
"Done: 1185/1609\n",
"Done: 1186/1609\n",
"Done: 1187/1609\n",
"Done: 1188/1609\n",
"Done: 1189/1609\n",
"Done: 1190/1609\n",
"Done: 1191/1609\n",
"Done: 1192/1609\n",
"Done: 1193/1609\n",
"Done: 1194/1609\n",
"Done: 1195/1609\n",
"Done: 1196/1609\n",
"Done: 1197/1609\n",
"Done: 1198/1609\n",
"Done: 1199/1609\n",
"Done: 1200/1609\n",
"Done: 1201/1609\n",
"Done: 1202/1609\n",
"Done: 1203/1609\n",
"Done: 1204/1609\n",
"Done: 1205/1609\n",
"Done: 1206/1609\n",
"Done: 1207/1609\n",
"Done: 1208/1609\n",
"Done: 1209/1609\n",
"Done: 1210/1609\n",
"Done: 1211/1609\n",
"Done: 1212/1609\n",
"Done: 1213/1609\n",
"Done: 1214/1609\n",
"Done: 1215/1609\n",
"Done: 1216/1609\n",
"Done: 1217/1609\n",
"Done: 1218/1609\n",
"Done: 1219/1609\n",
"Done: 1220/1609\n",
"Done: 1221/1609\n",
"Done: 1222/1609\n",
"Done: 1223/1609\n",
"Done: 1224/1609\n",
"Done: 1225/1609\n",
"Done: 1226/1609\n",
"Done: 1227/1609\n",
"Done: 1228/1609\n",
"Done: 1229/1609\n",
"Done: 1230/1609\n",
"Done: 1231/1609\n",
"Done: 1232/1609\n",
"Done: 1233/1609\n",
"Done: 1234/1609\n",
"Done: 1235/1609\n",
"Done: 1236/1609\n",
"Done: 1237/1609\n",
"Done: 1238/1609\n",
"Done: 1239/1609\n",
"Done: 1240/1609\n",
"Done: 1241/1609\n",
"Done: 1242/1609\n",
"Done: 1243/1609\n",
"Done: 1244/1609\n",
"Done: 1245/1609\n",
"Done: 1246/1609\n",
"Done: 1247/1609\n",
"Done: 1248/1609\n",
"Done: 1249/1609\n",
"Done: 1250/1609\n",
"Done: 1251/1609\n",
"Done: 1252/1609\n",
"Done: 1253/1609\n",
"Done: 1254/1609\n",
"Done: 1255/1609\n",
"Done: 1256/1609\n",
"Done: 1257/1609\n",
"Done: 1258/1609\n",
"Done: 1259/1609\n",
"Done: 1260/1609\n",
"Done: 1261/1609\n",
"Done: 1262/1609\n",
"Done: 1263/1609\n",
"Done: 1264/1609\n",
"Done: 1265/1609\n",
"Done: 1266/1609\n",
"Done: 1267/1609\n",
"Done: 1268/1609\n",
"Done: 1269/1609\n",
"Done: 1270/1609\n",
"Done: 1271/1609\n",
"Done: 1272/1609\n",
"Done: 1273/1609\n",
"Done: 1274/1609\n",
"Done: 1275/1609\n",
"Done: 1276/1609\n",
"Done: 1277/1609\n",
"Done: 1278/1609\n",
"Done: 1279/1609\n",
"Done: 1280/1609\n",
"Done: 1281/1609\n",
"Done: 1282/1609\n",
"Done: 1283/1609\n",
"Done: 1284/1609\n",
"Done: 1285/1609\n",
"Done: 1286/1609\n",
"Done: 1287/1609\n",
"Done: 1288/1609\n",
"Done: 1289/1609\n",
"Done: 1290/1609\n",
"Done: 1291/1609\n",
"Done: 1292/1609\n",
"Done: 1293/1609\n",
"Done: 1294/1609\n",
"Done: 1295/1609\n",
"Done: 1296/1609\n",
"Done: 1297/1609\n",
"Done: 1298/1609\n",
"Done: 1299/1609\n",
"Done: 1300/1609\n",
"Done: 1301/1609\n",
"Done: 1302/1609\n",
"Done: 1303/1609\n",
"Done: 1304/1609\n",
"Done: 1305/1609\n",
"Done: 1306/1609\n",
"Done: 1307/1609\n",
"Done: 1308/1609\n",
"Done: 1309/1609\n",
"Done: 1310/1609\n",
"Done: 1311/1609\n",
"Done: 1312/1609\n",
"Done: 1313/1609\n",
"Done: 1314/1609\n",
"Done: 1315/1609\n",
"Done: 1316/1609\n",
"Done: 1317/1609\n",
"Done: 1318/1609\n",
"Done: 1319/1609\n",
"Done: 1320/1609\n",
"Done: 1321/1609\n",
"Done: 1322/1609\n",
"Done: 1323/1609\n",
"Done: 1324/1609\n",
"Done: 1325/1609\n",
"Done: 1326/1609\n",
"Done: 1327/1609\n",
"Done: 1328/1609\n",
"Done: 1329/1609\n",
"Done: 1330/1609\n",
"Done: 1331/1609\n",
"Done: 1332/1609\n",
"Done: 1333/1609\n",
"Done: 1334/1609\n",
"Done: 1335/1609\n",
"Done: 1336/1609\n",
"Done: 1337/1609\n",
"Done: 1338/1609\n",
"Done: 1339/1609\n",
"Done: 1340/1609\n",
"Done: 1341/1609\n",
"Done: 1342/1609\n",
"Done: 1343/1609\n",
"Done: 1344/1609\n",
"Done: 1345/1609\n",
"Done: 1346/1609\n",
"Done: 1347/1609\n",
"Done: 1348/1609\n",
"Done: 1349/1609\n",
"Done: 1350/1609\n",
"Done: 1351/1609\n",
"Done: 1352/1609\n",
"Done: 1353/1609\n",
"Done: 1354/1609\n",
"Done: 1355/1609\n",
"Done: 1356/1609\n",
"Done: 1357/1609\n",
"Done: 1358/1609\n",
"Done: 1359/1609\n",
"Done: 1360/1609\n",
"Done: 1361/1609\n",
"Done: 1362/1609\n",
"Done: 1363/1609\n",
"Done: 1364/1609\n",
"Done: 1365/1609\n",
"Done: 1366/1609\n",
"Done: 1367/1609\n",
"Done: 1368/1609\n",
"Done: 1369/1609\n",
"Done: 1370/1609\n",
"Done: 1371/1609\n",
"Done: 1372/1609\n",
"Done: 1373/1609\n",
"Done: 1374/1609\n",
"Done: 1375/1609\n",
"Done: 1376/1609\n",
"Done: 1377/1609\n",
"Done: 1378/1609\n",
"Done: 1379/1609\n",
"Done: 1380/1609\n",
"Done: 1381/1609\n",
"Done: 1382/1609\n",
"Done: 1383/1609\n",
"Done: 1384/1609\n",
"Done: 1385/1609\n",
"Done: 1386/1609\n",
"Done: 1387/1609\n",
"Done: 1388/1609\n",
"Done: 1389/1609\n",
"Done: 1390/1609\n",
"Done: 1391/1609\n",
"Done: 1392/1609\n",
"Done: 1393/1609\n",
"Done: 1394/1609\n",
"Done: 1395/1609\n",
"Done: 1396/1609\n",
"Done: 1397/1609\n",
"Done: 1398/1609\n",
"Done: 1399/1609\n",
"Done: 1400/1609\n",
"Done: 1401/1609\n",
"Done: 1402/1609\n",
"Done: 1403/1609\n",
"Done: 1404/1609\n",
"Done: 1405/1609\n",
"Done: 1406/1609\n",
"Done: 1407/1609\n",
"Done: 1408/1609\n",
"Done: 1409/1609\n",
"Done: 1410/1609\n",
"Done: 1411/1609\n",
"Done: 1412/1609\n",
"Done: 1413/1609\n",
"Done: 1414/1609\n",
"Done: 1415/1609\n",
"Done: 1416/1609\n",
"Done: 1417/1609\n",
"Done: 1418/1609\n",
"Done: 1419/1609\n",
"Done: 1420/1609\n",
"Done: 1421/1609\n",
"Done: 1422/1609\n",
"Done: 1423/1609\n",
"Done: 1424/1609\n",
"Done: 1425/1609\n",
"Done: 1426/1609\n",
"Done: 1427/1609\n",
"Done: 1428/1609\n",
"Done: 1429/1609\n",
"Done: 1430/1609\n",
"Done: 1431/1609\n",
"Done: 1432/1609\n",
"Done: 1433/1609\n",
"Done: 1434/1609\n",
"Done: 1435/1609\n",
"Done: 1436/1609\n",
"Done: 1437/1609\n",
"Done: 1438/1609\n",
"Done: 1439/1609\n",
"Done: 1440/1609\n",
"Done: 1441/1609\n",
"Done: 1442/1609\n",
"Done: 1443/1609\n",
"Done: 1444/1609\n",
"Done: 1445/1609\n",
"Done: 1446/1609\n",
"Done: 1447/1609\n",
"Done: 1448/1609\n",
"Done: 1449/1609\n",
"Done: 1450/1609\n",
"Done: 1451/1609\n",
"Done: 1452/1609\n",
"Done: 1453/1609\n",
"Done: 1454/1609\n",
"Done: 1455/1609\n",
"Done: 1456/1609\n",
"Done: 1457/1609\n",
"Done: 1458/1609\n",
"Done: 1459/1609\n",
"Done: 1460/1609\n",
"Done: 1461/1609\n",
"Done: 1462/1609\n",
"Done: 1463/1609\n",
"Done: 1464/1609\n",
"Done: 1465/1609\n",
"Done: 1466/1609\n",
"Done: 1467/1609\n",
"Done: 1468/1609\n",
"Done: 1469/1609\n",
"Done: 1470/1609\n",
"Done: 1471/1609\n",
"Done: 1472/1609\n",
"Done: 1473/1609\n",
"Done: 1474/1609\n",
"Done: 1475/1609\n",
"Done: 1476/1609\n",
"Done: 1477/1609\n",
"Done: 1478/1609\n",
"Done: 1479/1609\n",
"Done: 1480/1609\n",
"Done: 1481/1609\n",
"Done: 1482/1609\n",
"Done: 1483/1609\n",
"Done: 1484/1609\n",
"Done: 1485/1609\n",
"Done: 1486/1609\n",
"Done: 1487/1609\n",
"Done: 1488/1609\n",
"Done: 1489/1609\n",
"Done: 1490/1609\n",
"Done: 1491/1609\n",
"Done: 1492/1609\n",
"Done: 1493/1609\n",
"Done: 1494/1609\n",
"Done: 1495/1609\n",
"Done: 1496/1609\n",
"Done: 1497/1609\n",
"Done: 1498/1609\n",
"Done: 1499/1609\n",
"Done: 1500/1609\n",
"Done: 1501/1609\n",
"Done: 1502/1609\n",
"Done: 1503/1609\n",
"Done: 1504/1609\n",
"Done: 1505/1609\n",
"Done: 1506/1609\n",
"Done: 1507/1609\n",
"Done: 1508/1609\n",
"Done: 1509/1609\n",
"Done: 1510/1609\n",
"Done: 1511/1609\n",
"Done: 1512/1609\n",
"Done: 1513/1609\n",
"Done: 1514/1609\n",
"Done: 1515/1609\n",
"Done: 1516/1609\n",
"Done: 1517/1609\n",
"Done: 1518/1609\n",
"Done: 1519/1609\n",
"Done: 1520/1609\n",
"Done: 1521/1609\n",
"Done: 1522/1609\n",
"Done: 1523/1609\n",
"Done: 1524/1609\n",
"Done: 1525/1609\n",
"Done: 1526/1609\n",
"Done: 1527/1609\n",
"Done: 1528/1609\n",
"Done: 1529/1609\n",
"Done: 1530/1609\n",
"Done: 1531/1609\n",
"Done: 1532/1609\n",
"Done: 1533/1609\n",
"Done: 1534/1609\n",
"Done: 1535/1609\n",
"Done: 1536/1609\n",
"Done: 1537/1609\n",
"Done: 1538/1609\n",
"Done: 1539/1609\n",
"Done: 1540/1609\n",
"Done: 1541/1609\n",
"Done: 1542/1609\n",
"Done: 1543/1609\n",
"Done: 1544/1609\n",
"Done: 1545/1609\n",
"Done: 1546/1609\n",
"Done: 1547/1609\n",
"Done: 1548/1609\n",
"Done: 1549/1609\n",
"Done: 1550/1609\n",
"Done: 1551/1609\n",
"Done: 1552/1609\n",
"Done: 1553/1609\n",
"Done: 1554/1609\n",
"Done: 1555/1609\n",
"Done: 1556/1609\n",
"Done: 1557/1609\n",
"Done: 1558/1609\n",
"Done: 1559/1609\n",
"Done: 1560/1609\n",
"Done: 1561/1609\n",
"Done: 1562/1609\n",
"Done: 1563/1609\n",
"Done: 1564/1609\n",
"Done: 1565/1609\n",
"Done: 1566/1609\n",
"Done: 1567/1609\n",
"Done: 1568/1609\n",
"Done: 1569/1609\n",
"Done: 1570/1609\n",
"Done: 1571/1609\n",
"Done: 1572/1609\n",
"Done: 1573/1609\n",
"Done: 1574/1609\n",
"Done: 1575/1609\n",
"Done: 1576/1609\n",
"Done: 1577/1609\n",
"Done: 1578/1609\n",
"Done: 1579/1609\n",
"Done: 1580/1609\n",
"Done: 1581/1609\n",
"Done: 1582/1609\n",
"Done: 1583/1609\n",
"Done: 1584/1609\n",
"Done: 1585/1609\n",
"Done: 1586/1609\n",
"Done: 1587/1609\n",
"Done: 1588/1609\n",
"Done: 1589/1609\n",
"Done: 1590/1609\n",
"Done: 1591/1609\n",
"Done: 1592/1609\n",
"Done: 1593/1609\n",
"Done: 1594/1609\n",
"Done: 1595/1609\n",
"Done: 1596/1609\n",
"Done: 1597/1609\n",
"Done: 1598/1609\n",
"Done: 1599/1609\n",
"Done: 1600/1609\n",
"Done: 1601/1609\n",
"Done: 1602/1609\n",
"Done: 1603/1609\n",
"Done: 1604/1609\n",
"Done: 1605/1609\n",
"Done: 1606/1609\n",
"Done: 1607/1609\n",
"Done: 1608/1609\n",
"Done: 1609/1609\n"
],
"name": "stdout"
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "dpMUXEeQR1or",
"colab_type": "text"
},
"source": [
"Combine frames into video"
]
},
{
"cell_type": "code",
"metadata": {
"id": "k397TotCR5Kl",
"colab_type": "code",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 1000
},
"outputId": "3cf7a3da-dc3f-4f86-b287-9cf84eac8fbf"
},
"source": [
"%cd colab_inputs_video\n",
"!ffmpeg -r $FRAME_RATE -f image2 -i output/%04d_matte.png -vcodec libx264 -crf 15 -s 1280x720 -pix_fmt yuv420p $BM_OUTPUT_MATTE\n",
"!ffmpeg -r $FRAME_RATE -f image2 -i output/%04d_compose.png -vcodec libx264 -crf 15 -s 1280x720 -pix_fmt yuv420p $BM_OUTPUT_COMPOSE\n",
"%cd .."
],
"execution_count": 27,
"outputs": [
{
"output_type": "stream",
"text": [
"/content/Background-Matting/colab_inputs_video\n",
"ffmpeg version 3.4.6-0ubuntu0.18.04.1 Copyright (c) 2000-2019 the FFmpeg developers\n",
" built with gcc 7 (Ubuntu 7.3.0-16ubuntu3)\n",
" configuration: --prefix=/usr --extra-version=0ubuntu0.18.04.1 --toolchain=hardened --libdir=/usr/lib/x86_64-linux-gnu --incdir=/usr/include/x86_64-linux-gnu --enable-gpl --disable-stripping --enable-avresample --enable-avisynth --enable-gnutls --enable-ladspa --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libcdio --enable-libflite --enable-libfontconfig --enable-libfreetype --enable-libfribidi --enable-libgme --enable-libgsm --enable-libmp3lame --enable-libmysofa --enable-libopenjpeg --enable-libopenmpt --enable-libopus --enable-libpulse --enable-librubberband --enable-librsvg --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libssh --enable-libtheora --enable-libtwolame --enable-libvorbis --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx265 --enable-libxml2 --enable-libxvid --enable-libzmq --enable-libzvbi --enable-omx --enable-openal --enable-opengl --enable-sdl2 --enable-libdc1394 --enable-libdrm --enable-libiec61883 --enable-chromaprint --enable-frei0r --enable-libopencv --enable-libx264 --enable-shared\n",
" libavutil 55. 78.100 / 55. 78.100\n",
" libavcodec 57.107.100 / 57.107.100\n",
" libavformat 57. 83.100 / 57. 83.100\n",
" libavdevice 57. 10.100 / 57. 10.100\n",
" libavfilter 6.107.100 / 6.107.100\n",
" libavresample 3. 7. 0 / 3. 7. 0\n",
" libswscale 4. 8.100 / 4. 8.100\n",
" libswresample 2. 9.100 / 2. 9.100\n",
" libpostproc 54. 7.100 / 54. 7.100\n",
"Input #0, image2, from 'output/%04d_matte.png':\n",
" Duration: 00:00:26.82, start: 0.000000, bitrate: N/A\n",
" Stream #0:0: Video: png, rgb24(pc), 1920x1080, 60 fps, 60 tbr, 60 tbn, 60 tbc\n",
"Stream mapping:\n",
" Stream #0:0 -> #0:0 (png (native) -> h264 (libx264))\n",
"Press [q] to stop, [?] for help\n",
"\u001b[1;36m[libx264 @ 0x556c0f697e00] \u001b[0musing cpu capabilities: MMX2 SSE2Fast SSSE3 SSE4.2 AVX FMA3 BMI2 AVX2\n",
"\u001b[1;36m[libx264 @ 0x556c0f697e00] \u001b[0mprofile High, level 3.2\n",
"\u001b[1;36m[libx264 @ 0x556c0f697e00] \u001b[0m264 - core 152 r2854 e9a5903 - H.264/MPEG-4 AVC codec - Copyleft 2003-2017 - http://www.videolan.org/x264.html - options: cabac=1 ref=3 deblock=1:0:0 analyse=0x3:0x113 me=hex subme=7 psy=1 psy_rd=1.00:0.00 mixed_ref=1 me_range=16 chroma_me=1 trellis=1 8x8dct=1 cqm=0 deadzone=21,11 fast_pskip=1 chroma_qp_offset=-2 threads=3 lookahead_threads=1 sliced_threads=0 nr=0 decimate=1 interlaced=0 bluray_compat=0 constrained_intra=0 bframes=3 b_pyramid=2 b_adapt=1 b_bias=0 direct=1 weightb=1 open_gop=0 weightp=2 keyint=250 keyint_min=25 scenecut=40 intra_refresh=0 rc_lookahead=40 rc=crf mbtree=1 crf=15.0 qcomp=0.60 qpmin=0 qpmax=69 qpstep=4 ip_ratio=1.40 aq=1:1.00\n",
"Output #0, mp4, to 'video_result_matte.mp4':\n",
" Metadata:\n",
" encoder : Lavf57.83.100\n",
" Stream #0:0: Video: h264 (libx264) (avc1 / 0x31637661), yuv420p, 1280x720, q=-1--1, 60 fps, 15360 tbn, 60 tbc\n",
" Metadata:\n",
" encoder : Lavc57.107.100 libx264\n",
" Side data:\n",
" cpb: bitrate max/min/avg: 0/0/0 buffer size: 0 vbv_delay: -1\n",
"frame= 1609 fps= 29 q=-1.0 Lsize= 6404kB time=00:00:26.76 bitrate=1960.0kbits/s speed=0.48x \n",
"video:6384kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.309217%\n",
"\u001b[1;36m[libx264 @ 0x556c0f697e00] \u001b[0mframe I:7 Avg QP:11.81 size: 28938\n",
"\u001b[1;36m[libx264 @ 0x556c0f697e00] \u001b[0mframe P:405 Avg QP:16.84 size: 9407\n",
"\u001b[1;36m[libx264 @ 0x556c0f697e00] \u001b[0mframe B:1197 Avg QP:20.43 size: 2109\n",
"\u001b[1;36m[libx264 @ 0x556c0f697e00] \u001b[0mconsecutive B-frames: 0.8% 0.0% 0.0% 99.2%\n",
"\u001b[1;36m[libx264 @ 0x556c0f697e00] \u001b[0mmb I I16..4: 10.9% 82.7% 6.4%\n",
"\u001b[1;36m[libx264 @ 0x556c0f697e00] \u001b[0mmb P I16..4: 0.1% 1.9% 0.5% P16..4: 4.7% 5.9% 4.0% 0.0% 0.0% skip:82.9%\n",
"\u001b[1;36m[libx264 @ 0x556c0f697e00] \u001b[0mmb B I16..4: 0.0% 0.3% 0.1% B16..8: 8.0% 2.0% 0.4% direct: 0.5% skip:88.6% L0:35.7% L1:41.1% BI:23.3%\n",
"\u001b[1;36m[libx264 @ 0x556c0f697e00] \u001b[0m8x8 transform intra:77.6% inter:64.1%\n",
"\u001b[1;36m[libx264 @ 0x556c0f697e00] \u001b[0mcoded y,uvDC,uvAC intra: 60.1% 58.5% 31.1% inter: 4.7% 3.8% 0.8%\n",
"\u001b[1;36m[libx264 @ 0x556c0f697e00] \u001b[0mi16 v,h,dc,p: 71% 21% 2% 6%\n",
"\u001b[1;36m[libx264 @ 0x556c0f697e00] \u001b[0mi8 v,h,dc,ddl,ddr,vr,hd,vl,hu: 20% 26% 14% 3% 9% 9% 8% 5% 6%\n",
"\u001b[1;36m[libx264 @ 0x556c0f697e00] \u001b[0mi4 v,h,dc,ddl,ddr,vr,hd,vl,hu: 15% 13% 11% 6% 16% 13% 12% 7% 6%\n",
"\u001b[1;36m[libx264 @ 0x556c0f697e00] \u001b[0mi8c dc,h,v,p: 61% 15% 17% 7%\n",
"\u001b[1;36m[libx264 @ 0x556c0f697e00] \u001b[0mWeighted P-Frames: Y:0.2% UV:0.0%\n",
"\u001b[1;36m[libx264 @ 0x556c0f697e00] \u001b[0mref P L0: 57.5% 20.6% 16.4% 5.6% 0.0%\n",
"\u001b[1;36m[libx264 @ 0x556c0f697e00] \u001b[0mref B L0: 92.0% 6.8% 1.3%\n",
"\u001b[1;36m[libx264 @ 0x556c0f697e00] \u001b[0mref B L1: 97.2% 2.8%\n",
"\u001b[1;36m[libx264 @ 0x556c0f697e00] \u001b[0mkb/s:1950.07\n",
"ffmpeg version 3.4.6-0ubuntu0.18.04.1 Copyright (c) 2000-2019 the FFmpeg developers\n",
" built with gcc 7 (Ubuntu 7.3.0-16ubuntu3)\n",
" configuration: --prefix=/usr --extra-version=0ubuntu0.18.04.1 --toolchain=hardened --libdir=/usr/lib/x86_64-linux-gnu --incdir=/usr/include/x86_64-linux-gnu --enable-gpl --disable-stripping --enable-avresample --enable-avisynth --enable-gnutls --enable-ladspa --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libcdio --enable-libflite --enable-libfontconfig --enable-libfreetype --enable-libfribidi --enable-libgme --enable-libgsm --enable-libmp3lame --enable-libmysofa --enable-libopenjpeg --enable-libopenmpt --enable-libopus --enable-libpulse --enable-librubberband --enable-librsvg --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libssh --enable-libtheora --enable-libtwolame --enable-libvorbis --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx265 --enable-libxml2 --enable-libxvid --enable-libzmq --enable-libzvbi --enable-omx --enable-openal --enable-opengl --enable-sdl2 --enable-libdc1394 --enable-libdrm --enable-libiec61883 --enable-chromaprint --enable-frei0r --enable-libopencv --enable-libx264 --enable-shared\n",
" libavutil 55. 78.100 / 55. 78.100\n",
" libavcodec 57.107.100 / 57.107.100\n",
" libavformat 57. 83.100 / 57. 83.100\n",
" libavdevice 57. 10.100 / 57. 10.100\n",
" libavfilter 6.107.100 / 6.107.100\n",
" libavresample 3. 7. 0 / 3. 7. 0\n",
" libswscale 4. 8.100 / 4. 8.100\n",
" libswresample 2. 9.100 / 2. 9.100\n",
" libpostproc 54. 7.100 / 54. 7.100\n",
"Input #0, image2, from 'output/%04d_compose.png':\n",
" Duration: 00:00:26.82, start: 0.000000, bitrate: N/A\n",
" Stream #0:0: Video: png, rgb24(pc), 1920x1080, 60 tbr, 60 tbn, 60 tbc\n",
"Stream mapping:\n",
" Stream #0:0 -> #0:0 (png (native) -> h264 (libx264))\n",
"Press [q] to stop, [?] for help\n",
"\u001b[1;36m[libx264 @ 0x5644bb9cde00] \u001b[0musing cpu capabilities: MMX2 SSE2Fast SSSE3 SSE4.2 AVX FMA3 BMI2 AVX2\n",
"\u001b[1;36m[libx264 @ 0x5644bb9cde00] \u001b[0mprofile High, level 3.2\n",
"\u001b[1;36m[libx264 @ 0x5644bb9cde00] \u001b[0m264 - core 152 r2854 e9a5903 - H.264/MPEG-4 AVC codec - Copyleft 2003-2017 - http://www.videolan.org/x264.html - options: cabac=1 ref=3 deblock=1:0:0 analyse=0x3:0x113 me=hex subme=7 psy=1 psy_rd=1.00:0.00 mixed_ref=1 me_range=16 chroma_me=1 trellis=1 8x8dct=1 cqm=0 deadzone=21,11 fast_pskip=1 chroma_qp_offset=-2 threads=3 lookahead_threads=1 sliced_threads=0 nr=0 decimate=1 interlaced=0 bluray_compat=0 constrained_intra=0 bframes=3 b_pyramid=2 b_adapt=1 b_bias=0 direct=1 weightb=1 open_gop=0 weightp=2 keyint=250 keyint_min=25 scenecut=40 intra_refresh=0 rc_lookahead=40 rc=crf mbtree=1 crf=15.0 qcomp=0.60 qpmin=0 qpmax=69 qpstep=4 ip_ratio=1.40 aq=1:1.00\n",
"Output #0, mp4, to 'video_result.mp4':\n",
" Metadata:\n",
" encoder : Lavf57.83.100\n",
" Stream #0:0: Video: h264 (libx264) (avc1 / 0x31637661), yuv420p, 1280x720, q=-1--1, 60 fps, 15360 tbn, 60 tbc\n",
" Metadata:\n",
" encoder : Lavc57.107.100 libx264\n",
" Side data:\n",
" cpb: bitrate max/min/avg: 0/0/0 buffer size: 0 vbv_delay: -1\n",
"frame= 1609 fps= 11 q=-1.0 Lsize= 50744kB time=00:00:26.76 bitrate=15530.2kbits/s speed=0.177x \n",
"video:50724kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.039889%\n",
"\u001b[1;36m[libx264 @ 0x5644bb9cde00] \u001b[0mframe I:7 Avg QP:14.80 size:210672\n",
"\u001b[1;36m[libx264 @ 0x5644bb9cde00] \u001b[0mframe P:406 Avg QP:17.39 size: 73135\n",
"\u001b[1;36m[libx264 @ 0x5644bb9cde00] \u001b[0mframe B:1196 Avg QP:21.61 size: 17369\n",
"\u001b[1;36m[libx264 @ 0x5644bb9cde00] \u001b[0mconsecutive B-frames: 0.7% 0.4% 0.2% 98.7%\n",
"\u001b[1;36m[libx264 @ 0x5644bb9cde00] \u001b[0mmb I I16..4: 2.5% 59.6% 37.9%\n",
"\u001b[1;36m[libx264 @ 0x5644bb9cde00] \u001b[0mmb P I16..4: 0.2% 7.8% 3.7% P16..4: 33.8% 26.5% 21.5% 0.0% 0.0% skip: 6.5%\n",
"\u001b[1;36m[libx264 @ 0x5644bb9cde00] \u001b[0mmb B I16..4: 0.0% 0.5% 0.3% B16..8: 34.5% 5.9% 2.5% direct: 7.9% skip:48.4% L0:40.2% L1:40.9% BI:18.9%\n",
"\u001b[1;36m[libx264 @ 0x5644bb9cde00] \u001b[0m8x8 transform intra:64.2% inter:54.2%\n",
"\u001b[1;36m[libx264 @ 0x5644bb9cde00] \u001b[0mcoded y,uvDC,uvAC intra: 94.4% 61.6% 24.8% inter: 29.5% 14.4% 1.3%\n",
"\u001b[1;36m[libx264 @ 0x5644bb9cde00] \u001b[0mi16 v,h,dc,p: 14% 23% 18% 45%\n",
"\u001b[1;36m[libx264 @ 0x5644bb9cde00] \u001b[0mi8 v,h,dc,ddl,ddr,vr,hd,vl,hu: 11% 25% 16% 5% 8% 7% 11% 6% 11%\n",
"\u001b[1;36m[libx264 @ 0x5644bb9cde00] \u001b[0mi4 v,h,dc,ddl,ddr,vr,hd,vl,hu: 9% 27% 11% 6% 10% 7% 12% 6% 12%\n",
"\u001b[1;36m[libx264 @ 0x5644bb9cde00] \u001b[0mi8c dc,h,v,p: 54% 26% 16% 5%\n",
"\u001b[1;36m[libx264 @ 0x5644bb9cde00] \u001b[0mWeighted P-Frames: Y:0.0% UV:0.0%\n",
"\u001b[1;36m[libx264 @ 0x5644bb9cde00] \u001b[0mref P L0: 56.4% 11.4% 25.3% 7.0%\n",
"\u001b[1;36m[libx264 @ 0x5644bb9cde00] \u001b[0mref B L0: 90.0% 8.3% 1.7%\n",
"\u001b[1;36m[libx264 @ 0x5644bb9cde00] \u001b[0mref B L1: 95.5% 4.5%\n",
"\u001b[1;36m[libx264 @ 0x5644bb9cde00] \u001b[0mkb/s:15494.94\n",
"/content/Background-Matting\n"
],
"name": "stdout"
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "1rixNl50Th3p",
"colab_type": "text"
},
"source": [
"The resulting videos can be downloaded from the files tab on the left!"
]
}
]
}
@camjac251
Copy link

Is this script still working? I get some errors with video processing

Segmentation completes successfully Done: colab_inputs_video/input
But with both handheld and fixed, it fails

Traceback (most recent call last):
  File "test_pre_process_video.py", line 123, in <module>
    back_align = alignImages(back, image,mask)
  File "test_pre_process_video.py", line 38, in alignImages
    h, mask = cv2.findHomography(points1, points2, cv2.RANSAC)
cv2.error: OpenCV(3.4.5) /io/opencv/modules/calib3d/src/ptsetreg.cpp:169: error: (-215:Assertion failed) count >= 0 && count2 == count in function 'run'
CUDA Device: 0
Using video mode
Traceback (most recent call last):
  File "test_background-matting_image.py", line 121, in <module>
    bbox=get_bbox(rcnn,R=bgr_img0.shape[0],C=bgr_img0.shape[1])
  File "/content/Background-Matting/functions.py", line 38, in get_bbox
    x1, y1 = np.amin(where, axis=1)
  File "<__array_function__ internals>", line 6, in amin
  File "/usr/local/lib/python3.6/dist-packages/numpy/core/fromnumeric.py", line 2746, in amin
    keepdims=keepdims, initial=initial, where=where)
  File "/usr/local/lib/python3.6/dist-packages/numpy/core/fromnumeric.py", line 90, in _wrapreduction
    return ufunc.reduce(obj, axis, dtype, out, **passkwargs)
ValueError: zero-size array to reduction operation minimum which has no identity

@venkat094
Copy link

I too got the same error ! The below error is for image, Not sure where is the issue !

CUDA Device: 0
Using image mode
Traceback (most recent call last):
  File "test_background-matting_image.py", line 46, in <module>
    back_img10=cv2.imread(args.target_back); back_img10=cv2.cvtColor(back_img10,cv2.COLOR_BGR2RGB);
cv2.error: OpenCV(3.4.5) /io/opencv/modules/imgproc/src/color.cpp:181: error: (-215:Assertion failed) !_src.empty() in function 'cvtColor'

@jrdeco560
Copy link

errors

@andreyryabtsev
Copy link
Author

@camjac251 I think your issue may be similar to senguptaumd/Background-Matting#33 . In order to pre-process hand-held videos, that code tries to find a homography alignment between each frame, which may fail for featureless backgrounds. Unfortunately, the script doesn't report the errors nicely; but maybe you could try a different video, or a fixed cam (no alignment needed) video to see if that works?

@venkat094 Actually your error is different; they look the same because cv2's low level code reports them similarly. I am fairly sure the target background file you are trying to use does not exist. So when cv2.imread opens it it silently reads no data, but when it tries to convert the color space it realizes the image is not actually there.

@camjac251
Copy link

Thank you for the reply. I'm trying it with the handheld sample video this time so hopefully it works.

I did notice an little error on the
Run the matting algorithm. If your video was captured with a fixed camera, comment the first line and uncomment the second before running.
block
could it be made into

!CUDA_VISIBLE_DEVICES=0 python test_background-matting_image.py -m real-hand-held -i colab_inputs_video/input/ -o colab_inputs_video/output/ -tb colab_inputs_video/background/
# !CUDA_VISIBLE_DEVICES=0 python test_background-matting_image.py -m real-fixed-cam -i colab_inputs_video/input/ -o colab_inputs_video/output/ -tb colab_inputs_video/background/ -b colab_inputs_video/$BM_SOURCE_STILL

@andreyryabtsev
Copy link
Author

@camjac251 good catch, fixed!

@gchoi
Copy link

gchoi commented May 20, 2020

Hi, I have error for the following code:
!CUDA_VISIBLE_DEVICES=0 python test_background-matting_image.py -m real-hand-held -i colab_inputs/input/ -o colab_inputs/output/ -tb colab_inputs/background/0001.png

CUDA Device: 0 Using image mode Traceback (most recent call last): File "test_background-matting_image.py", line 121, in <module> bbox=get_bbox(rcnn,R=bgr_img0.shape[0],C=bgr_img0.shape[1]) File "/content/drive/My Drive/Colab-Notebooks/TensorFlow-Examples/033-Back-Matting/Background-Matting/functions.py", line 38, in get_bbox x1, y1 = np.amin(where, axis=1) File "<__array_function__ internals>", line 6, in amin File "/usr/local/lib/python3.6/dist-packages/numpy/core/fromnumeric.py", line 2746, in amin keepdims=keepdims, initial=initial, where=where) File "/usr/local/lib/python3.6/dist-packages/numpy/core/fromnumeric.py", line 90, in _wrapreduction return ufunc.reduce(obj, axis, dtype, out, **passkwargs) ValueError: zero-size array to reduction operation minimum which has no identity

@venkat094
Copy link

venkat094 commented May 20, 2020

@camjac251 I think your issue may be similar to senguptaumd/Background-Matting#33 . In order to pre-process hand-held videos, that code tries to find a homography alignment between each frame, which may fail for featureless backgrounds. Unfortunately, the script doesn't report the errors nicely; but maybe you could try a different video, or a fixed cam (no alignment needed) video to see if that works?

@venkat094 Actually your error is different; they look the same because cv2's low level code reports them similarly. I am fairly sure the target background file you are trying to use does not exist. So when cv2.imread opens it it silently reads no data, but when it tries to convert the color space it realizes the image is not actually there.

Thanks for your quick reply !!
I did check twice, the target background file is present ! I have just uploaded only one file !

@andreyryabtsev
Copy link
Author

@andreyryabtsev
Copy link
Author

In general, colab can be quite finicky (I think someone had their file get lost because the runtime restarted); if anyone has issues like these it may help to either (a) run the repository in a more standard environment or (b) add asserts to double check all the files exist and the segmentations + homography transforms don't fail for whatever reason.

@Flock1
Copy link

Flock1 commented May 24, 2020

I too got the same error ! The below error is for image, Not sure where is the issue !

CUDA Device: 0
Using image mode
Traceback (most recent call last):
  File "test_background-matting_image.py", line 46, in <module>
    back_img10=cv2.imread(args.target_back); back_img10=cv2.cvtColor(back_img10,cv2.COLOR_BGR2RGB);
cv2.error: OpenCV(3.4.5) /io/opencv/modules/imgproc/src/color.cpp:181: error: (-215:Assertion failed) !_src.empty() in function 'cvtColor'

I faced this error because of the following:

When I use the segmentation model, it needs to create a model by the name "maskDL" and there it stores the segmented image. Hence, it's not able to read the segmented image because it's not there.

@tolchx
Copy link

tolchx commented May 25, 2020

Hello, thank you very much for sharing this project, I am having the following error, using video segmentation.
@Flock1 using the online example colab, how do I create a model with the name 'maskDL'?
Using the demo material: #Uncomment and run this if you want to skip uploading your videos (below) and run on the sample videos instead (choose fixed or handheld) It works well

The error I have with my own videos is the following:

CUDA Device: 0
Using video mode
Traceback (most recent call last):
File "test_background-matting_image.py", line 85, in
bg_im0=cv2.imread(os.path.join(data_path, filename.replace('_img','_back'))); bg_im0=cv2.cvtColor(bg_im0,cv2.COLOR_BGR2RGB);
cv2.error: OpenCV(3.4.5) /io/opencv/modules/imgproc/src/color.cpp:181: error: (-215:Assertion failed) !_src.empty() in function 'cvtColor'

Any help is welcome thanks

@Flock1
Copy link

Flock1 commented May 27, 2020

@tolchx, this error happens because there is no image that is being read. That's happening probably because there is no folder or a file. Kindly check if the required folder or the image is present.

@tolchx
Copy link

tolchx commented May 31, 2020

@tolchx, this error happens because there is no image that is being read. That's happening probably because there is no folder or a file. Kindly check if the required folder or the image is present.

Yes, it was that, thank you very much.

folder and python file paths were in other folders,

@tolchx
Copy link

tolchx commented Jun 1, 2020

Hello, I have an error when I run this section of the code:

#!CUDA_VISIBLE_DEVICES=0 python test_background-matting_image.py -m real-hand-held -i colab_inputs_video/input/ -o colab_inputs_video/output/ -tb colab_inputs_video/background/
!CUDA_VISIBLE_DEVICES=0 python test_background-matting_image.py -m real-fixed-cam -i colab_inputs_video/input/ -o colab_inputs_video/output/ -tb colab_inputs_video/background/ -b colab_inputs_video/$BM_SOURCE_STILL

error:


Traceback (most recent call last):
  File "test_background-matting_image.py", line 92, in <module>
    back_img10=cv2.imread(os.path.join(args.target_back,filename.replace('_img.png','.png'))); back_img10=cv2.cvtColor(back_img10,cv2.COLOR_BGR2RGB);
cv2.error: OpenCV(3.4.5) /io/opencv/modules/imgproc/src/color.cpp:181: error: (-215:Assertion failed) !_src.empty() in function 'cvtColor'

I did the test with several videos, with different amount of frames, 600/900/1000 frames, for example.
But it always stops at 441 and the error appears.

What could be the cause?

In the folder: Background-Matting / colab_inputs_video / inputs, the remaining frames appear, it does not end at frame 441

Thank you

@Flock1
Copy link

Flock1 commented Jun 4, 2020

@tolchx, I'm not sure but I think there is a problem with arguments. Instead of --tb, just use --back. Also, how are your results? Can you share them with me because I'm not getting that good results. I had to do some post-processing.

@tolchx
Copy link

tolchx commented Jun 10, 2020

@tolchx, I'm not sure but I think there is a problem with arguments. Instead of --tb, just use --back. Also, how are your results? Can you share them with me because I'm not getting that good results. I had to do some post-processing.

I had good results with some videos, I'm experimenting with other material, here I uploaded a video, use the algorithm to segment the dancers, and then apply styletransfer https://www.instagram.com/p/CAsK54qgx_9/
I will try the solution you recommend, thanks

@Flock1
Copy link

Flock1 commented Jun 12, 2020

@tolchx, you are using it for something interesting. Can you elaborate on what you are doing? Also, did you make any changes to the code? Because I had to do some post-processing to get good results.

@zbvictory
Copy link

zbvictory commented Sep 23, 2020

@Flock1 Have you got a good result? Can you share some tips? thanks
and I too got the same error

Done: 154/351
Done: 155/351
Traceback (most recent call last):
File "test_background-matting_image.py", line 92, in
back_img10=cv2.imread(os.path.join(args.target_back,filename.replace('_img.png','.png'))); back_img10=cv2.cvtColor(back_img10,cv2.COLOR_BGR2RGB);
cv2.error: OpenCV(3.4.5) /io/opencv/modules/imgproc/src/color.cpp:181: error: (-215:Assertion failed) !_src.empty() in function 'cvtColor'

@Flock1
Copy link

Flock1 commented Sep 24, 2020

@zbvictory, as I mentioned here, this error happens because the folder doesn't have the image you want to work with. Do check the folder you're getting the image from.

My raw results weren't that good. I'll share the changes I made.

@zbvictory
Copy link

@Flock1 Thank you very much for your reply and look forward to your sharing !

@Sicily-F
Copy link

Sicily-F commented Dec 23, 2020

Hi! I have a small query. I am very interesting in background matting as a technique, however, I don't have photos with a separate background with and without the subject - I have photos of birds in a cage, and I wish to remove the background of the cage bars. I used the background photo for each image as the cropped background of the cage, so the photos are not the same size for the segmentation.

I got this error code
CUDA Device: 0 Using image mode

But it didn't seem like the segmentation actually was performed on the 7 examples of background and image that I provided - any advice would be GREATLY appreciated!

My results when I try and plot are [] instead of any images

@Flock1
Copy link

Flock1 commented Dec 29, 2020

@Sicily-F, from what I can imagine this is probably because it's not reading the images. Can you post the whole error? I might be able to figure out where exactly is the problem

@amrzv
Copy link

amrzv commented Feb 4, 2023

This colab is no longer works because tf<2 is no longer supported in google colaboratory.

@saidulu31
Copy link

I'm getting issue when Setting up the environment:

Screenshot 2024-01-16 172758

can u please explain how to solve this issue

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment