| import os | |
| import cv2 | |
| import json | |
| import numpy as np | |
| from PIL import Image | |
| import scripts.config as config | |
| print('Starting processing...') | |
| os.makedirs(config.masks, exist_ok=True) | |
| for nameFile in os.listdir(config.images): | |
| if nameFile.endswith('.json'): | |
| jsonPath = os.path.join(config.images, nameFile) | |
| dados = '' | |
| with open(jsonPath, 'r', encoding='utf-8') as f: | |
| dados = json.load(f) | |
| baseName = os.path.splitext(nameFile)[0] | |
| imagePath = os.path.join(config.images, baseName + '.jpg') | |
| image = cv2.imread(imagePath) | |
| if image is None: | |
| print(f"Image {imagePath} not found or invalid.") | |
| continue | |
| height, width = image.shape[:2] | |
| imgShape = (height, width) | |
| contador = 0 | |
| for shape in dados.get('shapes', []): | |
| if shape.get('label') == 'gado' and shape.get('shape_type') == 'polygon': | |
| mask = np.zeros(imgShape, dtype=np.uint8) | |
| pts = np.array(shape['points'], dtype=np.int32) | |
| cv2.fillPoly(mask, [pts], color=1) | |
| imgMask = (mask * 255).astype(np.uint8) | |
| imgMask = Image.fromarray(imgMask) | |
| maskName = f"{baseName}_{contador}.png" if contador > 1 else f"{baseName}.png" | |
| endPath = os.path.join(config.masks, maskName) | |
| imgMask.save(endPath) | |
| print(f"Saved: {endPath}") | |
| contador += 1 | |
| print('\n\nCompleted...') | |