Spaces:
Sleeping
Sleeping
File size: 2,680 Bytes
f45aefd 50e7fdf f45aefd d835849 f45aefd 1e24872 f45aefd 1e24872 5312728 f45aefd 1e24872 d835849 f45aefd 1e24872 d835849 f45aefd 1e24872 d835849 f45aefd 1e24872 d835849 f45aefd 1e24872 d835849 f45aefd 1e24872 f45aefd d835849 1e24872 50e7fdf 1e24872 d835849 1e24872 f45aefd 5312728 2541aba f45aefd 5312728 0db9a41 d835849 6c92a72 5312728 1e24872 6c92a72 f45aefd d835849 5312728 d835849 |
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 |
# Attempt to import cv2 and install opencv-python-headless if not available
try:
import cv2
except ImportError:
import subprocess
subprocess.check_call(["pip", "install", "opencv-python-headless"])
import cv2
from PIL import Image
import numpy as np
import gradio as gr
# Function to convert image to sketch
def convert_to_sketch(img, blur_strength, brightness, contrast):
# Convert PIL Image to numpy array
img = np.array(img)
# Convert the image to grayscale
img_gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# Invert the grayscale image
img_inverted = cv2.bitwise_not(img_gray)
# Apply Gaussian blur to the inverted image
img_blur = cv2.GaussianBlur(img_inverted, (blur_strength, blur_strength), sigmaX=0, sigmaY=0)
# Blend the grayscale and blurred inverted images to create the sketch effect
img_blend = cv2.divide(img_gray, 255 - img_blur, scale=256)
# Create a white background
white_background = 255 * np.ones_like(img_blend)
# Add the blended image to the white background
sketch_with_bg = cv2.addWeighted(img_blend, 1, white_background, 1, 0)
# Adjust brightness and contrast
sketch_with_bg = adjust_brightness_contrast(sketch_with_bg, brightness, contrast)
return sketch_with_bg
# Function to adjust brightness and contrast
def adjust_brightness_contrast(img, brightness, contrast):
# Apply contrast adjustment
img = cv2.convertScaleAbs(img, alpha=contrast, beta=brightness)
return img
# Gradio interface function
def sketch_interface(image, blur_strength, brightness, contrast):
# Convert the input image to a sketch with adjustments
sketch = convert_to_sketch(image, blur_strength, brightness, contrast)
# Ensure the output is a valid image (PIL Image)
output_image = Image.fromarray(sketch)
# Check if the image was properly created
if output_image:
print("Image processed successfully!")
else:
print("Failed to process image!")
# Return the processed sketch image
return output_image
# Create Gradio interface
interface = gr.Interface(
fn=sketch_interface,
inputs=[
gr.Image(type="pil", label="Upload Image"),
gr.Slider(1, 51, step=2, label="Blur Strength", value=21),
gr.Slider(-100, 100, label="Brightness", value=0),
gr.Slider(1, 3, step=0.1, label="Contrast", value=1)
],
outputs=[gr.Image(type="pil", label="Sketch Output")],
title="Cartoon to Sketch Converter",
description="Upload an image to convert it into a sketch, adjust the blur strength, brightness, and contrast for different effects."
)
# Launch the Gradio app
interface.launch() |