Surn commited on
Commit
358e1b5
·
1 Parent(s): f97739f

Rearranging UI, working on depth

Browse files
.gitignore CHANGED
@@ -164,4 +164,5 @@ cython_debug/
164
  /src/__pycache__
165
  /utils/__pycache__
166
  /__pycache__
167
- /temp_models
 
 
164
  /src/__pycache__
165
  /utils/__pycache__
166
  /__pycache__
167
+ /temp_models
168
+ /.vscode/settings.json
app.py CHANGED
@@ -1,3 +1,5 @@
 
 
1
  import os
2
  # Import constants
3
  import numpy as np
@@ -7,7 +9,7 @@ from typing import Optional, Union, List, Tuple
7
  from PIL import Image, ImageFilter
8
  import cv2
9
  import utils.constants as constants
10
- import gradio as gr
11
 
12
  from haishoku.haishoku import Haishoku
13
 
@@ -15,10 +17,10 @@ from tempfile import NamedTemporaryFile
15
  import atexit
16
  import random
17
  #import accelerate
18
- from transformers import AutoTokenizer, DPTImageProcessor, DPTForDepthEstimation
19
  from pathlib import Path
20
  import logging
21
- #logging.getLogger("transformers.modeling_utils").setLevel(logging.ERROR)
22
  import gc
23
 
24
  IS_SHARED_SPACE = constants.IS_SHARED_SPACE
@@ -32,7 +34,6 @@ from utils.color_utils import (
32
  update_color_opacity,
33
  )
34
  from utils.misc import (get_filename, pause, convert_ratio_to_dimensions) #install_cuda_toolkit,install_torch, _get_output, setup_runtime_env)
35
- #from utils.depth_estimation import generate_depth_button_click
36
 
