Generador de datasets sintéticos para el entrenamiento de modelos de visión artificial (detección de embarcaciones en el mar), desarrollado como parte del proyecto de CubeSat (CubeDesign 2025 — INPE). Renderiza escenas oceánicas cenitales con modelos 3D de barcos y produce anotaciones YOLO de forma automática mediante segmentación por instancias.
- Carga todos los
.objdeassets/(convención Y-up, cubierta hacia +Y). - Normaliza escala, centra cada modelo y lo posiciona en su línea de flotación.
- Compone escenas aleatorias: 1–3 barcos por imagen, posición y rumbo aleatorios, cámara cenital de altura variable, más un subconjunto de imágenes de solo océano (ejemplos negativos).
- Renderiza a 1280×1280 px y exporta imágenes PNG + etiquetas YOLO (
class x_center y_center width height, clase única0: embarcación).
- Python 3.10+
- BlenderProc 2.8.0 (instala Blender automáticamente)
pip install -r requirements.txtColoca los modelos .obj en assets/ (no se versionan por su tamaño; los modelos de prueba están en la carpeta compartida de Drive del proyecto) y ejecuta desde la raíz del repositorio:
blenderproc run src/generate_dataset.pyLa salida queda en data/dataset_train/images/ y data/dataset_train/labels/. Los parámetros (número de imágenes, resolución, barcos por escena, calado, etc.) se configuran al inicio de src/generate_dataset.py.
assets/ modelos 3D .obj (ignorados por git)
src/generate_dataset.py script principal de generación
data/dataset_train/ salida: images/ + labels/ (formato YOLO)
requirements.txt dependencias
- Los modelos deben estar normalizados a Y-up; el script consolida la rotación del importador de Blender, por lo que el resultado no depende de la versión del importador.
- Los modelos de prueba provienen de GrabCAD (uso educativo) y fueron convertidos a
.objcon Rhinoceros 3D. - Estado: prueba de concepto funcional. El dataset generado aún no ha sido evaluado sobre un modelo de visión artificial.
Synthetic dataset generator for training computer vision models (ship detection at sea), developed as part of a CubeSat project (CubeDesign 2025 — INPE). It renders top-down ocean scenes with 3D ship models and automatically produces YOLO annotations from instance segmentation maps.
- Loads every
.objinassets/(Y-up convention, deck facing +Y). - Normalizes scale, centers each model and places it at its waterline.
- Composes random scenes: 1–3 ships per image, random position and heading, top-down camera at variable height, plus a subset of ocean-only images (negative examples).
- Renders at 1280×1280 px and exports PNG images + YOLO labels (
class x_center y_center width height, single class0: ship).
- Python 3.10+
- BlenderProc 2.8.0 (installs Blender automatically)
pip install -r requirements.txtPlace the .obj models in assets/ (not versioned due to their size; the test models live in the project's shared Drive folder) and run from the repository root:
blenderproc run src/generate_dataset.pyOutput is written to data/dataset_train/images/ and data/dataset_train/labels/. Parameters (number of images, resolution, ships per scene, draft, etc.) are configured at the top of src/generate_dataset.py.
assets/ 3D .obj models (git-ignored)
src/generate_dataset.py main generation script
data/dataset_train/ output: images/ + labels/ (YOLO format)
requirements.txt dependencies
- Models must be normalized to Y-up; the script bakes the Blender importer's rotation, so results do not depend on the importer version.
- Test models come from GrabCAD (educational use) and were converted to
.objwith Rhinoceros 3D. - Status: working proof of concept. The generated dataset has not yet been evaluated on any computer vision model.