Spaces:
Sleeping
Sleeping
File size: 3,867 Bytes
3e7d217 33c27ec 9184aae 30b12a2 9184aae 33c27ec 9184aae 3e7d217 9184aae 33c27ec 9184aae a489489 3e7d217 7d9848b 3e7d217 7d9848b 3e7d217 7d9848b 9184aae 3e7d217 30b12a2 3e7d217 30b12a2 3e7d217 30b12a2 3e7d217 30b12a2 3e7d217 30b12a2 3e7d217 30b12a2 33c27ec 9184aae 3e7d217 9184aae 3e7d217 9184aae 3e7d217 9184aae 3e7d217 9184aae 33c27ec 3e7d217 c57515e 3e7d217 c57515e 3e7d217 33c27ec 3e7d217 |
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 |
import streamlit as st
import os
import requests
from PIL import Image
from io import BytesIO
import replicate
from stability_sdk import client
import stability_sdk.interfaces.gooseai.generation.generation_pb2 as generation
# Configure your API keys here
CLIPDROP_API_KEY = '1143a102dbe21628248d4bb992b391a49dc058c584181ea72e17c2ccd49be9ca69ccf4a2b97fc82c89ff1029578abbea'
STABLE_DIFFUSION_API_KEY = 'sk-GBmsWR78MmCSAWGkkC1CFgWgE6GPgV00pNLJlxlyZWyT3QQO'
# Set up environment variable for Replicate API Token
os.environ['REPLICATE_API_TOKEN'] = 'r8_3V5WKOBwbbuL0DQGMliP0972IAVIBo62Lmi8I' # Replace with your actual API token
def generate_image_from_text(prompt):
r = requests.post('https://clipdrop-api.co/text-to-image/v1',
files = {
'prompt': (None, prompt, 'text/plain')
},
headers = { 'x-api-key': CLIPDROP_API_KEY }
)
if r.ok:
return r.content
else:
r.raise_for_status()
def resize_image(image_bytes, max_size=(256, 256)):
# Open the image from bytes
img = Image.open(BytesIO(image_bytes))
# Resize the image
img.thumbnail(max_size)
# Save it back to bytes
buffer = BytesIO()
img.save(buffer, format="PNG")
return buffer.getvalue()
def upscale_image_stable_diffusion(image_bytes):
# Set up environment variables
os.environ['STABILITY_HOST'] = 'grpc.stability.ai:443'
os.environ['STABILITY_KEY'] = STABLE_DIFFUSION_API_KEY
# Set up the connection to the API
stability_api = client.StabilityInference(
key=os.environ['STABILITY_KEY'],
upscale_engine="stable-diffusion-x4-latent-upscaler",
verbose=True,
)
# Open the image from bytes
img = Image.open(BytesIO(image_bytes))
# Call the upscale API
answers = stability_api.upscale(init_image=img)
# Process the response
upscaled_img_bytes = None
for resp in answers:
for artifact in resp.artifacts:
if artifact.type == generation.ARTIFACT_IMAGE:
upscaled_img = Image.open(BytesIO(artifact.binary))
upscaled_img_bytes = BytesIO()
upscaled_img.save(upscaled_img_bytes, format='PNG')
upscaled_img_bytes = upscaled_img_bytes.getvalue()
return upscaled_img_bytes
def further_upscale_image(image_bytes):
# Run the GFPGAN model
output = replicate.run(
"tencentarc/gfpgan:9283608cc6b7be6b65a8e44983db012355fde4132009bf99d976b2f0896856a3",
input={"img": BytesIO(image_bytes), "version": "v1.4", "scale": 16}
)
# The output is a URI of the processed image
# We will retrieve the image data and save it
response = requests.get(output)
img = Image.open(BytesIO(response.content))
img.save("upscaled.png") # Save the upscaled image
return img
def main():
st.title("Image Generation and Upscaling")
st.write("Enter a text prompt and an image will be generated and upscaled.")
prompt = st.text_input("Enter a textual prompt to generate an image...")
if prompt:
st.success("Generating image from text prompt...")
image_bytes = generate_image_from_text(prompt)
st.success("Resizing image...")
resized_image_bytes = resize_image(image_bytes)
st.success("Upscaling image with stable-diffusion-x4-latent-upscaler...")
# use the resized_image_bytes instead of the original image_bytes
upscaled_image_bytes = upscale_image_stable_diffusion(resized_image_bytes)
st.success("Further upscaling image with GFPGAN...")
# Again use the upscaled_image_bytes from the previous step for the GFPGAN
img = further_upscale_image(upscaled_image_bytes)
st.image(img, caption='Upscaled Image', use_column_width=True)
if __name__ == "__main__":
main()
|