Spaces:
Build error
Build error
import cv2 | |
import numpy as np | |
from PIL import Image, ImageDraw, ImageFont | |
import gradio as gr | |
# Function to detect fabric texture and generate a displacement map | |
def generate_displacement_map(image): | |
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) | |
laplacian = cv2.Laplacian(gray, cv2.CV_32F) # Detect edges and texture | |
displacement_map = cv2.normalize(laplacian, None, alpha=0, beta=1, norm_type=cv2.NORM_MINMAX) | |
return displacement_map | |
# Function to blend text with the cloth image | |
def blend_text_with_cloth(cloth_image, text, font_size=32, font_color=(255, 0, 0), x=50, y=50): | |
# Convert cloth image to BGR for OpenCV processing | |
cloth_image = np.array(cloth_image) | |
cloth_bgr = cv2.cvtColor(cloth_image, cv2.COLOR_RGBA2BGRA) | |
# Generate displacement map | |
displacement_map = generate_displacement_map(cloth_bgr) | |
# Render text | |
img_pil = Image.fromarray(cloth_image) | |
draw = ImageDraw.Draw(img_pil) | |
# Load a font (use a default font if custom font isn't available) | |
try: | |
font = ImageFont.truetype("arial.ttf", font_size) | |
except: | |
font = ImageFont.load_default() | |
draw.text((x, y), text, font=font, fill=font_color) | |
rendered_text = np.array(img_pil) | |
# Convert rendered text image to BGR | |
text_bgr = cv2.cvtColor(rendered_text, cv2.COLOR_RGBA2BGRA) | |
# Blend text with cloth image using displacement map | |
blended = cv2.addWeighted(cloth_bgr, 0.8, text_bgr, 0.5, 0) | |
final_image = cv2.cvtColor(blended, cv2.COLOR_BGRA2RGBA) | |
return Image.fromarray(final_image) | |
# Gradio function | |
def process_image(image, text, font_size, font_color, x, y): | |
font_color = tuple(map(int, font_color.strip("()").split(","))) # Convert string to tuple | |
result = blend_text_with_cloth(image, text, font_size, font_color, x, y) | |
return result | |
# Gradio Interface | |
interface = gr.Interface( | |
fn=process_image, | |
inputs=[ | |
gr.Image(type="pil", label="Upload Cloth Image"), | |
gr.Textbox(label="Text to Blend", default="Sample Text"), | |
gr.Slider(10, 100, step=2, label="Font Size", default=32), | |
gr.Textbox(label="Font Color (RGB)", default="(255, 0, 0)"), | |
gr.Slider(0, 1000, step=10, label="X Coordinate", default=50), | |
gr.Slider(0, 1000, step=10, label="Y Coordinate", default=50), | |
], | |
outputs=gr.Image(type="pil", label="Blended Output"), | |
title="Text-Cloth Blending", | |
description="Upload a cloth image and add text that blends naturally into the fabric. Adjust parameters like font size, color, and position.", | |
) | |
# Launch the app | |
if __name__ == "__main__": | |
interface.launch() | |