Loading 3D model… large boards can take a moment.
The goal of this project is to extract component placement data from the KiCad project files and use them to create YOLO training datasets.
El proyecto ahora incluye una aplicación de escritorio en app.py construida con PySide6 para:
.kicad_pcbsubprocesscomponents.csv, annotations.txt y classes.txtPNG, JPG) y vectoriales (SVG)python -m pip install -r requirements.txt
python app.py
El código compartido del proyecto vive intencionadamente en el directorio scr/, que es el nombre histórico mantenido por compatibilidad con la estructura actual del repositorio. Los nuevos módulos compartidos también deben añadirse ahí mientras se conserve esta organización.
app.py: interfaz PySide6scr/kicad_parser.py: parsing de .kicad_pcb, Edge.Cuts y geometría comúnscr/kicad_extract.py: extracción, conversión YOLO, validación y guardadoscr/kicad_repair.py: reparación de bounding boxes a partir de padsscr/pcb_viewer_model.py: modelo visual de PCB, capas, footprints y warningsscr/pcb_viewer_widget.py: visor PCB basado en QGraphicsScene / QGraphicsViewscr/pcb_export.py: diálogos y exportación raster/vectorial desde la escenaLa pestaña PCB Viewer añade:
Zoom to Fit y Reset ViewReference, Value, Side, bbox_source y bbox_okDesde Archivo -> Exportar se puede exportar:
PNG o JPG con tamaño fijo o px/mmSVGLa exportación usa el mismo sistema geométrico físico de la PCB que se utiliza para las coordenadas YOLO.
This script extracts component information from KiCad PCB files (.kicad_pcb format).
What it does:
scr/input/ folderReference and Valuecomponents.csv file with the extracted dataUsage:
cd scr
python getComponents.py
Output:
The script creates scr/input/components.csv containing:
name: Component footprint namereference: Component referencevalue: Component valuecenter_x, center_y: Component center coordinates (mm)bbox_center_x, bbox_center_y: Bounding box center coordinates (mm)width, height: Component dimensions (mm)bbox_source: courtyard or padsExample output:
name,center_x,center_y,bbox_center_x,bbox_center_y,width,height
Crystal:Crystal_HC49-4H_Vertical,135.5741,105.5116,133.1241,105.5116,12.1,5.6
Package_DFN_QFN:VQFN-32-1EP_5x5mm_P0.5mm_EP3.1x3.1mm,134.1501,97.0026,134.1501,97.0026,6.26,6.26
...
This script converts the component coordinates from the CSV format to YOLO annotation format.
What it does:
components.csv generated by getComponents.pyUsage:
cd scr
python csv2yolo.py
Optional arguments:
python csv2yolo.py --csv <path_to_csv> --pcb <path_to_pcb> --output <output_file> --classes <classes_file>
Output:
The script creates two files in scr/input/:
annotations.txt: YOLO format annotations (one line per component)
class_id center_x center_y width heightclasses.txt: Mapping of class IDs to component namesWhere are the results saved? / ¿Dónde se guardan los resultados?
scr/input/annotations.txtscr/input/classes.txtExample YOLO annotation:
10 0.275780 0.509524 0.176436 0.104987 # Crystal:Crystal_HC49-4H_Vertical
19 0.290741 0.350000 0.091280 0.117360 # Package_DFN_QFN:VQFN-32-1EP_5x5mm_P0.5mm_EP3.1x3.1mm
How it works:
To extract component data from a KiCad PCB and convert it to YOLO format:
cd scr
# Step 1: Extract components from KiCad PCB file
python getComponents.py
# Output: scr/input/components.csv
# Step 2: Convert to YOLO format
python csv2yolo.py
# Output: scr/input/annotations.txt and scr/input/classes.txt
The complete workflow produces:
No comments yet. Be the first to ask about this board.