OkkhorDiffusion / app.py
ahmedfaiyaz's picture
reverting :(
dfed960 verified
raw
history blame
10.5 kB
from diffusers import DiffusionPipeline
from typing import List, Optional, Tuple, Union
import torch
import gradio as gr
css="""
#input-panel{
align-items:center;
justify-content:center
}
"""
modelnames=[
"ahmedfaiyaz/OkkhorDiffusion",
"ahmedfaiyaz/OkkhorDiffusion-CMATERdb",
"ahmedfaiyaz/OkkhorDiffusion-Ekush"
]
current_model="ahmedfaiyaz/OkkhorDiffusion"
#updated username
pipeline = DiffusionPipeline.from_pretrained(current_model,custom_pipeline="ahmedfaiyaz/OkkhorDiffusion",embedding=torch.float16)
character_mappings = {
'অ': 0,
'আ': 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,
'ক্ষ(ksa)': 60,
'ব্দ(bda)': 61,
'ঙ্গ': 62,
'স্ক': 63,
'স্ফ': 64,
'স্থ': 65,
'চ্ছ': 66,
'ক্ত': 67,
'স্ন': 68,
'ষ্ণ': 69,
'ম্প': 70,
'হ্ম': 71,
'প্ত': 72,
'ম্ব': 73,
'ন্ড': 74,
'দ্ভ': 75,
'ত্থ': 76,
'ষ্ঠ': 77,
'ল্প': 78,
'ষ্প': 79,
'ন্দ': 80,
'ন্ধ': 81,
'ম্ম': 82,
'ন্ঠ': 83,
}
ekush_mappings = {'অ': 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}
cmaterdb_mappings={
'প্র': 0,
'ঙ্গ': 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,
'ন্দ্ব': 112,
'হ্ম': 113,
'ঙ্ঘ': 114,
'খ্র': 115,
'ত্থ': 116,
'ল্ব': 117,
'ম্ন': 118,
'ঘ্ন': 119,
'গ্গ': 120,
'ক্ষ্ণ': 121,
'গ্রু': 122,
'চ্ছ্ব': 123,
'ণ্ণ': 124,
'ল্ম': 125,
'স্র': 126,
'ম্ল': 127,
'ষ্প্র': 128,
'ঞ্ঝ': 129,
'স্প্র': 130,
'ম্ভ্র': 131,
'ষ্প': 132,
'ঙ্খ': 133,
'জ্র': 134,
'গ্ব': 135,
'থ্ব': 136,
'ণ্ব': 137,
'হ্ব': 138,
'দ্দ্ব': 139,
'দ্ঘ': 140,
'ধ্র': 141,
'হ্ল': 142,
'গ্ম': 143,
'ল্গ': 144,
'স্খ': 145,
'থ্র': 146,
'ন্ধ্র': 147,
'ফ্ল': 148,
'ঙ্ক্ষ': 149,
'ণ্ম': 150,
'ঞ্ছ': 151,
'ম্ফ': 152,
'হ্র': 153,
'প্রু': 154,
'ত্রু': 155,
'ভ্ল': 156,
'শ্রু': 157,
'দ্রু': 158,
'ঙ্ম': 159,
'ক্ম': 160,
'দ্গ': 161,
'ন্ড্র': 162,
'ট্ব': 163,
'চ্ঞ': 164,
'প্স': 165,
'ল্ড': 166,
'ষ্ফ': 167,
'শ্ছ': 168,
'জ্ঝ': 169,
'স্ট্র': 170,
'অ': 171,
'আ': 172,
'ই': 173,
'ঈ': 174,
'উ': 175,
'ঊ': 176,
'ঋ': 177,
'এ': 178,
'ঐ': 179,
'ও': 180,
'ঔ': 181,
'ক': 182,
'খ': 183,
'গ': 184,
'ঘ': 185,
'ঙ': 186,
'চ': 187,
'ছ': 188,
'জ': 189,
'ঝ': 190,
'ঞ': 191,
'ট': 192,
'ঠ': 193,
'ড': 194,
'ঢ': 195,
'ণ': 196,
'ত': 197,
'থ': 198,
'দ': 199,
'ধ': 200,
'ন': 201,
'প': 202,
'ফ': 203,
'ব': 204,
'ভ': 205,
'ম': 206,
'য': 207,
'র': 208,
'ল': 209,
'শ': 210,
'ষ': 211,
'স': 212,
'হ': 213,
'ড়': 214,
'ঢ়': 215,
'য়': 216,
'ৎ': 217,
'ং': 218,
'ঃ': 219,
'ঁ': 220}
character_mappings_model_wise={
"ahmedfaiyaz/OkkhorDiffusion":character_mappings,
"ahmedfaiyaz/OkkhorDiffusion-CMATERdb":cmaterdb_mappings,
"ahmedfaiyaz/OkkhorDiffusion-Ekush":ekush_mappings
}
def generate(modelname:str,input_text:str,batch_size:int,inference_steps:int):
batch_size=int(batch_size)
inference_steps=int(inference_steps)
print(f"Generating image with label:{character_mappings_model_wise[current_model][input_text]} batch size:{batch_size}")
label=int(character_mappings_model_wise[current_model][input_text])
pipeline.embedding=torch.tensor([label],device="cpu") #testing zero gpu
generate_image=pipeline(batch_size=batch_size,num_inference_steps=inference_steps).images
return generate_image
def switch_pipeline(modelname:str):
global pipeline
pipeline = DiffusionPipeline.from_pretrained(modelname,custom_pipeline="ahmedfaiyaz/OkkhorDiffusion",embedding=torch.int16)
global current_model
current_model=modelname
return f"""
<div style="text-align: center; margin: 0 auto;">Selected model <a href="https://huggingface.co/{modelname}">{modelname}</a></div>
""",gr.update(choices=character_mappings_model_wise[modelname])
with gr.Blocks(css=css,elem_id="panel") as od_app:
with gr.Column(min_width=100):
text=gr.HTML("""
<div style="text-align: center; margin: 0 auto;">
<div style="display: inline-flex;align-items: center;gap: 0.8rem;font-size: 1.75rem;">
<h1> Okkhor Diffusion </h1>
</div>
</div>
""")
#input panel
choosen_model=gr.HTML(f"""
<div style="text-align: center; margin: 0 auto;">Selected model <a href="https://huggingface.co/{current_model}">{current_model}</a></div>
""")
with gr.Row(elem_id="input-panel"):
with gr.Column(variant="panel",scale=0,elem_id="input-panel-items"):
choose_model=gr.Dropdown(label="Select model",choices=modelnames,value=modelnames[0])
dropdown = gr.Dropdown(label="Select Character",choices=list(character_mappings_model_wise[current_model].keys()))
batch_size = gr.Number(label="Batch Size", minimum=0, maximum=100)
inference_steps= gr.Slider(label="Steps",value=100,minimum=100,maximum=1000,step=100)
btn = gr.Button("Generate",size="sm")
gallery = gr.Gallery(
label="Generated images", show_label=False, elem_id="gallery"
, columns=[10], rows=[10], object_fit="contain", height="auto",scale=1,min_width=80)
choose_model.change(fn=switch_pipeline,inputs=[choose_model],outputs=[choosen_model,dropdown])
btn.click(fn=generate,inputs=[choose_model,dropdown,batch_size,inference_steps],outputs=[gallery])
if __name__=='__main__':
od_app.queue(max_size=20).launch(show_error=True)