@@ -542,13 +542,49 @@ def __to_annotation_detail_for_request(
542
542
543
543
return dest_obj
544
544
545
+ def __convert_annotation_specs_labels_v2_to_v1 (
546
+ self , labels_v2 : List [Dict [str , Any ]], additionals_v2 : List [Dict [str , Any ]]
547
+ ) -> List [LabelV1 ]:
548
+ """アノテーション仕様のV2版からV1版に変換する。V1版の方が扱いやすいので。
549
+
550
+ Args:
551
+ labels_v2 (List[Dict[str, Any]]): V2版のラベル情報
552
+ additionals_v2 (List[Dict[str, Any]]): V2版の属性情報
553
+
554
+ Returns:
555
+ List[LabelV1]: V1版のラベル情報
556
+ """
557
+
558
+ def get_additional (additional_data_definition_id : str ) -> Optional [Dict [str , Any ]]:
559
+ return _first_true (
560
+ additionals_v2 , pred = lambda e : e ["additional_data_definition_id" ] == additional_data_definition_id
561
+ )
562
+
563
+ def to_label_v1 (label_v2 ) -> LabelV1 :
564
+ additional_data_definition_id_list = label_v2 ["additional_data_definitions" ]
565
+ new_additional_data_definitions = []
566
+ for additional_data_definition_id in additional_data_definition_id_list :
567
+ additional = get_additional (additional_data_definition_id )
568
+ if additional is not None :
569
+ new_additional_data_definitions .append (additional )
570
+ else :
571
+ raise ValueError (
572
+ f"additional_data_definition_id='{ additional_data_definition_id } ' に対応する属性情報が存在しません。"
573
+ f"label_id='{ label_v2 ['label_id' ]} ', label_name_en='{ self .__get_label_name_en (label_v2 )} '"
574
+ )
575
+ label_v2 ["additional_data_definitions" ] = new_additional_data_definitions
576
+ return label_v2
577
+
578
+ return [to_label_v1 (label_v2 ) for label_v2 in labels_v2 ]
579
+
545
580
def put_annotation_for_simple_annotation_json (
546
581
self ,
547
582
project_id : str ,
548
583
task_id : str ,
549
584
input_data_id : str ,
550
585
simple_annotation_json : str ,
551
- annotation_specs_labels : List [LabelV1 ],
586
+ annotation_specs_labels : List [Dict [str , Any ]],
587
+ annotation_specs_additionals : Optional [List [Dict [str , Any ]]] = None ,
552
588
) -> bool :
553
589
"""
554
590
AnnoFabからダウンロードしたアノテーションzip配下のJSONと同じフォーマット(Simple Annotation)の内容から、アノテーションを登録する。
@@ -557,10 +593,15 @@ def put_annotation_for_simple_annotation_json(
557
593
project_id:
558
594
task_id:
559
595
input_data_id:
560
- simple_annotation_json:
596
+ simple_annotation_json: AnnoFabからダウンロードしたアノテーションzip配下のJSONのパス
597
+ annotation_specs_labels: アノテーション仕様のラベル情報。annotation_specs_additionalsが指定されている場合はV2版、指定されない場合はV1版。
598
+ annotation_specs_additionals: アノテーション仕様の属性情報(V2版)
561
599
562
600
Returns:
563
601
True:アノテーション情報をした。False: 登録するアノテーション情報がなかったため、登録しなかった。
602
+
603
+ Notes:
604
+ 2021/07以降、引数annotation_specs_labelsはV1版をサポートしなくなる予定です。
564
605
"""
565
606
parser = SimpleAnnotationDirParser (Path (simple_annotation_json ))
566
607
annotation = parser .load_json ()
@@ -571,9 +612,14 @@ def put_annotation_for_simple_annotation_json(
571
612
return False
572
613
573
614
request_details : List [Dict [str , Any ]] = []
615
+ annotation_specs_labels_v1 = (
616
+ self .__convert_annotation_specs_labels_v2_to_v1 (annotation_specs_labels , annotation_specs_additionals )
617
+ if annotation_specs_additionals is not None
618
+ else annotation_specs_labels
619
+ )
574
620
for detail in details :
575
621
request_detail = self .__to_annotation_detail_for_request (
576
- project_id , parser , detail , annotation_specs_labels
622
+ project_id , parser , detail , annotation_specs_labels_v1
577
623
)
578
624
if request_detail is not None :
579
625
request_details .append (request_detail )
0 commit comments