37
  from utils.image_utils import (
38
  change_color,
@@ -87,7 +88,8 @@ PIPELINE_CLASSES = {
87
  "FluxControlPipeline": FluxControlPipeline
88
  }
89
 
90
- import spaces
 
91
 
92
  input_image_palette = []
93
  current_prerendered_image = gr.State("./images/images/Beeuty-1.png")
@@ -297,7 +299,7 @@ class Condition(object):
297
  type_id = torch.ones_like(ids[:, :1]) * self.type_id
298
  return tokens, ids, type_id
299
 
300
- @spaces.GPU(progress=gr.Progress(track_tqdm=True))
301
  def generate_image_lowmem(
302
  text,
303
  neg_prompt=None,
@@ -342,7 +344,7 @@ def generate_image_lowmem(
342
  if pipeline_name == "FluxPipeline":
343
  pipe.enable_model_cpu_offload()
344
  pipe.vae.enable_slicing()
345
- pipe.vae.enable_tiling()
346
  else:
347
  pipe.enable_model_cpu_offload()
348
 
@@ -593,10 +595,10 @@ def generate_ai_image_local (
593
  return tmp.name
594
  except Exception as e:
595
  print(f"Error generating AI image: {e}")
596
- gc.collect()
597
  return None
598
 
599
- @spaces.GPU(duration=140)
600
  def generate_input_image_click(map_option, prompt_textbox_value, negative_prompt_textbox_value, model_textbox_value, randomize_seed=True, seed=None, use_conditioned_image=False, strength=0.5, image_format="16:9", scale_factor=(8/3), progress=gr.Progress(track_tqdm=True)):
601
  if randomize_seed:
602
  seed = random.randint(0, constants.MAX_SEED)
@@ -651,7 +653,7 @@ def generate_input_image_click(map_option, prompt_textbox_value, negative_prompt
651
  upscaled_image.save(tmp_upscaled.name, format="PNG")
652
  constants.temp_files.append(tmp_upscaled.name)
653
  print(f"Upscaled image saved to {tmp_upscaled.name}")
654
- gc.collect()
655
  # Return the path of the upscaled image
656
  return tmp_upscaled.name
657
 
@@ -689,12 +691,13 @@ def add_border(image, mask_width, mask_height, blank_color):
689
 
690
  ################################## DEPTH ESTIMATION ##################################
691
 
 
 
 
692
 
693
- #@spaces.GPU()
694
  def estimate_depth(image):
695
- # Load models once during module import
696
- image_processor = DPTImageProcessor.from_pretrained("Intel/dpt-large")
697
- depth_model = DPTForDepthEstimation.from_pretrained("Intel/dpt-large", ignore_mismatched_sizes=True)
698
 
699
  # Ensure image is in RGB mode
700
  if image.mode != "RGB":
@@ -736,7 +739,7 @@ def estimate_depth(image):
736
 
737
  return depth_pil, output
738
 
739
- #@spaces.GPU()
740
  def create_3d_model(rgb_image, depth_array, voxel_size_factor=0.01):
741
  import open3d as o3d
742
  depth_o3d = o3d.geometry.Image(depth_array.astype(np.float32))
@@ -745,7 +748,7 @@ def create_3d_model(rgb_image, depth_array, voxel_size_factor=0.01):
745
  rgbd_image = o3d.geometry.RGBDImage.create_from_color_and_depth(
746
  rgb_o3d,
747
  depth_o3d,
748
- convert_rgb_to_intensity=False
749
  )
750
 
751
  # Create a point cloud from the RGBD image
@@ -782,6 +785,7 @@ def generate_depth_and_3d(input_image_path, voxel_size_factor):
782
  model_path = create_3d_model(resized_image, depth_array, voxel_size_factor=voxel_size_factor)
783
  return depth_image, model_path
784
 
 
785
  def generate_depth_button_click(depth_image_source, voxel_size_factor, input_image, output_image, overlay_image, bordered_image_output):
786
  if depth_image_source == "Input Image":
787
  image_path = input_image
@@ -798,7 +802,7 @@ def generate_depth_button_click(depth_image_source, voxel_size_factor, input_ima
798
  def getVersions():
799
  return versions_html()
800
 
801
- generate_input_image_click.zerogpu = True
802
  #generate_depth_button_click.zerogpu = True
803
  #def main(debug=False):
804
  title = "HexaGrid Creator"
@@ -1020,17 +1024,16 @@ with gr.Blocks(css_paths="style_20250128.css", title=title, theme='Surn/beeuty')
1020
  with gr.Column(scale=2):
1021
  with gr.Accordion("Template Image Styles", open = False):
1022
  with gr.Row():
1023
- # Gallery from PRE_RENDERED_IMAGES GOES HERE
1024
- prerendered_image_gallery = gr.Gallery(label="Image Gallery", show_label=True, value=build_prerendered_images(constants.pre_rendered_maps_paths), elem_id="gallery", elem_classes="solid", type="filepath", columns=[3], rows=[3], preview=False ,object_fit="contain", height="auto", format="png",allow_preview=False)
1025
- with gr.Row():
1026
- image_guidance_stength = gr.Slider(label="Image Guidance Strength (prompt percentage)", minimum=0, maximum=1.0, value=0.8, step=0.01, interactive=True)
1027
  with gr.Column():
 
1028
  replace_input_image_button = gr.Button(
1029
  "Replace Input Image",
1030
  elem_id="prerendered_replace_input_image_button",
1031
  elem_classes="solid"
1032
- )
1033
- with gr.Column():
1034
  generate_input_image_from_gallery = gr.Button(
1035
  "Generate AI Image from Gallery",
1036
  elem_id="generate_input_image_from_gallery",
@@ -1212,21 +1215,21 @@ with gr.Blocks(css_paths="style_20250128.css", title=title, theme='Surn/beeuty')
1212
 
1213
 
1214
 
1215
- #if __name__ == "__main__":
1216
- logging.basicConfig(
1217
- format="[%(levelname)s] %(asctime)s %(message)s", level=logging.INFO
1218
- )
1219
- logging.info("Environment Variables: %s" % os.environ)
1220
- # if _get_output(["nvcc", "--version"]) is None:
1221
- # logging.info("Installing CUDA toolkit...")
1222
- # install_cuda_toolkit()
1223
- # else:
1224
- # logging.info("Detected CUDA: %s" % _get_output(["nvcc", "--version"]))
1225
-
1226
- # logging.info("Installing CUDA extensions...")
1227
- # setup_runtime_env()
1228
- #main(os.getenv("DEBUG") == "1")
1229
- #main()
1230
-
1231
- hexaGrid.queue(default_concurrency_limit=1,max_size=12,api_open=False)
1232
- hexaGrid.launch(allowed_paths=["assets","/","./assets","images","./images", "./images/prerendered"], favicon_path="./assets/favicon.ico", max_file_size="10mb")
 
1
+ import gradio as gr
2
+ import spaces
3
  import os
4
  # Import constants
5
  import numpy as np
 
9
  from PIL import Image, ImageFilter
10
  import cv2
11
  import utils.constants as constants
12
+
13
 
14
  from haishoku.haishoku import Haishoku
15
 
 
17
  import atexit
18
  import random
19
  #import accelerate
20
+ from transformers import AutoTokenizer , DPTImageProcessor, DPTForDepthEstimation
21
  from pathlib import Path
22
  import logging
23
+ logging.getLogger("transformers.modeling_utils").setLevel(logging.ERROR)
24
  import gc
25
 
26
  IS_SHARED_SPACE = constants.IS_SHARED_SPACE
 
34
  update_color_opacity,
35
  )
36
  from utils.misc import (get_filename, pause, convert_ratio_to_dimensions) #install_cuda_toolkit,install_torch, _get_output, setup_runtime_env)
 
37
 
38
  from utils.image_utils import (
39
  change_color,
 
88
  "FluxControlPipeline": FluxControlPipeline
89
  }
90
 
91
+ #from utils.depth_estimation import generate_depth_and_3d
92
+
93
 
94
  input_image_palette = []
95
  current_prerendered_image = gr.State("./images/images/Beeuty-1.png")
 
299
  type_id = torch.ones_like(ids[:, :1]) * self.type_id
300
  return tokens, ids, type_id
301
 
302
+ @spaces.GPU(duration=150, progress=gr.Progress(track_tqdm=True))
303
  def generate_image_lowmem(
304
  text,
305
  neg_prompt=None,
 
344
  if pipeline_name == "FluxPipeline":
345
  pipe.enable_model_cpu_offload()
346
  pipe.vae.enable_slicing()
347
+ #pipe.vae.enable_tiling()
348
  else:
349
  pipe.enable_model_cpu_offload()
350
 
 
595
  return tmp.name
596
  except Exception as e:
597
  print(f"Error generating AI image: {e}")
598
+ #gc.collect()
599
  return None
600
 
601
+ #@spaces.GPU(duration=140)
602
  def generate_input_image_click(map_option, prompt_textbox_value, negative_prompt_textbox_value, model_textbox_value, randomize_seed=True, seed=None, use_conditioned_image=False, strength=0.5, image_format="16:9", scale_factor=(8/3), progress=gr.Progress(track_tqdm=True)):
603
  if randomize_seed:
604
  seed = random.randint(0, constants.MAX_SEED)
 
653
  upscaled_image.save(tmp_upscaled.name, format="PNG")
654
  constants.temp_files.append(tmp_upscaled.name)
655
  print(f"Upscaled image saved to {tmp_upscaled.name}")
656
+ #gc.collect()
657
  # Return the path of the upscaled image
658
  return tmp_upscaled.name
659
 
 
691
 
692
  ################################## DEPTH ESTIMATION ##################################
693
 
694
+ # Load models once during module import
695
+ image_processor = DPTImageProcessor.from_pretrained("Intel/dpt-large",)
696
+ depth_model = DPTForDepthEstimation.from_pretrained("Intel/dpt-large", ignore_mismatched_sizes=True)
697
 
698
+ @spaces.GPU()
699
  def estimate_depth(image):
700
+
 
 
701
 
702
  # Ensure image is in RGB mode
703
  if image.mode != "RGB":
 
739
 
740
  return depth_pil, output
741
 
742
+ @spaces.GPU()
743
  def create_3d_model(rgb_image, depth_array, voxel_size_factor=0.01):
744
  import open3d as o3d
745
  depth_o3d = o3d.geometry.Image(depth_array.astype(np.float32))
 
748
  rgbd_image = o3d.geometry.RGBDImage.create_from_color_and_depth(
749
  rgb_o3d,
750
  depth_o3d,
751
+ convert_rgb_to_intensity=True
752
  )
753
 
754
  # Create a point cloud from the RGBD image
 
785
  model_path = create_3d_model(resized_image, depth_array, voxel_size_factor=voxel_size_factor)
786
  return depth_image, model_path
787
 
788
+
789
  def generate_depth_button_click(depth_image_source, voxel_size_factor, input_image, output_image, overlay_image, bordered_image_output):
790
  if depth_image_source == "Input Image":
791
  image_path = input_image
 
802
  def getVersions():
803
  return versions_html()
804
 
805
+ #generate_input_image_click.zerogpu = True
806
  #generate_depth_button_click.zerogpu = True
807
  #def main(debug=False):
808
  title = "HexaGrid Creator"
 
1024
  with gr.Column(scale=2):
1025
  with gr.Accordion("Template Image Styles", open = False):
1026
  with gr.Row():
1027
+ with gr.Column(scale=2):
1028
+ # Gallery from PRE_RENDERED_IMAGES GOES HERE
1029
+ prerendered_image_gallery = gr.Gallery(label="Image Gallery", show_label=True, value=build_prerendered_images(constants.pre_rendered_maps_paths), elem_id="gallery", elem_classes="solid", type="filepath", columns=[3], rows=[3], preview=False ,object_fit="contain", height="auto", format="png",allow_preview=False)
 
1030
  with gr.Column():
1031
+ image_guidance_stength = gr.Slider(label="Image Guidance Strength (prompt percentage)", minimum=0, maximum=1.0, value=0.8, step=0.01, interactive=True)
1032
  replace_input_image_button = gr.Button(
1033
  "Replace Input Image",
1034
  elem_id="prerendered_replace_input_image_button",
1035
  elem_classes="solid"
1036
+ )
 
1037
  generate_input_image_from_gallery = gr.Button(
1038
  "Generate AI Image from Gallery",
1039
  elem_id="generate_input_image_from_gallery",
 
1215
 
1216
 
1217
 
1218
+ if __name__ == "__main__":
1219
+ logging.basicConfig(
1220
+ format="[%(levelname)s] %(asctime)s %(message)s", level=logging.INFO
1221
+ )
1222
+ logging.info("Environment Variables: %s" % os.environ)
1223
+ # if _get_output(["nvcc", "--version"]) is None:
1224
+ # logging.info("Installing CUDA toolkit...")
1225
+ # install_cuda_toolkit()
1226
+ # else:
1227
+ # logging.info("Detected CUDA: %s" % _get_output(["nvcc", "--version"]))
1228
+
1229
+ # logging.info("Installing CUDA extensions...")
1230
+ # setup_runtime_env()
1231
+ #main(os.getenv("DEBUG") == "1")
1232
+ #main()
1233
+
1234
+ hexaGrid.queue(default_concurrency_limit=1,max_size=12,api_open=False)
1235
+ hexaGrid.launch(allowed_paths=["assets","/","./assets","images","./images", "./images/prerendered"], favicon_path="./assets/favicon.ico", max_file_size="10mb")
images/prerendered/alien_world_3.png CHANGED

Git LFS Details

  • SHA256: 3c4d755120cf953d3925c8423c5e6c8c46dc9a92bb54be9865fb77ae63b8a9a6
  • Pointer size: 132 Bytes
  • Size of remote file: 6.54 MB

Git LFS Details

  • SHA256: b7a5deae9ff78aabea23b197982572b13036fc9c59a51789c6c6def93c59cc5f
  • Pointer size: 132 Bytes
  • Size of remote file: 6.17 MB
utils/constants.py CHANGED
@@ -46,7 +46,7 @@ PROMPTS = {
46
  "BorderBlack": "Top-down view of a hexagon-based alien map with black borders. Features rivers, mountains, volcanoes, and snow at top and bottom. Colors: light blue, green, tan, brown. No reflections or shadows. Partial hexes on edges are black.",
47
  "Earth": "Top-down view of a world map with rivers, mountains, volcanoes, and snow at top and bottom. Colors: light blue, green, tan, brown. No reflections or shadows. Partial edge hexes are black. Overhead view.",
48
  "Beeuty": "Top-down view of a table map with honeycomb_shapes, lakes, dense forests, magical flora, and hex_grids. Map for tabletop gaming with clarity and strategic elements. Colors: yellow, green, purple, brown. Partial hexes on edges are black.",
49
- "Scyfi City": "Top-down view of a futuristic urban battlefield map with lakes, forests, ruined buildings, and city streets. Emphasizes clarity and strategy for tabletop games. Colors: teal, dark green, violet, brown. Partial edge hexes are black. Viewed from above.",
50
  "Alien Landscape": "Top-down view of a barren alien world map made from hexagon pieces. Features light blue rivers, brown mountains, red volcanoes, and white snow at top and bottom. Colors: light blue, green, tan, brown. Partial hexes on edges are black.",
51
  "Alien World": "Top-down view of an alien world map built from hexagon pieces. Includes rivers, mountains, volcanoes, and snowy areas. Colors: light blue, green, tan, brown. Partial edge hexes are black. Overhead view.",
52
  "Mystic Forest": "Top-down view of a mystic forest map with lakes, dense forests, magical flora, and hex grids. Designed for clarity in tabletop gaming. Colors: light blue, green, purple, brown. Partial hexes on edges are black.",
 
46
  "BorderBlack": "Top-down view of a hexagon-based alien map with black borders. Features rivers, mountains, volcanoes, and snow at top and bottom. Colors: light blue, green, tan, brown. No reflections or shadows. Partial hexes on edges are black.",
47
  "Earth": "Top-down view of a world map with rivers, mountains, volcanoes, and snow at top and bottom. Colors: light blue, green, tan, brown. No reflections or shadows. Partial edge hexes are black. Overhead view.",
48
  "Beeuty": "Top-down view of a table map with honeycomb_shapes, lakes, dense forests, magical flora, and hex_grids. Map for tabletop gaming with clarity and strategic elements. Colors: yellow, green, purple, brown. Partial hexes on edges are black.",
49
+ "Scifi City": "Top-down view of a futuristic urban battlefield map with lakes, forests, ruined buildings, and city streets. Emphasizes clarity and strategy for tabletop games. Colors: teal, dark green, violet, brown. Partial edge hexes are black. Viewed from above.",
50
  "Alien Landscape": "Top-down view of a barren alien world map made from hexagon pieces. Features light blue rivers, brown mountains, red volcanoes, and white snow at top and bottom. Colors: light blue, green, tan, brown. Partial hexes on edges are black.",
51
  "Alien World": "Top-down view of an alien world map built from hexagon pieces. Includes rivers, mountains, volcanoes, and snowy areas. Colors: light blue, green, tan, brown. Partial edge hexes are black. Overhead view.",
52
  "Mystic Forest": "Top-down view of a mystic forest map with lakes, dense forests, magical flora, and hex grids. Designed for clarity in tabletop gaming. Colors: light blue, green, purple, brown. Partial hexes on edges are black.",