| import gradio as gr |
| import cv2 |
| import numpy as np |
| from PIL import Image |
|
|
| def image_to_sketch(image): |
| img = np.array(image.convert("RGB")) |
| gray = cv2.cvtColor(img, cv2.COLOR_RGB2GRAY) |
| inverted = 255 - gray |
| blurred = cv2.GaussianBlur(inverted, (21, 21), 0) |
|
|
| def dodge(front, back): |
| return cv2.divide(front, 255 - back, scale=255) |
|
|
| sketch = dodge(gray, blurred) |
| return [image, Image.fromarray(sketch)] |
|
|
| |
| demo = gr.Interface( |
| fn=image_to_sketch, |
| inputs=gr.Image(type="pil", label="Upload a portrait image"), |
| outputs=[ |
| gr.Image(label="Original"), |
| gr.Image(label="Sketch"), |
| ], |
| title="🖌️ Image to Sketch Converter", |
| description="Upload a portrait image and watch it turn into a pencil sketch!", |
| examples=None |
| ) |
|
|
| if __name__ == "__main__": |
| demo.launch() |
|
|