B
    ?=^2  ã               @   sä   d dl Z d dlZd dlZd dlZd dlmZmZmZm	Z	 d dl
mZ d dlmZ dd„ ZG dd„ dƒZed	kràd
ZdZdej d¡ ZdZeeedee ¡ d ƒdZe e¡ e e¡ e ¡  e ¡  e ¡  eed dZdS )é    N)ÚElementÚ
SubElementÚCommentÚtostring)ÚElementTree)Úminidomc             C   s$   t  | d¡}t |¡}|jdddS )z8Return a pretty-printed XML string for the Element.
    zutf-8z  Ú )ÚindentZnewl)r   r   r   ZparseStringZtoprettyxml)ÚelemZrough_stringZreparsed© r   ú:X:\800139.EyeRIS\EyeRIS.Software\ml-tracking\annotation.pyÚprettify	   s    
r   c               @   sP   e Zd Zddd„Zddd	„Zd
d„ Zddd„Zddd„Zddd„Zddd„Z	dS )Ú
AnnotationNÚLCMúlcm-log-fileÚcamr   c             C   sb  |d k	rJ|| _ t |¡| _| j ¡ | _| j d¡j| _| j d¡j| _	n|| _
|| _|jd | _|jd | _|jd | _|| _|| _|| _	|| _g | _tdƒ| _|  | jd| j	¡| _|  | jd| j¡| _t| jdƒ| _|  | jdd	¡ |  | jd
|¡ |  | jd|¡ |  | jd| j¡ t| jdƒ| _|  | jd| j¡ |  | jd| j¡ |  | jd| j¡ d S )NÚfilenameÚfolderé   r   é   Ú
annotationÚsourceZdatabaseZUnknownÚlcmlogÚutimezcamera-nameÚsizeÚwidthÚheightÚdepth)Úxml_pathr   ÚparseÚxml_treeÚgetrootÚrootÚfindÚtextr   r   r   Úcamera_nameÚshapeZimage_widthZimage_heightZimage_depthr   ÚimageÚbboxesr   Úadd_tagZ
folder_tagZfilename_tagr   r   r   )Úselfr   r'   r   r   r   r%   r   r   r   r   Ú__init__   s8    
zAnnotation.__init__c             C   s    t ||ƒ}|d k	rt|ƒ|_|S )N)r   Ústrr$   )r*   ÚparentZ
child_nameÚvalueÚtagr   r   r   r)   3   s    

zAnnotation.add_tagc       	      C   sÂ   |\}}}}}t | jdƒ}|  |d|¡ |  |dd¡ |  |dd¡ |  |dd¡ |  |dd¡ t |d	ƒ}|  |d
|d ¡ |  |d|d ¡ |  |d|d ¡ |  |d|d ¡ | j |¡ d S )NÚobjectÚnameÚposeZUnspecifiedZ	truncatedÚ0ZoccludedZ	difficultÚbndboxÚxminr   Úyminr   ÚxmaxÚymax)r   r"   r)   r(   Úappend)	r*   ÚbboxÚpt0Úpt1r   Ú
class_nameÚscoresÚobjr4   r   r   r   Úadd_box9   s    
zAnnotation.add_boxc          	   C   sJ   |d kr t j | jd| jd ¡}t|dƒ}| t| jƒ¡ W d Q R X d S )NÚxmlz.xmlÚw)	ÚosÚpathÚjoinr   r   ÚopenÚwriter   r"   )r*   ÚfilepathÚfr   r   r   Úsave_xmlI   s    zAnnotation.save_xmlc       	   	   C   sœ   | j  ¡ }xX| jD ]N}|\}}}}}t |t|ƒt|ƒdd¡ t |||d |d ftjdd¡ qW |d kr„tj	 
| jd| jd ¡}t|ƒ t ||¡ d S )	N)r   éÿ   r   r   r   r   g      à?)r   rK   rK   Zboxed_imagesz.jpg)r'   Úcopyr(   Úcv2Ú	rectangleÚtupleÚputTextÚFONT_HERSHEY_COMPLEXrC   rD   rE   r   r   ÚprintÚimwrite)	r*   rH   Zmarked_imager:   r;   r<   r   r=   r>   r   r   r   Úsave_boxed_imageQ   s    
&zAnnotation.save_boxed_imagec             C   s2   |d kr t j | jd| jd ¡}t || j¡ d S )NÚimagesz.jpg)rC   rD   rE   r   r   rM   rS   r'   )r*   rH   r   r   r   Ú
save_image_   s    zAnnotation.save_imagec             C   sÈ   |d kr| j }n|}x®| jD ]¤}|\}}}}}| j|d |d …|d |d …d d …f }	t|d ƒd t|d ƒ d t|d ƒ d t|d ƒ }
tj | jd|d |
 d ¡}t 	||	¡ qW d S )Nr   r   ú-Úroisz.jpg)
r   r(   r'   r,   rC   rD   rE   r   rM   rS   )r*   rH   Z
fileprefixr:   r;   r<   r   r=   r>   ÚroiZcoord_stringr   r   r   Ú	save_roisf   s    ,<zAnnotation.save_rois)NNNr   r   r   r   )N)N)N)N)N)
Ú__name__Ú
__module__Ú__qualname__r+   r)   r@   rJ   rT   rV   rZ   r   r   r   r   r      s   
!



r   Ú__main__))éd   éÈ   )é‚   i  l   Øø´Ztest_class1g      Ð?))i   i  )if  i¤  l   X5´Ztest_class2g      Ð?rK   )i  iÀ  é   Za_test_fileÚ.iè  )r'   r   r   r   z.xml)r   )rM   ÚnumpyÚnpÚtimerC   Úxml.etree.ElementTreer   r   r   r   Z	xml.etreer   Zxml.domr   r   r   r[   r:   Zbbox2ÚrandomÚimgr   ÚintÚannr@   rJ   rT   rZ   Zann2r   r   r   r   Ú<module>   s(   e

