Spaces:
Sleeping
Sleeping
| import gradio as gr | |
| import numpy as np | |
| from PIL import Image | |
| def cartoonify(image): | |
| # Convert the input image (PIL format) to a NumPy array for OpenCV | |
| img = np.array(image) | |
| # Convert to grayscale | |
| gray = cv2.cvtColor(img, cv2.COLOR_RGB2GRAY) | |
| # Apply a median blur to reduce noise | |
| gray_blur = cv2.medianBlur(gray, 7) | |
| # Detect edges using adaptive thresholding (for that cartoon outline effect) | |
| edges = cv2.adaptiveThreshold( | |
| gray_blur, | |
| 255, | |
| cv2.ADAPTIVE_THRESH_MEAN_C, | |
| cv2.THRESH_BINARY, | |
| 9, | |
| 2 | |
| ) | |
| # Convert back to RGB so we can apply a bilateral filter | |
| color = cv2.cvtColor(gray, cv2.COLOR_GRAY2RGB) | |
| # Apply bilateral filter to smooth colors while keeping edges sharp | |
| color = cv2.bilateralFilter(color, 9, 75, 75) | |
| # Combine edges and smoothed image | |
| cartoon = cv2.bitwise_and(color, color, mask=edges) | |
| # Convert back to PIL Image for Gradio | |
| result = Image.fromarray(cartoon) | |
| return result | |
| # Define the Gradio interface | |
| interface = gr.Interface( | |
| fn=cartoonify, | |
| inputs=gr.Image(type="pil", label="Upload an Image"), | |
| outputs=gr.Image(type="pil", label="Cartoonified Image"), | |
| title="Black and White Cartoon Generator", | |
| description="Upload an image to convert it into a black-and-white, old-fashioned cartoon style!" | |
| ) | |
| # Launch the app | |
| interface.launch() |