Giter VIP home page Giter VIP logo

diffvg's Introduction

diffvg

Differentiable Rasterizer for Vector Graphics https://people.csail.mit.edu/tzumao/diffvg

diffvg is a differentiable rasterizer for 2D vector graphics. See the webpage for more info.

teaser

circle ellipse rect polygon curve path gradient circle_outline ellipse_transform

Install

git submodule update --init --recursive
conda install -y pytorch torchvision -c pytorch
conda install -y numpy
conda install -y scikit-image
conda install -y -c anaconda cmake
conda install -y -c conda-forge ffmpeg
pip install svgwrite
pip install svgpathtools
pip install cssutils
pip install numba
pip install torch-tools
pip install visdom
python setup.py install

Install using poetry

prerequisite

install python 3.7, poetry and ffmpeg

# install poetry (mac, linux)
curl -sSL https://raw.githubusercontent.com/python-poetry/poetry/master/get-poetry.py | python -

# install ffmpeg

(macos)
brew install ffmpeg

(linux)
sudo apt install ffmpeg

or use conda
conda install -y -c conda-forge ffmpeg

Install python packages

# install all python dependencies
poetry install

# install pydiffvg
poetry run python setup.py install

Now to run the apps, just add poetry run before each of the commands below, e.g.

poetry run python single_circle.py

Building in debug mode

python setup.py build --debug install

Run

cd apps

Optimizing a single circle to a target.

python single_circle.py

Finite difference comparison.

finite_difference_comp.py [-h] [--size_scale SIZE_SCALE]
                               [--clamping_factor CLAMPING_FACTOR]
                               [--use_prefiltering USE_PREFILTERING]
                               svg_file

e.g.,

python finite_difference_comp.py imgs/tiger.svg

Interactive editor

python svg_brush.py

Painterly rendering

painterly_rendering.py [-h] [--num_paths NUM_PATHS]
                       [--max_width MAX_WIDTH] [--use_lpips_loss]
                       [--num_iter NUM_ITER] [--use_blob]
                       target

e.g.,

python painterly_rendering.py imgs/fallingwater.jpg --num_paths 2048 --max_width 4.0 --use_lpips_loss

Image vectorization

python refine_svg.py [-h] [--use_lpips_loss] [--num_iter NUM_ITER] svg target

e.g.,

python refine_svg.py imgs/flower.svg imgs/flower.jpg

Seam carving

python seam_carving.py [-h] [--svg SVG] [--optim_steps OPTIM_STEPS]

e.g.,

python seam_carving.py imgs/hokusai.svg

Vector variational autoencoder & vector GAN:

For the GAN models, see apps/generative_models/train_gan.py. Generate samples from a pretrained using apps/generative_models/eval_gan.py.

For the VAE models, see apps/generative_models/mnist_vae.py.

If you use diffvg in your academic work, please cite

@article{Li:2020:DVG,
    title = {Differentiable Vector Graphics Rasterization for Editing and Learning},
    author = {Li, Tzu-Mao and Luk\'{a}\v{c}, Michal and Gharbi Micha\"{e}l and Jonathan Ragan-Kelley},
    journal = {ACM Trans. Graph. (Proc. SIGGRAPH Asia)},
    volume = {39},
    number = {6},
    pages = {193:1--193:15},
    year = {2020}
}

diffvg's People

Contributors

bachili avatar weinman avatar oeway avatar robinsloan avatar daniel347x avatar marcoleewow avatar mworchel avatar orenkatzir avatar samestep avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.