No project description provided
Project description
Tensor Canvas 🎨
A 2D graphics library for drawing directly onto tensors.
Uses eagerpy to support a uniform API for pytorch, tensorflow, jax, and numpy backends.
Tensor Canvas uses SDF representations for easy implementation in gpu-accelerated frameworks.
Highly inefficient compared to standard gpu rendering, but much better than matplotlib. Integration with ML frameworks also means it is fully-differentiable.
Installation
pip install tensor-canvas
Example
import tensorcanvas as tc
import torch
import tensorflow as tf
import jax.numpy as jnp
import numpy as np
# define 3 cirlces with different positions, radii, and colors
x1, y1, r1, c1 = 34.8, 5.3, 2.0, [0.3, 0.2, 1.0]
x2, y2, r2, c2 = 14.8, 15.3, 5.0, [0.1, 0.9, 0.8]
x3, y3, r3, c3 = 30.8, 20.3, 3.0, [0.0, 0.9, 0.0]
# canvas dimensions
height, width, channels = 32, 64, 3
# draw 3 colored circles on a pytorch image tensor
pt_canvas = torch.zeros(channels, height, width)
pt_canvas = tc.draw_circle(x1, y1, r1, torch.tensor(c1), pt_canvas)
pt_canvas = tc.draw_circle(x2, y2, r2, torch.tensor(c2), pt_canvas)
pt_canvas = tc.draw_circle(x3, y3, r3, torch.tensor(c3), pt_canvas)
# draw 3 colored cirlces on a tensorflow image tensor
tf_canvas = tf.zeros([height, width, channels])
tf_canvas = tc.draw_circle(x1, y1, r1, tf.convert_to_tensor(c1), tf_canvas)
tf_canvas = tc.draw_circle(x2, y2, r2, tf.convert_to_tensor(c2), tf_canvas)
tf_canvas = tc.draw_circle(x3, y3, r3, tf.convert_to_tensor(c3), tf_canvas)
# draw 3 colored cirlces on a jax image tensor
jx_canvas = jnp.zeros([height, width, channels])
jx_canvas = tc.draw_circle(x1, y1, r1, jnp.array(c1), jx_canvas)
jx_canvas = tc.draw_circle(x2, y2, r2, jnp.array(c2), jx_canvas)
jx_canvas = tc.draw_circle(x3, y3, r3, jnp.array(c3), jx_canvas)
# draw 3 colored cirlces on a numpy image tensor
np_canvas = np.zeros([height, width, channels])
np_canvas = tc.draw_circle(x1, y1, r1, np.array(c1), np_canvas)
np_canvas = tc.draw_circle(x2, y2, r2, np.array(c2), np_canvas)
np_canvas = tc.draw_circle(x3, y3, r3, np.array(c3), np_canvas)
# check results are indentical
assert(np.allclose(np_canvas, pt_canvas.permute(1,2,0), atol=1e-6))
assert(np.allclose(np_canvas, tf_canvas, atol=1e-6))
assert(np.allclose(np_canvas, jx_canvas, atol=1e-6))
Notebook Example
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
tensor-canvas-0.1.7.tar.gz
(3.0 kB
view hashes)
Built Distribution
Close
Hashes for tensor_canvas-0.1.7-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 8d57c57b56a27a13d47972b4a509c04d5965a572cd6e70bf3db062e3bce3e555 |
|
MD5 | 96051437b54d1bfb933080a3de6d0dc1 |
|
BLAKE2b-256 | a72a6c08c4bc9ef97b419c8e158b0c89116835f8404eab61fc1984fe205676b2 |