HumanSignal / label-studio

Label Studio is a multi-type data labeling and annotation tool with standardized output format
https://labelstud.io
Apache License 2.0
17.57k stars 2.18k forks source link

'ValueError: Unknown label type' while exporting polygon annotations to YOLO #3325

Closed xumix closed 1 year ago

xumix commented 1 year ago

Describe the bug Started getting this error when added polygon selection tool, rectangles alone worked ok. I've got this error while exporting to YOLO format(export to Pascal VOC & COCO works fine):

[2022-11-29 14:08:35,442] [core.utils.common::custom_exception_handler::77] [ERROR] ac9a5f6f-8d92-473f-b6ed-205c995e4471 Unknown label type {'points': [[93.0013458950202, 88.02153432032301], [96.63526244952894, 88.2907133243607], [99.86541049798116, 39.8384925975774], [99.86541049798116, 21.5343203230148], [96.76985195154778, 21.399730820995963]], 'polygonlabels': ['column'], 'type': 'PolygonLabels', 'original_width': 640, 'original_height': 640}
Traceback (most recent call last):
  File "C:\Python\Python310\lib\site-packages\rest_framework\views.py", line 506, in dispatch
    response = handler(request, *args, **kwargs)
  File "C:\Python\Python310\lib\site-packages\django\utils\decorators.py", line 43, in _wrapper
    return bound_method(*args, **kwargs)
  File "C:\Python\Python310\lib\site-packages\label_studio\data_export\api.py", line 183, in get
    export_stream, content_type, filename = DataExport.generate_export_file(
  File "C:\Python\Python310\lib\site-packages\label_studio\data_export\models.py", line 161, in generate_export_file
    converter.convert(input_json, tmp_dir, output_format, is_dir=False)
  File "c:\ml\label-studio-converter\label_studio_converter\converter.py", line 176, in convert
    self.convert_to_yolo(input_data, output_data, output_image_dir=image_dir,
  File "c:\ml\label-studio-converter\label_studio_converter\converter.py", line 679, in convert_to_yolo
    raise ValueError(f"Unknown label type {label}")
ValueError: Unknown label type {'points': [[93.0013458950202, 88.02153432032301], [96.63526244952894, 88.2907133243607], [99.86541049798116, 39.8384925975774], [99.86541049798116, 21.5343203230148], [96.76985195154778, 21.399730820995963]], 'polygonlabels': ['column'], 'type': 'PolygonLabels', 'original_width': 640, 'original_height': 640}
[2022-11-29 14:08:35,484] [django.request::log_response::224] [ERROR] Internal Server Error: /api/projects/2/export

To Reproduce Steps to reproduce the behavior:

  1. In project settings add this labeling config:
    <View style="display:flex;align-items:start;gap:8px;flex-direction:column-reverse">
    <View>    
      <Header value="Квадраты"/>
        <RectangleLabels name="label_rectangles" toName="image" showInline="true">
            <Label value="column" background="rgba(0, 255, 0, 1)"/>
            <Label value="section" background="#9eb1ff"/>
            <Label value="door" background="#c6d30d"/>
            <Label value="broken-section" background="#ff6bab"/>
            <Label value="broken-column" background="#7600ad"/>
            <Label value="fence" background="#8bc8ce"/>
            <Label value="broken-fence" background="#D4380D"/>
        </RectangleLabels>
    </View>    
    <Image name="image" value="$image" zoom="true" zoomControl="true" rotateControl="true"/>
    </View>
  2. Label some images
  3. Change config to:

    <View style="display:flex;align-items:start;gap:8px;flex-direction:column-reverse">
    <View>    
      <Header value="Квадраты"/>
        <RectangleLabels name="label_rectangles" toName="image" showInline="true">
            <Label value="column" background="rgba(0, 255, 0, 1)"/>
            <Label value="section" background="#9eb1ff"/>
            <Label value="door" background="#c6d30d"/>
            <Label value="broken-section" background="#ff6bab"/>
            <Label value="broken-column" background="#7600ad"/>
            <Label value="fence" background="#8bc8ce"/>
            <Label value="broken-fence" background="#D4380D"/>
        </RectangleLabels>
    </View>    
    
    <PolygonLabels name="label_polys" toName="image" showInline="true">
        <Label value="column" background="rgba(0, 255, 0, 1)"/>
        <Label value="section" background="#9eb1ff"/>
        <Label value="door" background="#c6d30d"/>
        <Label value="broken-section" background="#ff6bab"/>
        <Label value="broken-column" background="#7600ad"/>
        <Label value="fence" background="#8bc8ce"/>
        <Label value="broken-fence" background="#D4380D"/>
    </PolygonLabels>
    <Image name="image" value="$image" zoom="true" zoomControl="true" rotateControl="true"/>
    </View>
  4. Label some images with polygons and rectangles
  5. Try export to YOLO format
  6. Get the error above.

Expected behavior Normal export.

Environment (please complete the following information):

xumix commented 1 year ago

Managed to fix the error with this

                    if "rectanglelabels" in label or 'labels' in label:
                        x, y, w, h = self.rotated_rectangle(label)
                        annotations.append([category_id, (x + w / 2) / 100, (y + h / 2) / 100, w / 100, h / 100])
                    elif "polygonlabels" in label:
                        points_abs = [(x / 100, y / 100) for x, y in label["points"]]
                        x, y = zip(*points_abs)

                        annotations.append([category_id] + [coord for point in points_abs for coord in point])
                    else:
                        raise ValueError(f"Unknown label type {label}")
makseq commented 1 year ago

Fixed in PR: https://github.com/heartexlabs/label-studio-converter/pull/169