
    ]j                     8    d dl Z d dlZd Zd Zd Zd Zd Zd Zy)    Nc                 Z    | j                         D ]  }|j                  d      dk(  s y y)z
    Check if the label config contains keypoints.
    :param label_config: Label config in JSON format.
    :return: True if keypoints are present, False otherwise.
    typeKeyPointLabelsTF)valuesget)label_configcfgs     N/root/env/lib/python3.12/site-packages/label_studio_sdk/converter/keypoints.pykeypoints_in_label_configr      s5     ""$ 776?..     c                    g }|j                         D ]8  }|j                  d      dk(  s|j                  |j                  dg              : t        t        j                  |            }| D cg c]  }|d   |vs|j                          }}g }i }d}	|D ]%  }|	|d<   |j                  |       |	||d   <   |	dz  }	' |r'|	}
|
dd|g d	}|j                  |       |D ]  }|
||<   	 ||fS c c}w )
Nr   r   labelsnamer   id   default)r   r   supercategory	keypointsskeleton)r   r   extendlistdictfromkeyscopyappend)
categoriescategory_name_to_idr   keypoint_labelsr	   catnon_kpnew_categoriesnew_mappingnext_id	merged_idmerged_categorykp_names                r
   update_categories_for_keypointsr'      s*   O""$ :776?..""3778R#89: 4==9:O$.US#f+_2TchhjUFUNKG D	c"#*CK 1	 	&(
 	o.& 	-G#,K 	- ;&&1 Vs   0C.=C.c                    i }| j                         D ]8  }|j                  d      dk(  s|j                  |j                  di              : g t               }}|j	                         D ]I  \  }}	 t        |j                  d            }||v r&|j                  ||f       |j                  |       K |j                  d        |D cg c]  \  }}|	 }	}}|	S # t        t        f$ r Y w xY wc c}}w )Nr   r   labels_attrsmodel_indexc                     | d   S )Nr    )ps    r
   <lambda>z build_kp_order.<locals>.<lambda>F   s
    QqT r   )key)r   r   updatesetitemsint	TypeError
ValueErrorr   addsort)
r   kp_blocktagpairsusedr   attrsidx_results
             r
   build_kp_orderr@   3   s    H""$ 9776?..OOCGGNB789 ce4E~~' e	eii./C $;c4[! 
JJ>J""'(wq$d(F(M :& 		 )s   1CC4C10C1c                    t        t        |            D cg c]  }| d|z  dz      dkD  s| d|z      }}t        t        |            D cg c]  }| d|z  dz      dkD  s| d|z  dz       }}|r@|r>t        |      }t        |      }t        |      }t        |      }||z
  }	||z
  }
|||	|
g}|S g d}|S c c}w c c}w )N      r   r   )r   r   r   r   )rangelenminmax)r   kp_orderixsysx_miny_minx_maxy_maxwidthheightbboxs               r
   get_bbox_cocorS   K   s    "'H"6	QQ)AaC!G:Lq:P)AaC.	QB	Q&+CM&:	Ui!a>PST>T)AaC!G
	UB	U	bBBBBueV, K K 
R	Us   B8
B8B=!B=c                 $   |st        d      dgt        |      dz  z  | D ]  }|d   |d   }}|d   dz  |z  |d   dz  |z  }	}|j                  d	g       }
|
rd
nd}|
D ]Z  }||v s|j                  |      }t	        t        |            d|z  <   t	        t        |	            d|z  dz   <   |d|z  d
z   <   \  t        fdt        t        |            D              }t        |      }|j                  |d   d      }|||||dd}|S )Na  No keypoint order found. Please ensure that KeyPointLabels in your label config have 'model_index' attributes defined. For example:
<KeyPointLabels name="keypoints" toName="image">
  <Label value="eye" model_index="0"/>
  <Label value="nose" model_index="1"/>
</KeyPointLabels>r   rB   original_widthoriginal_heightxd   ykeypointlabelsrC   r   c              3   @   K   | ]  }d |z  dz      dkD  sd  yw)rB   rC   r   r   Nr,   ).0rI   r   s     r
   	<genexpr>z-process_keypoints_for_coco.<locals>.<genexpr>t   s&     Ra9QqS1W;MPQ;QRs   )r   image_idcategory_idr   num_keypointsrR   iscrowd)	r5   rE   r   indexr3   roundsumrD   rS   )r   rH   annotation_idr^   r   kprP   rQ   rW   rY   r   vlabelr=   r`   rR   r_   
annotationr   s                     @r
   process_keypoints_for_cocorj   [   sX    
 	
 s8}q()I 
++,b1B.Cv#w}u$bgmf&<1("-AQ 	+E nnU+%(q]	!c'"),U1X	!c'A+&)*	!c'A+&	+
+ R5X#7RRMH-D%))(1+q9K"&J r   c                    g }| j                         D ]8  }|j                  d      dk(  s|j                  |j                  dg              : t        t        j                  |            }g }| j                         D ]8  }|j                  d      dk(  s|j                  |j                  dg              : t        t        j                  |            }g }i }t        |      D ]  \  }}|j                  |||d       |||<   ! ||fS )Nr   r   r   RectangleLabels)r   r   r   )r   r   r   r   r   r   	enumerater   )r   r   r	   rectangle_labelsr   r   rI   rh   s           r
   !get_yolo_categories_for_keypointsro      s   O""$ :776?..""3778R#89: 4==9:O ""$ ;776?//##CGGHb$9:; DMM*:;< J./ '5EPQ%&E"' ***r   )osjsonr   r'   r@   rS   rj   ro   r,   r   r
   <module>rr      s+    	 	'D0 'T+r   