Skip to content

Commit 60471e4

Browse files
authored
Merge branch 'main' into add-example
2 parents e03a55c + 6222e1f commit 60471e4

File tree

7 files changed

+772
-10
lines changed

7 files changed

+772
-10
lines changed

.github/workflows/test.yml

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
name: SDK Test
2+
3+
on:
4+
push:
5+
branches:
6+
- main
7+
pull_request:
8+
branches:
9+
- main
10+
11+
jobs:
12+
sdk-test:
13+
runs-on: ubuntu-latest
14+
15+
steps:
16+
- name: Checkout
17+
uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4
18+
19+
- name: Setup Python
20+
uses: actions/setup-python@39cd14951b08e74b54015e9e001cdefcf80e669f # v5
21+
with:
22+
cache: pip
23+
python-version: "3.10.11"
24+
25+
- name: Install dependencies
26+
run: |
27+
pip install -r requirements.txt
28+
29+
- name: Install Python tools
30+
run: |
31+
pip install black==22.10.0 flake8==5.0.4 isort==5.11.5
32+
33+
- name: Run black
34+
run: black --check .
35+
36+
- name: Run flake8
37+
run: flake8 .
38+
39+
- name: Run isort
40+
run: isort --check .

README.md

Lines changed: 163 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
- [Task](#task)
99
- [Image](#image)
1010
- [Image Classification](#image-classification)
11+
- [Multi Image Classification](#multi-image-classification)
1112
- [Sequential Image](#sequential-image)
1213
- [Video](#video)
1314
- [Video Classification](#video-classification)
@@ -32,6 +33,7 @@
3233
- [YOLO To FastLabel](#yolo-to-fastlabel)
3334
- [Pascal VOC To FastLabel](#pascal-voc-to-fastlabel)
3435
- [labelme To FastLabel](#labelme-to-fastlabel)
36+
- [Mask To FastLabel Segmentation Points](#mask-to-fastlabel-segmentation-points)
3537
- [Model](#model)
3638
- [API Docs](#api-docs)
3739

@@ -558,6 +560,128 @@ Example of a single image classification task object
558560
}
559561
```
560562

563+
### Multi Image Classification
564+
565+
Supported following project types:
566+
567+
- Multi Image - Classification
568+
569+
#### Create Task
570+
571+
Create a new task.
572+
573+
```python
574+
task = client.create_multi_image_classification_task(
575+
project="YOUR_PROJECT_SLUG",
576+
name="sample",
577+
folder_path="./sample",
578+
priority=10, # (optional) none: 0, low: 10, medium: 20, high: 30
579+
attributes=[
580+
{
581+
"type": "text",
582+
"key": "attribute-key",
583+
"value": "attribute-value"
584+
}
585+
]
586+
)
587+
```
588+
589+
##### Limitation
590+
591+
- You can upload up to a size of 20 MB.
592+
- You can upload up to a total size of 2 GB.
593+
- You can upload up to 6 files in total.
594+
595+
#### Find Task
596+
597+
Find a single task.
598+
599+
```python
600+
task = client.find_multi_image_classification_task(task_id="YOUR_TASK_ID")
601+
```
602+
603+
Find a single task by name.
604+
605+
```python
606+
tasks = client.find_multi_image_classification_task_by_name(project="YOUR_PROJECT_SLUG", task_name="YOUR_TASK_NAME")
607+
```
608+
609+
#### Get Tasks
610+
611+
Get tasks.
612+
613+
```python
614+
tasks = client.get_multi_image_classification_tasks(project="YOUR_PROJECT_SLUG")
615+
```
616+
617+
#### Update Task
618+
619+
Update a single task.
620+
621+
```python
622+
task_id = client.update_multi_image_classification_task(
623+
task_id="YOUR_TASK_ID",
624+
status="approved",
625+
assignee="USER_SLUG",
626+
tags=["tag1", "tag2"],
627+
priority=10, # (optional) none: 0, low: 10, medium: 20, high: 30
628+
attributes=[
629+
{
630+
"type": "text",
631+
"key": "attribute-key",
632+
"value": "attribute-value"
633+
}
634+
]
635+
)
636+
```
637+
638+
#### Response
639+
640+
Example of a single task object
641+
642+
```python
643+
{
644+
"id": "YOUR_TASK_ID",
645+
"name": "sample",
646+
"contents": [
647+
{
648+
"name": "content-name-1",
649+
"url": "content-url-1",
650+
"width": 100,
651+
"height": 100,
652+
},
653+
{
654+
"name": "content-name-2",
655+
"url": "content-url-2",
656+
"width": 100,
657+
"height": 100,
658+
}
659+
],
660+
"status": "registered",
661+
"externalStatus": "registered",
662+
"priority": 10,
663+
"tags": [],
664+
"assignee": "ASSIGNEE_NAME",
665+
"reviewer": "REVIEWER_NAME",
666+
"externalAssignee": "EXTERNAL_ASSIGNEE_NAME",
667+
"externalReviewer": "EXTERNAL_REVIEWER_NAME",
668+
"attributes": [
669+
{
670+
"type": "text",
671+
"key": "attribute-key-1",
672+
"value": "attribute-value-1"
673+
},
674+
{
675+
"type": "text",
676+
"key": "attribute-key-2",
677+
"value": "attribute-value-2"
678+
}
679+
],
680+
"createdAt": "2021-02-22T11:25:27.158Z",
681+
"updatedAt": "2021-02-22T11:25:27.158Z"
682+
}
683+
```
684+
561685
### Sequential Image
562686

563687
Supported following project types:
@@ -2510,6 +2634,7 @@ dataset_object = client.create_dataset_object(
25102634
],
25112635
"attributes": [
25122636
{
2637+
"type": "text",
25132638
"value": "Scottish field",
25142639
"key": "kind"
25152640
}
@@ -2530,6 +2655,32 @@ dataset_object = client.create_dataset_object(
25302655
)
25312656
```
25322657

2658+
If you would like to create a new dataset object with classification type annotations, please pass empty points and value of the annotation named 'classification'.
2659+
2660+
```python
2661+
dataset_object = client.create_dataset_object(
2662+
dataset="YOUR_DATASET_NAME",
2663+
name="brushwood_dog.jpg",
2664+
file_path="./brushwood_dog.jpg",
2665+
tags=["dog"], # max 5 tags per dataset object.
2666+
licenses=["MIT", "my-license"], # max 10 licenses per dataset object
2667+
annotations=[
2668+
{
2669+
"type": "classification",
2670+
"value": "classification",
2671+
"points": [],
2672+
"attributes": [
2673+
{
2674+
"type": "text",
2675+
"value": "Scottish field",
2676+
"key": "kind"
2677+
}
2678+
]
2679+
}
2680+
]
2681+
)
2682+
```
2683+
25332684
#### Response Dataset Object
25342685

25352686
See API docs for details.
@@ -2671,6 +2822,7 @@ client.download_dataset_objects(
26712822
```
26722823

26732824
### Update Dataset Object
2825+
26742826
```python
26752827
dataset_object = client.update_dataset_object(
26762828
dataset_id="YOUR_DATASET_ID",
@@ -2819,7 +2971,7 @@ Only support the following annotation types.
28192971

28202972
- bbox
28212973
- polygon
2822-
- segmentation (Hollowed points are not supported.)
2974+
- segmentation
28232975

28242976
```python
28252977
tasks = client.get_image_tasks(project="YOUR_PROJECT_SLUG")
@@ -3057,6 +3209,16 @@ for image_file_path in glob.iglob(os.path.join(input_dataset_path, "**/**.jpg"),
30573209

30583210
> Please check const.COLOR_PALLETE for index colors.
30593211
3212+
### Mask To FastLabel Segmentation Points
3213+
3214+
Convert mask image to FastLabel's segmentation coordinate format.
3215+
3216+
```python
3217+
points = client.mask_to_fastlabel_segmentation_points(
3218+
mask_image = binary_image_path (or binary_image_array)
3219+
)
3220+
```
3221+
30603222
## Model
30613223

30623224
### Get training jobs

0 commit comments

Comments
 (0)