Spaces:
Sleeping
Sleeping
File size: 3,706 Bytes
33c27ec 9184aae 30b12a2 9184aae 33c27ec 9184aae 33c27ec 9184aae 88c3a2a 7d9848b 9184aae 30b12a2 9184aae 30b12a2 33c27ec 9184aae 33c27ec 9184aae 7d9848b 9184aae 7d9848b 9184aae 33c27ec 88c3a2a |
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 |
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=(640, 640)):
# 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...")
upscaled_image_bytes = upscale_image_stable_diffusion(resized_image_bytes)
st.success("Further upscaling image with GFPGAN...")
img = further_upscale_image(upscaled_image_bytes)
st.image(img, caption='Upscaled Image', use_column_width=True)
if __name__ == "__main__":
main()
|