Spaces:
Runtime error
Runtime error
Download visualization/draw.py from IgorSlinko/SquircleCornersPrediction: direct link, hf CLI and curl.
- Browser
- Download file 2.6 kB
-
https://huggingface.co/spaces/IgorSlinko/SquircleCornersPrediction/resolve/main/visualization/draw.py
- Command line
-
hf download hf://spaces/IgorSlinko/SquircleCornersPrediction/visualization/draw.py
-
curl -L -o draw.py https://huggingface.co/spaces/IgorSlinko/SquircleCornersPrediction/resolve/main/visualization/draw.py
2.6 kB
| from pathlib import Path | |
| from PIL import Image, ImageDraw | |
| from .corners import Circle, Corners | |
| DEFAULT_COLOR = (0, 255, 255, 255) | |
| def draw_circle(draw: ImageDraw.Draw, circle: Circle, color: tuple, width: int = 3): | |
| x1 = circle.x - circle.r | |
| y1 = circle.y - circle.r | |
| x2 = circle.x + circle.r | |
| y2 = circle.y + circle.r | |
| draw.ellipse([x1, y1, x2, y2], outline=color, width=width) | |
| def draw_circles( | |
| image: Image.Image, | |
| corners: Corners, | |
| color: tuple = DEFAULT_COLOR, | |
| width: int = 3, | |
| ) -> Image.Image: | |
| image = image.convert("RGBA") | |
| overlay = Image.new("RGBA", image.size, (0, 0, 0, 0)) | |
| draw = ImageDraw.Draw(overlay) | |
| for corner in [corners.top_left, corners.top_right, corners.bottom_left, corners.bottom_right]: | |
| draw_circle(draw, corner, color, width) | |
| result = Image.alpha_composite(image, overlay) | |
| return result.convert("RGB") | |
| def draw_crop_lines( | |
| image: Image.Image, | |
| corners: Corners, | |
| color: tuple = DEFAULT_COLOR, | |
| width: int = 2, | |
| ) -> Image.Image: | |
| image = image.convert("RGBA") | |
| overlay = Image.new("RGBA", image.size, (0, 0, 0, 0)) | |
| draw = ImageDraw.Draw(overlay) | |
| x_left, y_top, x_right, y_bottom = corners.get_crop_bounds() | |
| img_w, img_h = image.size | |
| draw.line([(x_left, 0), (x_left, img_h)], fill=color, width=width) | |
| draw.line([(x_right, 0), (x_right, img_h)], fill=color, width=width) | |
| draw.line([(0, y_top), (img_w, y_top)], fill=color, width=width) | |
| draw.line([(0, y_bottom), (img_w, y_bottom)], fill=color, width=width) | |
| result = Image.alpha_composite(image, overlay) | |
| return result.convert("RGB") | |
| def visualize_corners( | |
| image: Image.Image, | |
| corners: Corners, | |
| output_path: Path | None = None, | |
| color: tuple = DEFAULT_COLOR, | |
| ) -> Image.Image: | |
| image = image.convert("RGBA") | |
| overlay = Image.new("RGBA", image.size, (0, 0, 0, 0)) | |
| draw = ImageDraw.Draw(overlay) | |
| for corner in [corners.top_left, corners.top_right, corners.bottom_left, corners.bottom_right]: | |
| draw_circle(draw, corner, color, width=3) | |
| x_left, y_top, x_right, y_bottom = corners.get_crop_bounds() | |
| img_w, img_h = image.size | |
| draw.line([(x_left, 0), (x_left, img_h)], fill=color, width=2) | |
| draw.line([(x_right, 0), (x_right, img_h)], fill=color, width=2) | |
| draw.line([(0, y_top), (img_w, y_top)], fill=color, width=2) | |
| draw.line([(0, y_bottom), (img_w, y_bottom)], fill=color, width=2) | |
| result = Image.alpha_composite(image, overlay) | |
| result = result.convert("RGB") | |
| if output_path: | |
| result.save(output_path) | |
| return result | |