File size: 1,194 Bytes
05ae948
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
import cv2
import numpy as np
import gradio as gr

# Generate a basic Normal map
def generate_normal_map(image):
    # Convert Gradio image (RGB) to grayscale
    img = cv2.cvtColor(image, cv2.COLOR_RGB2GRAY)
    # Compute gradients using Sobel operators
    sobel_x = cv2.Sobel(img, cv2.CV_64F, 1, 0, ksize=3)
    sobel_y = cv2.Sobel(img, cv2.CV_64F, 0, 1, ksize=3)
    # Normalize gradients
    sobel_x = cv2.normalize(sobel_x, None, 0, 1, cv2.NORM_MINMAX)
    sobel_y = cv2.normalize(sobel_y, None, 0, 1, cv2.NORM_MINMAX)
    # Create RGB normal map
    height, width = img.shape
    normal_map = np.zeros((height, width, 3), dtype=np.uint8)
    normal_map[..., 0] = (sobel_x * 255).astype(np.uint8)  # Red (X)
    normal_map[..., 1] = (sobel_y * 255).astype(np.uint8)  # Green (Y)
    normal_map[..., 2] = 255  # Blue (Z)
    return normal_map

# Set up Gradio interface
interface = gr.Interface(
    fn=generate_normal_map,
    inputs=gr.Image(type="numpy", label="Upload Texture Image"),
    outputs=gr.Image(type="numpy", label="Generated Normal Map"),
    title="Material Map Generator",
    description="Upload an image to generate a Normal map."
)

# Launch the app
interface.launch()