Spaces:
Paused
Paused
| """ | |
| Helper script to extract signatures from images using saved coordinates. | |
| This script can be used to re-extract signatures from the JSON coordinates file. | |
| """ | |
| import json | |
| import cv2 | |
| from pathlib import Path | |
| def extract_signatures_from_json(json_path="outputs/signature_coordinates.json", | |
| input_dir="inputs", | |
| output_dir="outputs/extracted_signatures"): | |
| """ | |
| Extract signatures from images using saved coordinates in JSON file. | |
| Args: | |
| json_path: Path to the JSON file with coordinates | |
| input_dir: Directory containing original images | |
| output_dir: Directory to save extracted signatures | |
| """ | |
| # Load coordinates | |
| with open(json_path, 'r') as f: | |
| all_detections = json.load(f) | |
| # Create output directory | |
| output_path = Path(output_dir) | |
| output_path.mkdir(parents=True, exist_ok=True) | |
| input_path = Path(input_dir) | |
| print(f"Loaded coordinates for {len(all_detections)} image(s)") | |
| for image_data in all_detections: | |
| image_name = image_data["image"] | |
| image_file = input_path / image_name | |
| if not image_file.exists(): | |
| print(f"Warning: Image {image_name} not found, skipping...") | |
| continue | |
| # Read image | |
| image = cv2.imread(str(image_file)) | |
| if image is None: | |
| print(f"Error: Could not read {image_name}, skipping...") | |
| continue | |
| print(f"\nProcessing: {image_name}") | |
| print(f" Found {len(image_data['signatures'])} signature(s)") | |
| # Extract each signature | |
| for sig_data in image_data["signatures"]: | |
| sig_id = sig_data["signature_id"] | |
| bbox = sig_data["bbox"] | |
| # Get coordinates | |
| x1, y1, x2, y2 = int(bbox["x1"]), int(bbox["y1"]), int(bbox["x2"]), int(bbox["y2"]) | |
| # Ensure coordinates are within image bounds | |
| x1 = max(0, x1) | |
| y1 = max(0, y1) | |
| x2 = min(image.shape[1], x2) | |
| y2 = min(image.shape[0], y2) | |
| # Crop signature | |
| signature_crop = image[y1:y2, x1:x2] | |
| # Save cropped signature | |
| output_filename = f"{Path(image_name).stem}_signature_{sig_id}.jpg" | |
| output_file = output_path / output_filename | |
| cv2.imwrite(str(output_file), signature_crop) | |
| print(f" Signature {sig_id}: confidence={sig_data['confidence']:.2f}, saved to {output_file}") | |
| if __name__ == "__main__": | |
| import sys | |
| json_path = sys.argv[1] if len(sys.argv) > 1 else "outputs/signature_coordinates.json" | |
| extract_signatures_from_json(json_path) | |