Spaces:
Runtime error
Runtime error
from imgofai import * | |
import matplotlib.pyplot as plt | |
import PIL | |
import numpy as np | |
from pathlib import Path | |
from imgofai.tree import img2df, df2xy | |
import pandas as pd | |
from sklearn.tree import DecisionTreeRegressor | |
from sklearn.preprocessing import FunctionTransformer | |
from sklearn.pipeline import make_pipeline | |
import streamlit as st | |
import requests | |
st.write("# Images of AI Demo") | |
st.write("This page demonstrates how I created the images I submitted for [Better Images of AI project](https://betterimagesofai.org/images)") | |
def add_radial_features(X,y=None): | |
assert isinstance(X, pd.DataFrame), "X is not a dataframe" | |
xp = X.copy() | |
xp['dim0'] = np.sqrt(((X - X.mean())**2).sum(axis=1)) | |
xp['dim1'] = np.arctan2(X['dim1'],X['dim0']) | |
X = pd.concat([ | |
X, | |
xp, | |
],axis=1) | |
return X | |
def make_tree_approximator(radial = False, max_depth=4): | |
if radial: | |
model = make_pipeline( | |
FunctionTransformer(add_radial_features), | |
DecisionTreeRegressor(max_depth=max_depth), | |
) | |
else: | |
model = DecisionTreeRegressor(max_depth=max_depth) | |
model.fit(x_raw, y) | |
pred = PIL.Image.fromarray( | |
model.predict(x_raw).reshape(img_array.shape).round().astype("uint8") | |
) | |
score = model.score(x_raw, y) | |
return pred | |
st.write("## Try it out yourself:") | |
url = st.text_input("Image url:", "https://images.unsplash.com/reserve/bOvf94dPRxWu0u3QsPjF_tree.jpg?ixlib=rb-1.2.1&ixid=MnwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8&auto=format&fit=crop&w=1752&q=80") | |
img = PIL.Image.open(requests.get(url, stream=True).raw) | |
img_array = np.array(img) | |
df = img2df(img_array) | |
x_raw, y = df2xy(df) | |
ccol1, ccol2, _ = st.columns(3) | |
with ccol1: | |
max_depth1 = st.slider("max depth left:",1,12,2) | |
radial1 = st.checkbox("radial features left", value=False) | |
with ccol2: | |
max_depth2 = st.slider("max depth middle:",1,12,6) | |
radial2 = st.checkbox("radial features middle", value=False) | |
st.write("## Output") | |
col1, col2, col3 = st.columns(3) | |
with col1: | |
left_img = make_tree_approximator(radial1, max_depth=max_depth1) | |
st.image(left_img) | |
with col2: | |
mid_img = make_tree_approximator(radial2, max_depth=max_depth2) | |
st.image(mid_img) | |
with col3: | |
st.image(img) | |