Aditya Patkar commited on
Commit
19e3f0f
·
1 Parent(s): a553b07
.vscode/settings.json ADDED
@@ -0,0 +1,16 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "python.linting.enabled": true,
3
+ "python.linting.pylintPath": "pylint",
4
+ "editor.formatOnSave": true,
5
+ "python.formatting.provider": "yapf", // or "black" here
6
+ "python.linting.pylintEnabled": true,
7
+ "python.linting.lintOnSave": true,
8
+ "python.formatting.yapfArgs": [
9
+ "--style={based_on_style: google, column_limit: 80, indent_width: 4}"
10
+ ],
11
+ "[python]": {
12
+ "editor.defaultFormatter": "ms-python.black-formatter"
13
+ },
14
+
15
+
16
+ }
__pycache__/constants.cpython-39.pyc ADDED
Binary file (282 Bytes). View file
 
__pycache__/text_to_image.cpython-39.pyc ADDED
Binary file (1.09 kB). View file
 
app.py ADDED
@@ -0,0 +1,87 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ """
2
+ This file is the main file of the project.
3
+ """
4
+
5
+ # imports
6
+ import streamlit as st
7
+ from text_to_image import generate_image
8
+
9
+
10
+ def setup():
11
+ """
12
+ Streamlit related setup. This has to be run for each page.
13
+ """
14
+
15
+ # hide hamburger menu
16
+ hide_streamlit_style = """
17
+
18
+ <style>
19
+ #MainMenu {visibility: hidden;}
20
+ footer {visibility: hidden;}
21
+ </style>
22
+ """
23
+ st.markdown(hide_streamlit_style, unsafe_allow_html=True)
24
+
25
+
26
+ def main():
27
+ """
28
+ Main function of the app.
29
+ """
30
+
31
+ setup()
32
+
33
+ # title, subheader, and description
34
+ st.title("Text2Canvas")
35
+
36
+ st.subheader("A tool that demonstrates the power of Diffusion")
37
+
38
+ # horizontal line and line break
39
+ st.markdown("<hr>", unsafe_allow_html=True)
40
+ st.markdown("<br>", unsafe_allow_html=True)
41
+
42
+ # sidebar
43
+ st.sidebar.title("Navigation")
44
+ mode = st.sidebar.radio("Select a mode", ["Home", "Text2Image", "Feature2Sprite"])
45
+ # st.sidebar.write("Select a mode to get started")
46
+
47
+ # main content
48
+
49
+ if mode == "Home":
50
+ st.write(
51
+ """
52
+ This tool is a demonstration of the power of Diffusion. It helps you generate images from text. There are two modes:
53
+ 1. **Text2Image**: This mode generates high quality image based on a given prompt. It uses a pretrained model.
54
+ 2. **Feature2Sprite**: This mode generates 16*16 images of sprites based on a combination of features. It uses a custom model trained on a dataset of sprites.
55
+
56
+ To get started, select a mode from the sidebar.
57
+ """
58
+ )
59
+
60
+ elif mode == "Text2Image":
61
+ st.write(
62
+ """
63
+ This mode generates high quality image based on a given prompt. It uses a pretrained model from huggingface.
64
+ """
65
+ )
66
+
67
+ form = st.form(key="my_form")
68
+
69
+ prompt = form.text_input("Enter a prompt", value="A painting of a cat")
70
+
71
+ submit_button = form.form_submit_button(label="Generate")
72
+
73
+ if submit_button:
74
+ st.write("Generating image...")
75
+ image = generate_image(prompt)
76
+ st.image(image, caption="Generated Image", use_column_width=True)
77
+
78
+ elif mode == "Feature2Sprite":
79
+ st.write(
80
+ """
81
+ This mode generates 16*16 images of sprites based on a combination of features. It uses a custom model trained on a dataset of sprites.
82
+ """
83
+ )
84
+
85
+
86
+ if __name__ == "__main__":
87
+ main()
constants.py ADDED
@@ -0,0 +1,5 @@
 
 
 
 
 
 
1
+ """
2
+ This file contains all the constants used in the project.
3
+ """
4
+
5
+ MODEL_ID = "stabilityai/stable-diffusion-2-1"
requirements.txt ADDED
@@ -0,0 +1,4 @@
 
 
 
 
 
1
+ diffusers==0.19.3
2
+ streamlit==1.25.0
3
+ torch==2.0.1
4
+ transformers==4.31.0
text_to_image.py ADDED
@@ -0,0 +1,33 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ """
2
+ This file contains the code for the text to image generation using the Stable Diffusion model.
3
+ """
4
+
5
+ import torch
6
+ from diffusers import StableDiffusionPipeline, DPMSolverMultistepScheduler
7
+
8
+ from constants import MODEL_ID
9
+
10
+
11
+ def generate_image(prompt: str) -> torch.Tensor:
12
+ """
13
+ Generates an image from a given prompt.
14
+
15
+ Args:
16
+ prompt (str): The prompt to generate the image from.
17
+
18
+ Returns:
19
+ torch.Tensor: The generated image.
20
+ """
21
+ # load model
22
+
23
+ pipe = StableDiffusionPipeline.from_pretrained(MODEL_ID, torch_dtype=torch.float16)
24
+ pipe.scheduler = DPMSolverMultistepScheduler.from_config(pipe.scheduler.config)
25
+ if torch.cuda.is_available():
26
+ pipe = pipe.to("cuda") # move model to GPU if available
27
+ print("Model loaded successfully and moved to GPU.")
28
+ else:
29
+ print("Model loaded successfully on CPU.")
30
+
31
+ image = pipe(prompt).images[0]
32
+
33
+ return image