|
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) |
|
|