Download src/cropper.py from rishavk77/ShelfEye: direct link, hf CLI and curl.
- Browser
- Download file 1.89 kB
-
https://huggingface.co/spaces/rishavk77/ShelfEye/resolve/main/src/cropper.py
- Command line
-
hf download hf://spaces/rishavk77/ShelfEye/src/cropper.py
-
curl -L -o cropper.py https://huggingface.co/spaces/rishavk77/ShelfEye/resolve/main/src/cropper.py
1.89 kB
| """Crop detected product regions from shelf images.""" | |
| import cv2 | |
| import numpy as np | |
| from pathlib import Path | |
| def crop_detections( | |
| image_path: str, | |
| detections: list[dict], | |
| output_dir: str = None, | |
| padding: int = 5, | |
| ) -> list[dict]: | |
| """ | |
| Crop each detected bounding box from the shelf image. | |
| Args: | |
| image_path: path to the shelf image | |
| detections: list of dicts with 'bbox' key ([x1, y1, x2, y2]) | |
| output_dir: if set, save crops as JPEGs | |
| padding: pixels to add around each box (clamped to image bounds) | |
| Returns: | |
| Same detections list, each dict augmented with: | |
| - 'crop': np.ndarray of the cropped region (BGR) | |
| - 'crop_path': str path if output_dir was set | |
| """ | |
| img = cv2.imread(image_path) | |
| h, w = img.shape[:2] | |
| image_name = Path(image_path).stem | |
| if output_dir: | |
| Path(output_dir).mkdir(parents=True, exist_ok=True) | |
| for i, det in enumerate(detections): | |
| x1, y1, x2, y2 = [int(c) for c in det["bbox"]] | |
| x1 = max(0, x1 - padding) | |
| y1 = max(0, y1 - padding) | |
| x2 = min(w, x2 + padding) | |
| y2 = min(h, y2 + padding) | |
| crop = img[y1:y2, x1:x2] | |
| det["crop"] = crop | |
| if output_dir: | |
| crop_path = str(Path(output_dir) / f"{image_name}_crop_{i:03d}.jpg") | |
| cv2.imwrite(crop_path, crop) | |
| det["crop_path"] = crop_path | |
| print(f"[cropper] Cropped {len(detections)} regions from {image_path}") | |
| return detections | |
| if __name__ == "__main__": | |
| import sys | |
| from detector import detect_products | |
| path = sys.argv[1] if len(sys.argv) > 1 else "shelf_images/shelf_01.jpg" | |
| out_dir = sys.argv[2] if len(sys.argv) > 2 else "outputs/crops" | |
| dets = detect_products(path) | |
| dets = crop_detections(path, dets, output_dir=out_dir) | |
| print(f"Saved {len(dets)} crops to {out_dir}") | |