o
    mi                     @   s$  d dl mZmZmZ d dlZd dlZd dlmZ d dl	m
Z
 d dlmZ d dlmZ d dlZd dlmZmZ dd	 Zd
e
deeeef fddZ	dd
e
dedeej deejeeef fddZdejdedefddZd
e
dedejdejfddZ	ddededejdedee f
ddZdS )    )DictOptionalTupleN)tqdm)Results)SegmentationPredictor)scale_image)!get_ground_truth_bbox_annotationsget_mean_confidence_mapc           	      C   s\   | j \}}}tj||ftjd}t|D ]}| d d d d |f }|| }|||dk< q|S )N)dtype   )shapenpzerosuint8range)	instance_maskclass_indicesheightwidthnum_instancessemantic_maskiinstance_mapclass_index r   f/home/ubuntu/SoloSpeech/.venv/lib/python3.10/site-packages/wandb/integration/ultralytics/mask_utils.pyinstance_mask_to_semantic_mask   s   r   resultreturnc                 C   s  | j j  }| j j  }| j j }dd | j D }|t	| j di t
|||}d }| jd urmtt| jj d| jd d d d d d df j}t|| }t	| j ||dk< d||di}g d	}	}
tt	|D ]C}|	t|| d t|| d
 gt|| d t|| d ddt|| |t||  dt|| id |
t|| 7 }
qxd|	|di}|||fS )Nc                 S   s   i | ]\}}t |t|qS r   )intstr).0kvr   r   r   
<dictcomp>   s    z'get_boxes_and_masks.<locals>.<dictcomp>
background)r      r   r   predictions	mask_dataclass_labelsg        r   r'      middler   r   pixel
confidence)positiondomainclass_idbox_captionscoresbox_datar,   )boxesxywhlongnumpyclsconfnamesitemsupdatelenr
   masksr   r   	transposedataorig_imgr   r   tolistr   appendr    float)r   r9   classesr1   class_id_to_labelmean_confidence_maprC   scaled_instance_maskscaled_semantic_maskr8   total_confidenceidxr   r   r   get_boxes_and_masks   sV   



rQ   
model_nametablec                 C   s~   |  d} t| \}}}tj| jd d d d d d df ||d}|d ur7|||t|d d || j |S |||d |fS )Ncpur(   r9   rC   r)   r8   )torQ   wandbImagerF   add_datarB   speed)r   rR   rS   r9   rC   rL   imager   r   r   plot_mask_predictionsN   s   
*r\   r[   promptc                 C   s   g }|d d ur(| |d d |d d g|d d |d d ddddd	 |d
 d urF|  tj} tj| t|d
 dddtjd} d|ddidi}| |fS )Nbboxesr   r   r'   r-   r.   r0   z
Prompt-Box)r2   r3   r4   r5   points   )r      r   r(   )lineTypepromptsr7   )	rH   copyastyper   r   cv2circletupleLINE_AA)r[   r]   wb_box_datar   r   r   structure_prompts_and_image`   s.   

rk   c              	   C   s|   |  d} | jd d d d d d df }t||\}}tj||dt| jj	 
 tddddid}|| |S )	NrT   r(   r)   
Background
Prediction)r   r   r*   rU   )rV   rF   rk   rW   rX   r   squeezerC   rE   rT   r<   re   r    rY   )r   r]   rS   r[   rj   r   r   r   plot_sam_predictions}   s   


ro   	predictormax_validation_batchesepochc              
   C   s4  d}t | j| j }t||}t| D ]\}	}
||
d }tt|t |d|	d  d| d}|D ][\}}|d}t||\}}}}z@t||
d | |
|}t	j
|
d | ||d|d	|d
}||	|||jg}|d urs|g| n|}|g| }|j|  |d7 }W q2 ty   Y q2w |	d |kr |S q|S )Nr   im_filez$Generating Visualizations for batch-r   /)totaldescrT   r7   )zground-truthr)   rU   )rB   dataset
batch_sizemin	enumerater   rV   r\   r	   rW   rX   rZ   rY   	TypeError)
dataloaderclass_label_maprR   rp   rS   rq   rr   data_idxnum_dataloader_batches	batch_idxbatchprediction_resultsprogress_bar_result_iterableimg_idxprediction_result_prediction_mask_dataprediction_box_datarL   ground_truth_datawandb_image
table_rowsr   r   r   $plot_segmentation_validation_results   sb   	




r   )N)typingr   r   r   rf   r<   r   	tqdm.autor   ultralytics.engine.resultsr   ultralytics.models.yolo.segmentr   ultralytics.utils.opsr   rW   (wandb.integration.ultralytics.bbox_utilsr	   r
   r   rQ   r!   TablerX   r\   arrayrk   ro   r    r   r   r   r   r   <module>   sV    
4

