| import os |
| from PIL import ImageDraw |
| from PIL import ImageFont |
|
|
| |
| STABILITY_HOST = os.environ["STABILITY_HOST"] |
| STABILITY_KEY = os.environ["STABILITY_KEY"] |
| cohere_key = os.environ["cohere_key"] |
| import cohere |
| import random |
| co = cohere.Client(cohere_key) |
| import io |
| import os |
| import warnings |
| import math |
| from math import sqrt |
| from IPython.display import display |
| from PIL import Image |
| from stability_sdk import client |
| import stability_sdk.interfaces.gooseai.generation.generation_pb2 as generation |
| from PIL import Image |
| |
| stability_api = client.StabilityInference( |
| key=os.environ['STABILITY_KEY'], |
| verbose=True, |
| ) |
|
|
|
|
| def generate_caption_keywords(prompt, model='command-xlarge-20221108', max_tokens=200, temperature=random.uniform(0.1, 2), k=0, p=0.75, frequency_penalty=0, presence_penalty=0, stop_sequences=[]): |
| |
| response = co.generate( |
| model=model, |
| prompt=prompt, |
| max_tokens=max_tokens, |
| temperature=temperature, |
| k=k, |
| p=p, |
| frequency_penalty=frequency_penalty, |
| presence_penalty=presence_penalty, |
| stop_sequences=stop_sequences, |
| return_likelihoods='NONE') |
|
|
| def highlight_keywords(text): |
| keywords = [] |
| text = text.lower() |
| text = re.sub(r'[^a-z\s]', '', text) |
| text = re.sub(r'\b(the|and|of)\b', '', text) |
| words = text.split() |
| for word in words: |
| if word not in keywords: |
| keywords.append(word) |
| return keywords |
|
|
| caption = response.generations[0].text |
| keywords = highlight_keywords(caption) |
| keywords_string = ', '.join(keywords) |
|
|
| return caption, keywords_string |
|
|
|
|
| |
| def img2img( path ,secret_key,design,x_prompt,alt_prompt,strength,guidance_scale,steps): |
| |
| |
| |
| img = Image.open(path) |
| width, height = img.size |
| num_pixels = width * height |
| |
| |
| max_pixels = 1048576 |
|
|
| |
| if width * height > max_pixels: |
| |
| ratio = width / height |
| new_width = int(math.sqrt(max_pixels * ratio)) |
| new_height = int(math.sqrt(max_pixels / ratio)) |
| else: |
| new_width = width |
| new_height = height |
|
|
| |
| if new_width % 64 != 0: |
| new_width = ((new_width + 63) // 64) * 64 |
| if new_height % 64 != 0: |
| new_height = ((new_height + 63) // 64) * 64 |
|
|
| |
| img = img.resize((new_width, new_height), resample=Image.BILINEAR) |
|
|
| |
| |
| if new_width * new_height > max_pixels: |
| while new_width * new_height > max_pixels: |
| new_width -= 1 |
| new_height = int(max_pixels / new_width) |
|
|
|
|
|
|
| |
| |
| if new_width % 64 != 0: |
| new_width = (new_width // 64) * 64 |
| if new_height % 64 != 0: |
| new_height = (new_height // 64) * 64 |
|
|
| |
| if new_width > 1407: |
| new_width -= 64 |
| if new_height > 745: |
| new_height -= 64 |
| |
| new_height ,new_width |
| |
| widthz = new_width |
| heightz = new_height |
|
|
| |
| if widthz % 64 != 0: |
| widthz = (widthz // 64) * 64 |
| if heightz % 64 != 0: |
| heightz = (heightz // 64) * 64 |
|
|
| |
| if widthz > 1407: |
| widthz -= 64 |
| if heightz > 745: |
| heightz -= 64 |
|
|
| |
|
|
| img = img.resize((widthz, heightz), resample=Image.BILINEAR) |
| |
|
|
|
|
| |
| max_attempts = 5 |
| attempts = 0 |
| while attempts < max_attempts: |
| try: |
| if x_prompt == True: |
| prompt = alt_prompt |
| else: |
| try: |
| caption, keywords = generate_caption_keywords(design) |
| prompt = keywords |
| except: |
| prompt = design |
|
|
| |
| answers = stability_api.generate( |
| prompt, |
| init_image=img, |
| seed=54321, |
| start_schedule=strength, |
| ) |
| for resp in answers: |
| for artifact in resp.artifacts: |
| if artifact.finish_reason == generation.FILTER: |
| warnings.warn( |
| "Your request activated the API's safety filters and could not be processed." |
| "Please modify the prompt and try again.") |
| if artifact.type == generation.ARTIFACT_IMAGE: |
| img2 = Image.open(io.BytesIO(artifact.binary)) |
| img2 = img2.resize((new_width, new_height), resample=Image.BILINEAR) |
| img2.save("new_image.jpg") |
| print(type(img2)) |
| |
| |
| if secret_key not in os.environ['secretz']: |
|
|
| draw = ImageDraw.Draw(img2) |
|
|
| |
| font = ImageFont.truetype('arial.ttf', 32) |
| text_color = (255, 255, 255) |
|
|
| |
| width, height = img2.size |
|
|
| |
| text_x = 10 |
| text_y = height - 100 |
|
|
| |
| draw.text((text_x, text_y), 'Please enter secret key to get HD image without \n watermark', font=font, fill=text_color) |
|
|
| |
| line_color = (0, 0, 0) |
| draw.line((0, 0) + (width, height), fill=line_color, width=5) |
| draw.line((0, height) + (width, 0), fill=line_color, width=5) |
|
|
| |
| img2.save('image_with_watermark.jpg') |
| img2 |
|
|
|
|
| return img2 |
| except Exception as e: |
| |
| attempts += 1 |
| print("Attempt {} failed: {}".format(attempts, e)) |
| |
| raise Exception("Maximum number of attempts reached, unable to generate image") |
|
|
|
|
|
|
| import gradio as gr |
|
|
| gr.Interface(img2img, [gr.Image(source="upload", type="filepath", label="Input Image"), |
| gr.Textbox(label = 'enter secret key to get HD image without watermark , connect with Xhaheen to get key',value = 'secret_santa', type="password" ), |
| |
| gr.Dropdown(['interior design of living room', |
| 'interior design of gaming room', |
| 'interior design of kitchen', |
| 'interior design of bedroom', |
| 'interior design of bathroom', |
| 'interior design of office', |
| 'interior design of meeting room', |
| 'interior design of personal room'],label="Click here to select your design by GPT-3/Cohere Language model",value = 'interior design'), |
| gr.Checkbox(label="Check Custom design if you already have prompt",value = False), |
|
|
| gr.Textbox(label = ' Input custom Prompt Text'), |
| gr.Slider(label='Strength , try with multiple value betweens 0.55 to 0.9 ', minimum = 0, maximum = 1, step = .01, value = .65), |
| gr.Slider(2, 15, value = 7, label = 'Guidence Scale'), |
| gr.Slider(10, 50, value = 50, step = 1, label = 'Number of Iterations') |
| ], |
| gr.Image(), |
| examples =[['1.png',"xxx",'interior design of living room','False','interior design',0.6,7,50], |
| ['2.png',"xxx",'interior design of hall ','False','interior design',0.7,7,50], |
| ['3.png',"xxx",'interior design of bedroom','False','interior design',0.6,7,50]], |
| title = "" +'**Baith-al-suroor بَیتُ الْسرور 🏡🤖**, Transform your space with the power of artificial intelligence. '+ "", |
| description="Baith al suroor بَیتُ الْسرور (house of happiness in Arabic) 🏡🤖 is a deeptech app that uses the power of artificial intelligence to transform your space. With the Cohere/GPT3 language model, it can generate descriptions of your desired design, and the Stable Diffusion algorithm creates relevant images to bring your vision to your thoughts. Give Baith AI a try and see how it can elevate your interior design.--if you want to scale / reaserch / build mobile app / get secret key for research purpose on this space konnect me @[Xhaheen](https://www.linkedin.com/in/sallu-mandya/)").launch( show_api=False,debug = True) |
|
|