label-studio-sdk 1.0.14__tar.gz → 1.0.16__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of label-studio-sdk might be problematic. Click here for more details.
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/PKG-INFO +1 -1
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/pyproject.toml +1 -1
- label_studio_sdk-1.0.16/src/label_studio_sdk/converter/README.md +441 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/converter/converter.py +17 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/converter/keypoints.py +10 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/tokens/client_ext.py +51 -22
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/LICENSE +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/README.md +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/__init__.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/_extensions/__init__.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/_extensions/eval/categorical.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/_extensions/label_studio_tools/__init__.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/_extensions/label_studio_tools/core/__init__.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/_extensions/label_studio_tools/core/label_config.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/_extensions/label_studio_tools/core/utils/__init__.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/_extensions/label_studio_tools/core/utils/exceptions.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/_extensions/label_studio_tools/core/utils/io.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/_extensions/label_studio_tools/core/utils/json_schema.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/_extensions/label_studio_tools/core/utils/params.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/_extensions/label_studio_tools/etl/__init__.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/_extensions/label_studio_tools/etl/beam.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/_extensions/label_studio_tools/etl/example.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/_extensions/label_studio_tools/etl/registry.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/_extensions/label_studio_tools/postprocessing/__init__.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/_extensions/label_studio_tools/postprocessing/video.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/_extensions/pager_ext.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/_legacy/__init__.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/_legacy/client.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/_legacy/exceptions.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/_legacy/project.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/_legacy/schema/label_config_schema.json +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/_legacy/users.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/_legacy/utils.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/_legacy/workspaces.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/actions/__init__.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/actions/client.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/actions/types/__init__.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/actions/types/actions_create_request_filters.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/actions/types/actions_create_request_filters_conjunction.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/actions/types/actions_create_request_filters_items_item.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/actions/types/actions_create_request_filters_items_item_filter.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/actions/types/actions_create_request_filters_items_item_operator.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/actions/types/actions_create_request_filters_items_item_value.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/actions/types/actions_create_request_id.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/actions/types/actions_create_request_ordering_item.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/actions/types/actions_create_request_selected_items.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/actions/types/actions_create_request_selected_items_excluded.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/actions/types/actions_create_request_selected_items_included.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/annotations/__init__.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/annotations/client.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/annotations/types/__init__.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/annotations/types/annotations_create_bulk_request_selected_items.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/annotations/types/annotations_create_bulk_response_item.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/base_client.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/client.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/comments/__init__.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/comments/client.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/converter/__init__.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/converter/audio.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/converter/brush.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/converter/exports/__init__.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/converter/exports/brush_to_coco.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/converter/exports/csv.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/converter/exports/csv2.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/converter/exports/yolo.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/converter/funsd.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/converter/imports/__init__.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/converter/imports/coco.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/converter/imports/colors.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/converter/imports/label_config.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/converter/imports/pathtrack.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/converter/imports/yolo.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/converter/main.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/converter/utils.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/core/__init__.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/core/api_error.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/core/client_wrapper.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/core/datetime_utils.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/core/file.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/core/http_client.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/core/jsonable_encoder.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/core/pagination.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/core/pydantic_utilities.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/core/query_encoder.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/core/remove_none_from_dict.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/core/request_options.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/core/serialization.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/data_manager.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/environment.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/errors/__init__.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/errors/bad_request_error.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/errors/internal_server_error.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/errors/not_found_error.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/errors/unauthorized_error.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/export_storage/__init__.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/export_storage/azure/__init__.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/export_storage/azure/client.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/export_storage/azure/types/__init__.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/export_storage/azure/types/azure_create_response.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/export_storage/azure/types/azure_update_response.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/export_storage/client.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/export_storage/gcs/__init__.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/export_storage/gcs/client.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/export_storage/gcs/types/__init__.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/export_storage/gcs/types/gcs_create_response.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/export_storage/gcs/types/gcs_update_response.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/export_storage/local/__init__.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/export_storage/local/client.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/export_storage/local/types/__init__.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/export_storage/local/types/local_create_response.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/export_storage/local/types/local_update_response.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/export_storage/redis/__init__.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/export_storage/redis/client.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/export_storage/redis/types/__init__.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/export_storage/redis/types/redis_create_response.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/export_storage/redis/types/redis_update_response.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/export_storage/s3/__init__.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/export_storage/s3/client.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/export_storage/s3/types/__init__.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/export_storage/s3/types/s3create_response.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/export_storage/s3/types/s3update_response.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/export_storage/s3s/__init__.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/export_storage/s3s/client.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/export_storage/types/__init__.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/export_storage/types/export_storage_list_types_response_item.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/files/__init__.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/files/client.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/import_storage/__init__.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/import_storage/azure/__init__.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/import_storage/azure/client.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/import_storage/azure/types/__init__.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/import_storage/azure/types/azure_create_response.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/import_storage/azure/types/azure_update_response.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/import_storage/client.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/import_storage/gcs/__init__.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/import_storage/gcs/client.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/import_storage/gcs/types/__init__.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/import_storage/gcs/types/gcs_create_response.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/import_storage/gcs/types/gcs_update_response.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/import_storage/local/__init__.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/import_storage/local/client.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/import_storage/local/types/__init__.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/import_storage/local/types/local_create_response.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/import_storage/local/types/local_update_response.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/import_storage/redis/__init__.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/import_storage/redis/client.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/import_storage/redis/types/__init__.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/import_storage/redis/types/redis_create_response.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/import_storage/redis/types/redis_update_response.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/import_storage/s3/__init__.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/import_storage/s3/client.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/import_storage/s3/types/__init__.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/import_storage/s3/types/s3create_response.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/import_storage/s3/types/s3update_response.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/import_storage/s3s/__init__.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/import_storage/s3s/client.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/import_storage/types/__init__.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/import_storage/types/import_storage_list_types_response_item.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/jwt_settings/__init__.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/jwt_settings/client.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/label_interface/__init__.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/label_interface/base.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/label_interface/control_tags.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/label_interface/create.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/label_interface/data_examples.json +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/label_interface/interface.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/label_interface/label_tags.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/label_interface/object_tags.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/label_interface/objects.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/label_interface/region.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/ml/__init__.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/ml/client.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/ml/types/__init__.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/ml/types/ml_create_request_auth_method.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/ml/types/ml_create_response.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/ml/types/ml_create_response_auth_method.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/ml/types/ml_update_request_auth_method.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/ml/types/ml_update_response.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/ml/types/ml_update_response_auth_method.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/model_providers/__init__.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/model_providers/client.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/predictions/__init__.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/predictions/client.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/projects/__init__.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/projects/client.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/projects/client_ext.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/projects/exports/__init__.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/projects/exports/client.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/projects/exports/client_ext.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/projects/exports/types/__init__.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/projects/exports/types/exports_convert_response.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/projects/exports/types/exports_list_formats_response_item.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/projects/pauses/__init__.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/projects/pauses/client.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/projects/types/__init__.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/projects/types/projects_create_response.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/projects/types/projects_import_tasks_response.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/projects/types/projects_list_response.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/projects/types/projects_update_response.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/prompts/__init__.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/prompts/client.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/prompts/indicators/__init__.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/prompts/indicators/client.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/prompts/runs/__init__.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/prompts/runs/client.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/prompts/runs/types/__init__.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/prompts/runs/types/runs_list_request_project_subset.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/prompts/types/__init__.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/prompts/types/prompts_batch_failed_predictions_request_failed_predictions_item.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/prompts/types/prompts_batch_failed_predictions_response.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/prompts/types/prompts_batch_predictions_request_results_item.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/prompts/types/prompts_batch_predictions_response.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/prompts/versions/__init__.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/prompts/versions/client.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/py.typed +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/tasks/__init__.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/tasks/client.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/tasks/client_ext.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/tasks/types/__init__.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/tasks/types/tasks_list_request_fields.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/tasks/types/tasks_list_response.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/tokens/__init__.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/tokens/client.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/types/__init__.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/types/access_token_response.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/types/annotation.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/types/annotation_completed_by.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/types/annotation_filter_options.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/types/annotation_last_action.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/types/annotations_dm_field.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/types/annotations_dm_field_last_action.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/types/api_token_response.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/types/azure_blob_export_storage.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/types/azure_blob_export_storage_status.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/types/azure_blob_import_storage.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/types/azure_blob_import_storage_status.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/types/base_task.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/types/base_task_file_upload.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/types/base_task_updated_by.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/types/base_user.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/types/comment.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/types/comment_created_by.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/types/converted_format.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/types/converted_format_status.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/types/data_manager_task_serializer.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/types/data_manager_task_serializer_annotators_item.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/types/data_manager_task_serializer_drafts_item.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/types/data_manager_task_serializer_predictions_item.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/types/export.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/types/export_format.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/types/export_snapshot.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/types/export_snapshot_status.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/types/export_status.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/types/file_upload.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/types/filter.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/types/filter_group.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/types/gcs_export_storage.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/types/gcs_export_storage_status.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/types/gcs_import_storage.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/types/gcs_import_storage_status.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/types/inference_run.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/types/inference_run_cost_estimate.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/types/inference_run_created_by.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/types/inference_run_organization.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/types/inference_run_project_subset.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/types/inference_run_status.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/types/jwt_settings_response.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/types/key_indicator_value.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/types/key_indicators.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/types/key_indicators_item.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/types/key_indicators_item_additional_kpis_item.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/types/key_indicators_item_extra_kpis_item.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/types/local_files_export_storage.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/types/local_files_export_storage_status.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/types/local_files_import_storage.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/types/local_files_import_storage_status.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/types/ml_backend.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/types/ml_backend_auth_method.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/types/ml_backend_state.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/types/model_provider_connection.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/types/model_provider_connection_budget_reset_period.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/types/model_provider_connection_created_by.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/types/model_provider_connection_organization.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/types/model_provider_connection_provider.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/types/model_provider_connection_scope.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/types/pause.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/types/pause_paused_by.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/types/prediction.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/types/project.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/types/project_import.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/types/project_import_status.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/types/project_label_config.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/types/project_sampling.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/types/project_skip_queue.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/types/prompt.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/types/prompt_associated_projects_item.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/types/prompt_associated_projects_item_id.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/types/prompt_created_by.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/types/prompt_organization.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/types/prompt_version.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/types/prompt_version_created_by.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/types/prompt_version_organization.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/types/prompt_version_provider.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/types/redis_export_storage.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/types/redis_export_storage_status.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/types/redis_import_storage.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/types/redis_import_storage_status.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/types/refined_prompt_response.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/types/refined_prompt_response_refinement_status.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/types/rotate_token_response.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/types/s3export_storage.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/types/s3export_storage_status.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/types/s3import_storage.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/types/s3import_storage_status.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/types/s3s_export_storage.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/types/s3s_import_storage.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/types/s3s_import_storage_status.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/types/serialization_option.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/types/serialization_options.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/types/task.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/types/task_annotators_item.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/types/task_comment_authors_item.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/types/task_filter_options.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/types/user_simple.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/types/view.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/types/webhook.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/types/webhook_actions_item.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/types/webhook_serializer_for_update.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/types/webhook_serializer_for_update_actions_item.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/types/workspace.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/users/__init__.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/users/client.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/users/types/__init__.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/users/types/users_get_token_response.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/users/types/users_reset_token_response.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/version.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/versions/__init__.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/versions/client.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/versions/types/__init__.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/versions/types/versions_get_response.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/versions/types/versions_get_response_edition.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/views/__init__.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/views/client.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/views/types/__init__.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/views/types/views_create_request_data.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/views/types/views_create_request_data_filters.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/views/types/views_create_request_data_filters_conjunction.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/views/types/views_create_request_data_filters_items_item.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/views/types/views_create_request_data_filters_items_item_filter.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/views/types/views_create_request_data_filters_items_item_operator.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/views/types/views_create_request_data_filters_items_item_value.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/views/types/views_create_request_data_ordering_item.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/views/types/views_update_request_data.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/views/types/views_update_request_data_filters.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/views/types/views_update_request_data_filters_conjunction.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/views/types/views_update_request_data_filters_items_item.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/views/types/views_update_request_data_filters_items_item_filter.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/views/types/views_update_request_data_filters_items_item_operator.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/views/types/views_update_request_data_filters_items_item_value.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/views/types/views_update_request_data_ordering_item.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/webhooks/__init__.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/webhooks/client.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/webhooks/types/__init__.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/webhooks/types/webhooks_update_request_actions_item.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/workspaces/__init__.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/workspaces/client.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/workspaces/members/__init__.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/workspaces/members/client.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/workspaces/members/types/__init__.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/workspaces/members/types/members_create_response.py +0 -0
- {label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/workspaces/members/types/members_list_response_item.py +0 -0
|
@@ -0,0 +1,441 @@
|
|
|
1
|
+
# Note
|
|
2
|
+
|
|
3
|
+
The old repository `label-studio-converter` has been archived and merged into the Label Studio SDK at the current folder:
|
|
4
|
+
https://github.com/HumanSignal/label-studio-sdk/tree/master/src/label_studio_sdk/converter
|
|
5
|
+
|
|
6
|
+
# Label Studio Converter
|
|
7
|
+
|
|
8
|
+
[Website](https://labelstud.io/) • [Docs](https://labelstud.io/guide) • [Twitter](https://twitter.com/heartexlabs) • [Join Slack Community <img src="https://app.heartex.ai/docs/images/slack-mini.png" width="18px"/>](https://slack.labelstud.io)
|
|
9
|
+
|
|
10
|
+
## Table of Contents
|
|
11
|
+
|
|
12
|
+
- [Introduction](#introduction)
|
|
13
|
+
- [Examples](#examples)
|
|
14
|
+
- [JSON](#json)
|
|
15
|
+
- [CSV](#csv)
|
|
16
|
+
- [CoNLL 2003](#conll-2003)
|
|
17
|
+
- [COCO](#coco)
|
|
18
|
+
- [Pascal VOC XML](#pascal-voc-xml)
|
|
19
|
+
- [YOLO to Label Studio Converter](#yolo-to-label-studio-converter)
|
|
20
|
+
- [Usage](#usage)
|
|
21
|
+
- [Tutorial: Importing YOLO Pre-Annotated Images to Label Studio using Local Storage](#tutorial-importing-yolo-pre-annotated-images-to-label-studio-using-local-storage)
|
|
22
|
+
- [Contributing](#contributing)
|
|
23
|
+
- [License](#license)
|
|
24
|
+
|
|
25
|
+
## Introduction
|
|
26
|
+
|
|
27
|
+
Label Studio Format Converter helps you to encode labels into the format of your favorite machine learning library.
|
|
28
|
+
|
|
29
|
+
## Examples
|
|
30
|
+
|
|
31
|
+
#### JSON
|
|
32
|
+
**Running from the command line:**
|
|
33
|
+
|
|
34
|
+
```bash
|
|
35
|
+
pip install -U label-studio-converter
|
|
36
|
+
python label-studio-converter export -i exported_tasks.json -c examples/sentiment_analysis/config.xml -o output_dir -f CSV
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
**Running from python:**
|
|
40
|
+
```python
|
|
41
|
+
from label_studio_converter import Converter
|
|
42
|
+
|
|
43
|
+
c = Converter('examples/sentiment_analysis/config.xml')
|
|
44
|
+
c.convert_to_json('examples/sentiment_analysis/completions/', 'tmp/output.json')
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
Getting output file: `tmp/output.json`
|
|
48
|
+
```json
|
|
49
|
+
[
|
|
50
|
+
{
|
|
51
|
+
"reviewText": "Good case, Excellent value.",
|
|
52
|
+
"sentiment": "Positive"
|
|
53
|
+
},
|
|
54
|
+
{
|
|
55
|
+
"reviewText": "What a waste of money and time!",
|
|
56
|
+
"sentiment": "Negative"
|
|
57
|
+
},
|
|
58
|
+
{
|
|
59
|
+
"reviewText": "The goose neck needs a little coaxing",
|
|
60
|
+
"sentiment": "Neutral"
|
|
61
|
+
}
|
|
62
|
+
]
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
Use cases: any tasks
|
|
66
|
+
|
|
67
|
+
|
|
68
|
+
#### CSV
|
|
69
|
+
Running from the command line:
|
|
70
|
+
```bash
|
|
71
|
+
python label_studio_converter/cli.py --input examples/sentiment_analysis/completions/ --config examples/sentiment_analysis/config.xml --output output_dir --format CSV --csv-separator $'\t'
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
Running from python:
|
|
75
|
+
```python
|
|
76
|
+
from label_studio_converter import Converter
|
|
77
|
+
|
|
78
|
+
c = Converter('examples/sentiment_analysis/config.xml')
|
|
79
|
+
c.convert_to_csv('examples/sentiment_analysis/completions/', 'output_dir', sep='\t', header=True)
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
Getting output file `tmp/output.tsv`:
|
|
83
|
+
```tsv
|
|
84
|
+
reviewText sentiment
|
|
85
|
+
Good case, Excellent value. Positive
|
|
86
|
+
What a waste of money and time! Negative
|
|
87
|
+
The goose neck needs a little coaxing Neutral
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
Use cases: any tasks
|
|
91
|
+
|
|
92
|
+
#### CoNLL 2003
|
|
93
|
+
|
|
94
|
+
Running from the command line:
|
|
95
|
+
```bash
|
|
96
|
+
python label_studio_converter/cli.py --input examples/named_entity/completions/ --config examples/named_entity/config.xml --output tmp/output.conll --format CONLL2003
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
Running from python:
|
|
100
|
+
```python
|
|
101
|
+
from label_studio_converter import Converter
|
|
102
|
+
|
|
103
|
+
c = Converter('examples/named_entity/config.xml')
|
|
104
|
+
c.convert_to_conll2003('examples/named_entity/completions/', 'tmp/output.conll')
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
Getting output file `tmp/output.conll`
|
|
108
|
+
```text
|
|
109
|
+
-DOCSTART- -X- O
|
|
110
|
+
Showers -X- _ O
|
|
111
|
+
continued -X- _ O
|
|
112
|
+
throughout -X- _ O
|
|
113
|
+
the -X- _ O
|
|
114
|
+
week -X- _ O
|
|
115
|
+
in -X- _ O
|
|
116
|
+
the -X- _ O
|
|
117
|
+
Bahia -X- _ B-Location
|
|
118
|
+
cocoa -X- _ O
|
|
119
|
+
zone, -X- _ O
|
|
120
|
+
...
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
Use cases: text tagging
|
|
124
|
+
|
|
125
|
+
|
|
126
|
+
#### COCO
|
|
127
|
+
Running from the command line:
|
|
128
|
+
```bash
|
|
129
|
+
python label_studio_converter/cli.py --input examples/image_bbox/completions/ --config examples/image_bbox/config.xml --output tmp/output.json --format COCO --image-dir tmp/images
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
Running from python:
|
|
133
|
+
```python
|
|
134
|
+
from label_studio_converter import Converter
|
|
135
|
+
|
|
136
|
+
c = Converter('examples/image_bbox/config.xml')
|
|
137
|
+
c.convert_to_coco('examples/image_bbox/completions/', 'tmp/output.conll', output_image_dir='tmp/images')
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
Output images could be found in `tmp/images`
|
|
141
|
+
|
|
142
|
+
Getting output file `tmp/output.json`
|
|
143
|
+
```json
|
|
144
|
+
{
|
|
145
|
+
"images": [
|
|
146
|
+
{
|
|
147
|
+
"width": 800,
|
|
148
|
+
"height": 501,
|
|
149
|
+
"id": 0,
|
|
150
|
+
"file_name": "tmp/images/62a623a0d3cef27a51d3689865e7b08a"
|
|
151
|
+
}
|
|
152
|
+
],
|
|
153
|
+
"categories": [
|
|
154
|
+
{
|
|
155
|
+
"id": 0,
|
|
156
|
+
"name": "Planet"
|
|
157
|
+
},
|
|
158
|
+
{
|
|
159
|
+
"id": 1,
|
|
160
|
+
"name": "Moonwalker"
|
|
161
|
+
}
|
|
162
|
+
],
|
|
163
|
+
"annotations": [
|
|
164
|
+
{
|
|
165
|
+
"id": 0,
|
|
166
|
+
"image_id": 0,
|
|
167
|
+
"category_id": 0,
|
|
168
|
+
"segmentation": [],
|
|
169
|
+
"bbox": [
|
|
170
|
+
299,
|
|
171
|
+
6,
|
|
172
|
+
377,
|
|
173
|
+
260
|
|
174
|
+
],
|
|
175
|
+
"ignore": 0,
|
|
176
|
+
"iscrowd": 0,
|
|
177
|
+
"area": 98020
|
|
178
|
+
},
|
|
179
|
+
{
|
|
180
|
+
"id": 1,
|
|
181
|
+
"image_id": 0,
|
|
182
|
+
"category_id": 1,
|
|
183
|
+
"segmentation": [],
|
|
184
|
+
"bbox": [
|
|
185
|
+
288,
|
|
186
|
+
300,
|
|
187
|
+
132,
|
|
188
|
+
90
|
|
189
|
+
],
|
|
190
|
+
"ignore": 0,
|
|
191
|
+
"iscrowd": 0,
|
|
192
|
+
"area": 11880
|
|
193
|
+
}
|
|
194
|
+
],
|
|
195
|
+
"info": {
|
|
196
|
+
"year": 2019,
|
|
197
|
+
"version": "1.0",
|
|
198
|
+
"contributor": "Label Studio"
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
```
|
|
202
|
+
|
|
203
|
+
Use cases: image object detection
|
|
204
|
+
|
|
205
|
+
#### Pascal VOC XML
|
|
206
|
+
Running from the command line:
|
|
207
|
+
```bash
|
|
208
|
+
python label_studio_converter/cli.py --input examples/image_bbox/completions/ --config examples/image_bbox/config.xml --output tmp/voc-annotations --format VOC --image-dir tmp/images
|
|
209
|
+
```
|
|
210
|
+
|
|
211
|
+
Running from python:
|
|
212
|
+
```python
|
|
213
|
+
from label_studio_converter import Converter
|
|
214
|
+
|
|
215
|
+
c = Converter('examples/image_bbox/config.xml')
|
|
216
|
+
c.convert_to_voc('examples/image_bbox/completions/', 'tmp/output.conll', output_image_dir='tmp/images')
|
|
217
|
+
```
|
|
218
|
+
|
|
219
|
+
Output images can be found in `tmp/images`
|
|
220
|
+
|
|
221
|
+
Corresponding annotations could be found in `tmp/voc-annotations/*.xml`:
|
|
222
|
+
```xml
|
|
223
|
+
<?xml version="1.0" encoding="utf-8"?>
|
|
224
|
+
<annotation>
|
|
225
|
+
<folder>tmp/images</folder>
|
|
226
|
+
<filename>62a623a0d3cef27a51d3689865e7b08a</filename>
|
|
227
|
+
<source>
|
|
228
|
+
<database>MyDatabase</database>
|
|
229
|
+
<annotation>COCO2017</annotation>
|
|
230
|
+
<image>flickr</image>
|
|
231
|
+
<flickrid>NULL</flickrid>
|
|
232
|
+
</source>
|
|
233
|
+
<owner>
|
|
234
|
+
<flickrid>NULL</flickrid>
|
|
235
|
+
<name>Label Studio</name>
|
|
236
|
+
</owner>
|
|
237
|
+
<size>
|
|
238
|
+
<width>800</width>
|
|
239
|
+
<height>501</height>
|
|
240
|
+
<depth>3</depth>
|
|
241
|
+
</size>
|
|
242
|
+
<segmented>0</segmented>
|
|
243
|
+
<object>
|
|
244
|
+
<name>Planet</name>
|
|
245
|
+
<pose>Unspecified</pose>
|
|
246
|
+
<truncated>0</truncated>
|
|
247
|
+
<difficult>0</difficult>
|
|
248
|
+
<bndbox>
|
|
249
|
+
<xmin>299</xmin>
|
|
250
|
+
<ymin>6</ymin>
|
|
251
|
+
<xmax>676</xmax>
|
|
252
|
+
<ymax>266</ymax>
|
|
253
|
+
</bndbox>
|
|
254
|
+
</object>
|
|
255
|
+
<object>
|
|
256
|
+
<name>Moonwalker</name>
|
|
257
|
+
<pose>Unspecified</pose>
|
|
258
|
+
<truncated>0</truncated>
|
|
259
|
+
<difficult>0</difficult>
|
|
260
|
+
<bndbox>
|
|
261
|
+
<xmin>288</xmin>
|
|
262
|
+
<ymin>300</ymin>
|
|
263
|
+
<xmax>420</xmax>
|
|
264
|
+
<ymax>390</ymax>
|
|
265
|
+
</bndbox>
|
|
266
|
+
</object>
|
|
267
|
+
</annotation>
|
|
268
|
+
```
|
|
269
|
+
|
|
270
|
+
Use cases: image object detection
|
|
271
|
+
|
|
272
|
+
--------
|
|
273
|
+
|
|
274
|
+
# YOLO to Label Studio Converter
|
|
275
|
+
|
|
276
|
+
### YOLO directory structure
|
|
277
|
+
|
|
278
|
+
Check the structure of YOLO folder first, keep in mind that the root is `/yolo/datasets/one`.
|
|
279
|
+
|
|
280
|
+
```
|
|
281
|
+
/yolo/datasets/one
|
|
282
|
+
images
|
|
283
|
+
- 1.jpg
|
|
284
|
+
- 2.jpg
|
|
285
|
+
- ...
|
|
286
|
+
labels
|
|
287
|
+
- 1.txt
|
|
288
|
+
- 2.txt
|
|
289
|
+
|
|
290
|
+
classes.txt
|
|
291
|
+
```
|
|
292
|
+
|
|
293
|
+
*classes.txt example*
|
|
294
|
+
|
|
295
|
+
```
|
|
296
|
+
Airplane
|
|
297
|
+
Car
|
|
298
|
+
```
|
|
299
|
+
|
|
300
|
+
### Usage
|
|
301
|
+
|
|
302
|
+
```
|
|
303
|
+
label-studio-converter import yolo -i /yolo/datasets/one -o ls-tasks.json --image-root-url "/data/local-files/?d=one/images"
|
|
304
|
+
```
|
|
305
|
+
Where the URL path from `?d=` is relative to the path you set in `LABEL_STUDIO_LOCAL_FILES_DOCUMENT_ROOT`.
|
|
306
|
+
|
|
307
|
+
**Note for Local Storages**
|
|
308
|
+
* It's very important to set `LABEL_STUDIO_LOCAL_FILES_DOCUMENT_ROOT=/yolo/datasets` (**not** to `/yolo/datasets/one`, but **`/yolo/datasets`**) for Label Studio to run.
|
|
309
|
+
* [Add a new Local Storage](https://labelstud.io/guide/storage#Local-storage) in the project settings and set **Absolute local path** to `/yolo/datasets/one/images` (or `c:\yolo\datasets\one\images` for Windows).
|
|
310
|
+
|
|
311
|
+
**Note for Cloud Storages**
|
|
312
|
+
* Use `--image-root-url` to make correct prefixes for task URLs, e.g. `--image-root-url s3://my-bucket/yolo/datasets/one`.
|
|
313
|
+
* [Add a new Cloud Storage](https://labelstud.io/guide/storage) in the project settings with the corresponding bucket and prefix.
|
|
314
|
+
|
|
315
|
+
**Help command**
|
|
316
|
+
|
|
317
|
+
```
|
|
318
|
+
label-studio-converter import yolo -h
|
|
319
|
+
|
|
320
|
+
usage: label-studio-converter import yolo [-h] -i INPUT [-o OUTPUT]
|
|
321
|
+
[--to-name TO_NAME]
|
|
322
|
+
[--from-name FROM_NAME]
|
|
323
|
+
[--out-type OUT_TYPE]
|
|
324
|
+
[--image-root-url IMAGE_ROOT_URL]
|
|
325
|
+
[--image-ext IMAGE_EXT]
|
|
326
|
+
|
|
327
|
+
optional arguments:
|
|
328
|
+
-h, --help show this help message and exit
|
|
329
|
+
-i INPUT, --input INPUT
|
|
330
|
+
directory with YOLO where images, labels, notes.json
|
|
331
|
+
are located
|
|
332
|
+
-o OUTPUT, --output OUTPUT
|
|
333
|
+
output file with Label Studio JSON tasks
|
|
334
|
+
--to-name TO_NAME object name from Label Studio labeling config
|
|
335
|
+
--from-name FROM_NAME
|
|
336
|
+
control tag name from Label Studio labeling config
|
|
337
|
+
--out-type OUT_TYPE annotation type - "annotations" or "predictions"
|
|
338
|
+
--image-root-url IMAGE_ROOT_URL
|
|
339
|
+
root URL path where images will be hosted, e.g.:
|
|
340
|
+
http://example.com/images or s3://my-bucket
|
|
341
|
+
--image-ext IMAGE_EXT
|
|
342
|
+
image extension to search: .jpg, .png
|
|
343
|
+
```
|
|
344
|
+
|
|
345
|
+
|
|
346
|
+
## Tutorial: Importing YOLO Pre-Annotated Images to Label Studio using Local Storage
|
|
347
|
+
|
|
348
|
+
This tutorial will guide you through the process of importing a folder with YOLO annotations into Label Studio for further annotation.
|
|
349
|
+
We'll cover setting up your environment, converting YOLO annotations to Label Studio's format, and importing them into your project.
|
|
350
|
+
|
|
351
|
+
|
|
352
|
+
### Prerequisites
|
|
353
|
+
- Label Studio installed locally
|
|
354
|
+
- YOLO annotated images and corresponding .txt label files in the directory `/yolo/datasets/one`.
|
|
355
|
+
- label-studio-converter installed (available via `pip install label-studio-converter`)
|
|
356
|
+
|
|
357
|
+
### Step 1: Set Up Your Environment and Run Label Studio
|
|
358
|
+
Before starting Label Studio, set the following environment variables to enable Local Storage file serving:
|
|
359
|
+
|
|
360
|
+
Unix systems:
|
|
361
|
+
```
|
|
362
|
+
export LABEL_STUDIO_LOCAL_FILES_SERVING_ENABLED=true
|
|
363
|
+
export LABEL_STUDIO_LOCAL_FILES_DOCUMENT_ROOT=/yolo/datasets
|
|
364
|
+
label-studio
|
|
365
|
+
```
|
|
366
|
+
|
|
367
|
+
Windows:
|
|
368
|
+
```
|
|
369
|
+
set LABEL_STUDIO_LOCAL_FILES_SERVING_ENABLED=true
|
|
370
|
+
set LABEL_STUDIO_LOCAL_FILES_DOCUMENT_ROOT=C:\\yolo\\datasets
|
|
371
|
+
label-studio
|
|
372
|
+
```
|
|
373
|
+
|
|
374
|
+
Replace `/yolo/datasets` with the actual path to your YOLO datasets directory.
|
|
375
|
+
|
|
376
|
+
### Step 2: Setup Local Storage
|
|
377
|
+
1. Create a new project.
|
|
378
|
+
2. Go to the project settings and select **Cloud Storage**.
|
|
379
|
+
3. Click **Add Source Storage** and select **Local files** from the **Storage Type** options.
|
|
380
|
+
3. Set the **Absolute local path** to `/yolo/datasets/one/images` or `c:\yolo\datasets\one\images` on Windows.
|
|
381
|
+
4. Click `Add storage`.
|
|
382
|
+
|
|
383
|
+
Check more details about Local Storages [in the documentation](https://labelstud.io/guide/storage.html#Local-storage).
|
|
384
|
+
|
|
385
|
+
### Step 3: Verify Image Access
|
|
386
|
+
Before importing the converted annotations from YOLO, verify that you can access an image from your Local storage via Label Studio. Open a new browser tab and enter the following URL:
|
|
387
|
+
|
|
388
|
+
```
|
|
389
|
+
http://localhost:8080/data/local-files/?d=one/images/<your_image>.jpg
|
|
390
|
+
```
|
|
391
|
+
|
|
392
|
+
Replace `one/images/<your_image>.jpg` with the path to one of your images. The image should display **in the new tab of the browser**.
|
|
393
|
+
If you can't open an image, the Local Storage configuration is incorrect. The most likely reason is that you made a mistake when specifying your `Path` in Local Storage settings or in `LABEL_STUDIO_LOCAL_FILES_DOCUMENT_ROOT`.
|
|
394
|
+
|
|
395
|
+
**Note:** The URL path from `?d=` should be relative to `LABEL_STUDIO_LOCAL_FILES_DOCUMENT_ROOT=/yolo/datasets`,
|
|
396
|
+
it means that the real path will be `/yolo/datasets/one/images/<your_image>.jpg` and this image should exist on your hard drive.
|
|
397
|
+
|
|
398
|
+
### Step 4: Convert YOLO Annotations
|
|
399
|
+
Use the label-studio-converter to convert your YOLO annotations to a format that Label Studio can understand:
|
|
400
|
+
|
|
401
|
+
```
|
|
402
|
+
label-studio-converter import yolo -i /yolo/datasets/one -o output.json --image-root-url "/data/local-files/?d=one/images"
|
|
403
|
+
```
|
|
404
|
+
|
|
405
|
+
### Step 5: Import Converted Annotations
|
|
406
|
+
Now import the `output.json` file into Label Studio:
|
|
407
|
+
1. Go to your Label Studio project.
|
|
408
|
+
2. From the Data Manager, click **Import**.
|
|
409
|
+
3. Select the `output.json` file and import it.
|
|
410
|
+
|
|
411
|
+
### Step 6: Verify Annotations
|
|
412
|
+
After importing, you should see your images with the pre-annotated bounding boxes in Label Studio. Verify that the annotations are correct and make any necessary adjustments.
|
|
413
|
+
|
|
414
|
+
### Troubleshooting
|
|
415
|
+
If you encounter issues with paths or image access, ensure that:
|
|
416
|
+
- The LABEL_STUDIO_LOCAL_FILES_DOCUMENT_ROOT is set correctly.
|
|
417
|
+
- The `--image-root-url` in the conversion command matches the relative path:
|
|
418
|
+
```
|
|
419
|
+
`Absolute local path from Local Storage Settings` - `LABEL_STUDIO_LOCAL_FILES_DOCUMENT_ROOT` = `path for --image_root_url`
|
|
420
|
+
```
|
|
421
|
+
e.g.:
|
|
422
|
+
```
|
|
423
|
+
/yolo/datasets/one/images - /yolo/datasets/ = one/images
|
|
424
|
+
```
|
|
425
|
+
- The Local Storage in Label Studio is set up correctly with the Absolute local path to your images (`/yolo/datasets/one/images`)
|
|
426
|
+
- For more details, refer to the documentation on [importing pre-annotated data](https://labelstud.io/guide/predictions.html) and [setting up Cloud Storages](https://labelstud.io/guide/storage).
|
|
427
|
+
|
|
428
|
+
------------
|
|
429
|
+
|
|
430
|
+
# Contributing
|
|
431
|
+
|
|
432
|
+
We would love to get your help for creating converters to other models. Please feel free to create pull requests.
|
|
433
|
+
|
|
434
|
+
- [Contributing Guideline](https://github.com/heartexlabs/label-studio/blob/develop/CONTRIBUTING.md)
|
|
435
|
+
- [Code Of Conduct](https://github.com/heartexlabs/label-studio/blob/develop/CODE_OF_CONDUCT.md)
|
|
436
|
+
|
|
437
|
+
# License
|
|
438
|
+
|
|
439
|
+
This software is licensed under the [Apache 2.0 LICENSE](/LICENSE) © [Heartex](https://www.heartex.com/). 2020
|
|
440
|
+
|
|
441
|
+
<img src="https://github.com/heartexlabs/label-studio/blob/master/images/opossum_looking.png?raw=true" title="Hey everyone!" height="140" width="140" />
|
{label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/converter/converter.py
RENAMED
|
@@ -363,6 +363,23 @@ class Converter(object):
|
|
|
363
363
|
input_tag_types.add(input_tag["type"])
|
|
364
364
|
|
|
365
365
|
all_formats = [f.name for f in Format]
|
|
366
|
+
|
|
367
|
+
# Check if KeyPointLabels exists without RectangleLabels
|
|
368
|
+
has_keypoint_labels = "KeyPointLabels" in output_tag_types
|
|
369
|
+
has_rectangle_labels = "RectangleLabels" in output_tag_types
|
|
370
|
+
|
|
371
|
+
# If config has KeyPointLabels but no RectangleLabels, exclude COCO and YOLO formats
|
|
372
|
+
# RectangleLabels are required for COCO and YOLO formats for category mapping
|
|
373
|
+
if has_keypoint_labels and not has_rectangle_labels:
|
|
374
|
+
if Format.COCO.name in all_formats:
|
|
375
|
+
all_formats.remove(Format.COCO.name)
|
|
376
|
+
if Format.COCO_WITH_IMAGES.name in all_formats:
|
|
377
|
+
all_formats.remove(Format.COCO_WITH_IMAGES.name)
|
|
378
|
+
if Format.YOLO.name in all_formats:
|
|
379
|
+
all_formats.remove(Format.YOLO.name)
|
|
380
|
+
if Format.YOLO_WITH_IMAGES.name in all_formats:
|
|
381
|
+
all_formats.remove(Format.YOLO_WITH_IMAGES.name)
|
|
382
|
+
|
|
366
383
|
if not ("Text" in input_tag_types and "Labels" in output_tag_types):
|
|
367
384
|
all_formats.remove(Format.CONLL2003.name)
|
|
368
385
|
if is_mig or not (
|
{label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/converter/keypoints.py
RENAMED
|
@@ -89,6 +89,16 @@ def get_bbox_coco(keypoints, kp_order):
|
|
|
89
89
|
|
|
90
90
|
|
|
91
91
|
def process_keypoints_for_coco(keypoint_labels, kp_order, annotation_id, image_id, category_name_to_id):
|
|
92
|
+
if not kp_order:
|
|
93
|
+
raise ValueError(
|
|
94
|
+
"No keypoint order found. Please ensure that KeyPointLabels in your label config "
|
|
95
|
+
"have 'model_index' attributes defined. For example:\n"
|
|
96
|
+
"<KeyPointLabels name=\"keypoints\" toName=\"image\">\n"
|
|
97
|
+
" <Label value=\"eye\" model_index=\"0\"/>\n"
|
|
98
|
+
" <Label value=\"nose\" model_index=\"1\"/>\n"
|
|
99
|
+
"</KeyPointLabels>"
|
|
100
|
+
)
|
|
101
|
+
|
|
92
102
|
keypoints = [0] * (len(kp_order) * 3)
|
|
93
103
|
|
|
94
104
|
for kp in keypoint_labels:
|
{label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/tokens/client_ext.py
RENAMED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import threading
|
|
2
2
|
import typing
|
|
3
3
|
from datetime import datetime, timezone
|
|
4
|
-
import
|
|
4
|
+
import ssl
|
|
5
5
|
|
|
6
6
|
import httpx
|
|
7
7
|
import jwt
|
|
@@ -78,34 +78,63 @@ class TokensClientExt:
|
|
|
78
78
|
|
|
79
79
|
return self._access_token
|
|
80
80
|
|
|
81
|
+
def _get_client_params(self, existing_client: httpx.AsyncClient) -> dict:
|
|
82
|
+
"""Extract parameters from an existing client to create a new one.
|
|
83
|
+
|
|
84
|
+
Args:
|
|
85
|
+
existing_client: The existing client to extract parameters from.
|
|
86
|
+
|
|
87
|
+
Returns:
|
|
88
|
+
dict: Parameters for creating a new client.
|
|
89
|
+
"""
|
|
90
|
+
return {
|
|
91
|
+
'auth': existing_client.auth,
|
|
92
|
+
'params': existing_client.params,
|
|
93
|
+
'headers': existing_client.headers,
|
|
94
|
+
'cookies': existing_client.cookies,
|
|
95
|
+
'timeout': existing_client.timeout,
|
|
96
|
+
'follow_redirects': existing_client.follow_redirects,
|
|
97
|
+
'max_redirects': existing_client.max_redirects,
|
|
98
|
+
'event_hooks': existing_client.event_hooks,
|
|
99
|
+
'base_url': existing_client.base_url,
|
|
100
|
+
'trust_env': existing_client.trust_env,
|
|
101
|
+
'default_encoding': existing_client._default_encoding,
|
|
102
|
+
'verify': existing_client._transport._pool._ssl_context.verify_mode != ssl.CERT_NONE,
|
|
103
|
+
'http1': existing_client._transport._pool._http1,
|
|
104
|
+
'http2': existing_client._transport._pool._http2,
|
|
105
|
+
'limits': httpx.Limits(
|
|
106
|
+
max_connections=existing_client._transport._pool._max_connections,
|
|
107
|
+
max_keepalive_connections=existing_client._transport._pool._max_keepalive_connections,
|
|
108
|
+
keepalive_expiry=existing_client._transport._pool._keepalive_expiry
|
|
109
|
+
)
|
|
110
|
+
}
|
|
111
|
+
|
|
81
112
|
def refresh(self) -> AccessTokenResponse:
|
|
82
113
|
"""Refresh the access token and return the token response."""
|
|
83
|
-
# We don't do this often, just use a separate sync httpx client for simplicity here
|
|
84
|
-
# (avoids complicated state management and sync vs async handling)
|
|
85
|
-
# Create a new client with the same parameters as the existing one
|
|
86
114
|
existing_client = self._client_wrapper.httpx_client.httpx_client
|
|
87
115
|
|
|
88
|
-
#
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
if param_name != 'self': # Skip 'self' parameter
|
|
93
|
-
try:
|
|
94
|
-
value = getattr(existing_client, param_name, None)
|
|
95
|
-
if value is not None:
|
|
96
|
-
client_params[param_name] = value
|
|
97
|
-
except AttributeError:
|
|
98
|
-
continue
|
|
99
|
-
|
|
100
|
-
with httpx.Client(**client_params) as sync_client:
|
|
101
|
-
response = sync_client.request(
|
|
116
|
+
# For sync client, use it directly
|
|
117
|
+
if isinstance(existing_client, httpx.Client):
|
|
118
|
+
print(f"\nverify:{existing_client._transport._pool._ssl_context.verify_mode != ssl.CERT_NONE}")
|
|
119
|
+
response = existing_client.request(
|
|
102
120
|
method="POST",
|
|
103
121
|
url=f"{self._base_url}/api/token/refresh/",
|
|
104
122
|
json={"refresh": self._api_key},
|
|
105
123
|
headers={"Content-Type": "application/json"},
|
|
106
124
|
)
|
|
125
|
+
else:
|
|
126
|
+
# If an async client was used, get all parameters from the client to init a new sync client
|
|
127
|
+
client_params = self._get_client_params(existing_client)
|
|
128
|
+
|
|
129
|
+
with httpx.Client(**client_params) as sync_client:
|
|
130
|
+
response = sync_client.request(
|
|
131
|
+
method="POST",
|
|
132
|
+
url=f"{self._base_url}/api/token/refresh/",
|
|
133
|
+
json={"refresh": self._api_key},
|
|
134
|
+
headers={"Content-Type": "application/json"},
|
|
135
|
+
)
|
|
107
136
|
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
137
|
+
if response.status_code == 200:
|
|
138
|
+
return AccessTokenResponse.parse_obj(response.json())
|
|
139
|
+
else:
|
|
140
|
+
raise ApiError(status_code=response.status_code, body=response.json())
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/_extensions/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/_extensions/pager_ext.py
RENAMED
|
File without changes
|
{label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/_legacy/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
{label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/_legacy/exceptions.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/_legacy/workspaces.py
RENAMED
|
File without changes
|
{label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/actions/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
{label_studio_sdk-1.0.14 → label_studio_sdk-1.0.16}/src/label_studio_sdk/actions/types/__init__.py
RENAMED
|
File without changes
|