importcv2importnumpyasnpfromenumimportIntEnumfromacmenra_cvimportStyle,Stroke,Fillfromacmenra_dsimportConfigfromacmenra_ds.dataimportDataset# 1. Определяем категории (IntEnum критически важен для маппинга class_id)classIndustrialClass(IntEnum):inclusion=0scratch=1crack=2# 2. Инициализацияconfig=Config.from_yaml(yaml_path="/path/to/your/dataset/data.yaml")dataset=Dataset(config=config,category=IndustrialClass)# 3. Настройка стиля отрисовкиstyle=Style(palette=np.random.randint(0,255,(80,3)).tolist(),stroke=Stroke(thickness=2,alpha=0.8),fill=Fill(alpha=0.2),show=True,)# 4. Визуализация первых 5 изображений из тренировочного сплитаfori,sampleinenumerate(dataset.train):ifi>=5:break# dataset.visualize автоматически парсит лейблы и рисует Box/Polygon/Obbdrawn_frame=dataset.visualize(sample=sample,style=style)cv2.imshow("Acmenra Dataset Sample",drawn_frame)ifcv2.waitKey(1000)&0xFF==ord("q"):breakcv2.destroyAllWindows()
Normalize переводит uint8 [0, 255] в float32 [0.0, 1.0]. Ставьте его последним шагом только в training-loop. Не кладите в пайплайн визуализации и не пишите float как JPEG.
Геометрия не отстаёт от пикселей
HorizontalFlip / VerticalFlip зеркалят Box, Polygon и OBB через map_instance. Resize пиксели меняет, нормализованные координаты [0, 1] оставляет как есть. Фотометрия (Brightness, Blur, Noise, …) список лейблов не трогает.
Полный список шагов и контракт p — на странице Аугментация.