Spaces:
Runtime error
Runtime error
File size: 4,338 Bytes
d9ce692 6e3a15d bae54db 6e3a15d 195ae48 002da93 6e3a15d d9ce692 195ae48 6e3a15d b075ccc d9ce692 195ae48 d9ce692 6e3a15d d9ce692 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 |
import streamlit as st
import kornia
from torch import nn
import torch
from torchvision.transforms import functional as F
from torchvision.utils import make_grid
from streamlit_ace import st_ace
from PIL import Image
IS_LOCAL = False #Change this
@st.cache(suppress_st_warning=True)
def set_transform(content):
# st.write("set transform")
try:
transform = eval(content, {"kornia": kornia, "nn": nn}, None)
except Exception as e:
st.write(f"There was an error: {e}")
transform = nn.Sequential()
return transform
st.markdown("# Kornia Augmentations Demo")
st.sidebar.markdown(
"[Kornia](https://github.com/kornia/kornia) is a *differentiable* computer vision library for PyTorch."
)
ims=[]
uploaded_files = st.sidebar.file_uploader("Choose a file",accept_multiple_files=True)
if uploaded_files is not None:
for uploaded_file in uploaded_files:
im = Image.open(uploaded_file)
st.sidebar.image(im, caption="Input Image", width=256)
im=im.resize((512,512))
image = F.pil_to_tensor(im).float() / 255
ims.append(image)
else:
im = Image.open("./images/pretty_bird.jpg")
st.sidebar.image(im, caption="Input Image", width=256)
image = F.pil_to_tensor(im).float() / 255
ims.append(image)
scaler = 256
# batch size is just for show
batch_size = st.sidebar.slider("batch_size", min_value=4, max_value=16,value=8)
gpu = st.sidebar.checkbox("Use GPU!", value=True)
if not gpu:
st.sidebar.markdown("With Kornia you do ops on the GPU!")
device = torch.device("cpu")
else:
if not IS_LOCAL:
st.sidebar.markdown("(GPU Not available on hosted demo, try on your local!)")
# Credits
st.sidebar.caption("Demo made by [Ceyda Cinarel](https://linktr.ee/ceydai)")
st.sidebar.markdown("Clone [Code](https://github.com/cceyda/kornia-demo)")
device = torch.device("cpu")
else:
st.sidebar.markdown("Running on GPU~")
device = torch.device("cuda:0")
predefined_transforms = [
"""
nn.Sequential(
kornia.augmentation.RandomAffine(degrees=360,p=0.5),
kornia.augmentation.ColorJitter(brightness=0.2, contrast=0.3, saturation=0.2, hue=0.3, p=1)
)
# p=0.5 is the probability of applying the transformation
""",
"""
nn.Sequential(
kornia.augmentation.RandomErasing(scale=(.4, .8), ratio=(.3, 1/.3), p=0.5),
)
""",
"""
nn.Sequential(
kornia.augmentation.RandomErasing(scale=(.4, .8), ratio=(.3, 1/.3), p=1, same_on_batch=False),
)
#By setting same_on_batch=True you can apply the same transform across the batch
""",
f"""
nn.Sequential(
kornia.augmentation.RandomResizedCrop(size=({scaler}, {scaler}), scale=(3., 3.), ratio=(2., 2.), p=1.),
kornia.augmentation.RandomHorizontalFlip(p=0.7),
kornia.augmentation.RandomGrayscale(p=0.5),
)
""",
]
selected_transform = st.selectbox(
"Pick an augmentation pipeline example:", predefined_transforms
)
st.write("Transform to apply:")
readonly = False
content = st_ace(
value=selected_transform,
height=150,
language="python",
keybinding="vscode",
show_gutter=True,
show_print_margin=True,
wrap=False,
auto_update=False,
readonly=readonly,
)
if content:
# st.write(content)
transform = set_transform(content)
# st.write(transform)
# with st.echo():
# transform = nn.Sequential(
# K.RandomAffine(360),
# K.ColorJitter(0.2, 0.3, 0.2, 0.3)
# )
process = st.button("Next Batch")
# Fake dataloader
if len(ims)>1:
image_batch = torch.stack(ims)
else:
image_batch = torch.stack(batch_size * ims)
image_batch.to(device)
transformeds = None
try:
transformeds = transform(image_batch)
except Exception as e:
st.write(f"There was an error: {e}")
cols = st.columns(4)
# st.image(F.to_pil_image(make_grid(transformeds)))
if transformeds is not None:
for i, x in enumerate(transformeds):
i = i % 4
cols[i].image(F.to_pil_image(x), use_column_width=True)
st.markdown(
"There are a lot more transformations available: [Documentation](https://kornia.readthedocs.io/en/latest/augmentation.module.html)"
)
st.markdown(
"Kornia can do a lot more than augmentations~ [Check it out](https://kornia.readthedocs.io/en/latest/introduction.html#highlighted-features)"
)
# if process:
# pass
|