§
    ÎÐj¤0  ã                   ó    — d dl Zd dlmZ d dlZd dlmc mZ d dl	m
c mZ ddlmZ ddlmZmZ  G d„ de¦  «        Z G d„ d	e¦  «        Zd
„ ZdS )é    N)ÚImageé   )Úcalculate_new_dimensions)Ú!decode_video_frame_indices_ffmpegÚprobe_video_stream_metadatac                   óN   — e Zd Zdd„Zdd„Zd„ Zdd„Zdd„Zd	„ Zd
„ Z	dddœd„Z
dS )ÚVaceImageProcessorNc                 ó"   — || _         || _        d S ©N)Ú
downsampleÚseq_len)Úselfr   r   s      úFC:\Users\johnn\OneDrive\Documents\AI\shared\utils\vace_preprocessor.pyÚ__init__zVaceImageProcessor.__init__   s   € Ø$ˆŒØˆŒˆˆó    ÚRGBc                 ó$  — |j         |k    r„|j         dk    r|                     |› d�¦  «        }|j         |› d�k    r>t          j        ||j        |j        fd¬¦  «        }|                     |d|¬¦  «         |}n|                     |¦  «        }|S )NÚPÚA)éÿ   r   r   )ÚsizeÚcolor©r   r   )Úmask)ÚmodeÚconvertr   ÚnewÚwidthÚheightÚpaste)r   ÚimageÚcvt_typeÚbgs       r   Ú_pillow_convertz"VaceImageProcessor._pillow_convert   s¤   € ØŒ:˜Ò!Ð!ØŒz˜SÒ Ð ØŸš¨ n n nÑ5Ô5�ØŒz ˜^˜^˜^Ò+Ð+Ý”Y˜xØ%*¤[°%´,Ð$?Ø%4ð6ñ 6ô 6�ð —’˜ ¨U�Ñ3Ô3Ð3Ø��àŸš hÑ/Ô/�Øˆr   c                 ól   — |�|dk    rd S t          j        |¦  «        }|                      |¦  «        }|S )NÚ )r   Úopenr$   )r   Úimg_pathÚimgs      r   Ú_load_imagezVaceImageProcessor._load_image    s<   € ØÐ˜x¨2š~˜~Ø�4ÝŒj˜Ñ"Ô"ˆØ×"Ò" 3Ñ'Ô'ˆØˆ
r   Tc                 ó.  — |j         \  }}||k    s||k    r¯t          ||z  ||z  ¦  «        }|                     t          ||z  ¦  «        t          ||z  ¦  «        ft          j        j        ¬¦  «        }|j        |k    r|j        |k    sJ ‚|j        |z
  dz  }|j        |z
  dz  }	| 	                    ||	||z   |	|z   f¦  «        }|rMt          j        |¦  «                             d¦  «                             d¦  «                             d¦  «        }|S )zH
        Resize, center crop, convert to tensor, and normalize.
        ©Úresampleé   g      à?r   )r   ÚmaxÚresizeÚroundr   Ú
ResamplingÚLANCZOSr   r   ÚcropÚTFÚ	to_tensorÚsub_Údiv_Ú	unsqueeze)
r   r)   ÚohÚowÚ	normalizeÚiwÚihÚscaleÚx1Úy1s
             r   Ú_resize_cropzVaceImageProcessor._resize_crop'   s$  € ð
 ”‰ˆˆBØ�Š8ˆ8�r˜R’x�xå˜˜R™  b¡Ñ)Ô)ˆEØ—*’*Ý�u˜r‘zÑ"Ô"¥E¨%°"©*Ñ$5Ô$5Ð6ÝÔ)Ô1ð ñ ô ˆCð ”9 ’?�? s¤z°RÒ'7Ð'7Ð'7Ð7ð ”)˜b‘. QÑ&ˆBØ”*˜r‘/ aÑ'ˆBØ—(’(˜B  B¨¡G¨R°"©WÐ5Ñ6Ô6ˆCð ð 	EÝ”,˜sÑ#Ô#×(Ò(¨Ñ-Ô-×2Ò2°3Ñ7Ô7×AÒAÀ!ÑDÔDˆCØˆ
r   c                 ó2   — |                       ||||¦  «        S r   )rB   )r   r)   r:   r;   r<   Úkwargss         r   Ú_image_preprocessz$VaceImageProcessor._image_preprocess@   s   € Ø× Ò   b¨"¨iÑ8Ô8Ð8r   c                 ó   —  | j         |fi |¤ŽS r   ©Úload_image_batch)r   Údata_keyrD   s      r   Ú
load_imagezVaceImageProcessor.load_imageC   s   € Ø$ˆtÔ$ XÐ8Ð8°Ð8Ð8Ð8r   c                 ó    —  | j         ||fi |¤ŽS r   rG   )r   rI   Ú	data_key2rD   s       r   Úload_image_pairz"VaceImageProcessor.load_image_pairF   s   € Ø$ˆtÔ$ X¨yÐCÐC¸FÐCÐCÐCr   )r<   r   c          	      óØ  ‡ ‡‡‡— |€‰ j         n|}g }|D ],}‰                      |¦  «        }|                     |¦  «         Œ-|d         j        \  }}	‰ j        dd …         \  }
}t          dt          j        ||	|
z  ||z  z  z  ¦  «        ¦  «        }t          |	|z  ¦  «        |
z  |
z  Št          ||z  ¦  «        |z  |z  Š‰|
z  ‰|z  z  |k    sJ ‚ˆˆˆˆ fd„|D ¦   «         }g |¢‰‰f‘R S )Nr   r   ç      ð?c                 ó@   •— g | ]}‰                      |‰‰‰¦  «        ‘ŒS © )rE   )Ú.0r)   r<   r:   r;   r   s     €€€€r   ú
<listcomp>z7VaceImageProcessor.load_image_batch.<locals>.<listcomp>W   s-   ø€ ÐOÐOÐOÀ3�×&Ò& s¨B°°IÑ>Ô>ÐOÐOÐOr   )	r   r*   Úappendr   r   ÚminÚnpÚsqrtÚint)r   r<   r   Údata_key_batchrD   ÚimgsrI   r)   ÚwÚhÚdhÚdwr?   r:   r;   s   ``           @@r   rH   z#VaceImageProcessor.load_image_batchI   s'  øøøø€ Ø") /�$”,�,°wˆØˆØ&ð 	ð 	ˆHØ×"Ò" 8Ñ,Ô,ˆCØ�KŠK˜ÑÔÐÐØ�AŒwŒ|‰ˆˆ1Ø”   Ô$‰ˆˆBõ �B�œ ¨A°©F°q¸2±vÑ+>Ñ ?Ñ@Ô@ÑAÔAˆÝ��U‘‰^Œ^˜rÑ! BÑ&ˆÝ��U‘‰^Œ^˜rÑ! BÑ&ˆØ�b‘˜R 2™XÑ&¨'Ò1Ð1Ð1Ð1ØOÐOÐOÐOÐOÐOÐOÈ$ÐOÑOÔOˆØ�ˆ�r˜2�hˆˆÐr   )NN)r   )T)Ú__name__Ú
__module__Ú__qualname__r   r$   r*   rB   rE   rJ   rM   rH   rQ   r   r   r	   r	      s´   € € € € € ðð ð ð ðð ð ð ðð ð ðð ð ð ð29ð 9ð 9ð 9ð9ð 9ð 9ðDð Dð Dð ;?Èð ð ð ð ð ð ð r   r	   c            	       óˆ   — e Zd Zd„ Zedej        dedefd„¦   «         Zd„ Z	d„ Z
dd	„Zdd„Zdd„Zdd„Zd
ddddddd
dœd„Zd
S )ÚVaceVideoProcessorc	                 ó¾   — || _         || _        || _        || _        || _        || _        || _        || _        ||| j         d         | j         d         z  z  k    sJ ‚d S )Nr   r.   )r   Úmin_areaÚmax_areaÚmin_fpsÚmax_fpsÚ
zero_startÚ	keep_lastr   )
r   r   re   rf   rg   rh   ri   r   rj   rD   s
             r   r   zVaceVideoProcessor.__init__\   si   € Ø$ˆŒØ ˆŒØ ˆŒØˆŒØˆŒØ$ˆŒØ"ˆŒØˆŒØ˜( d¤o°aÔ&8¸4¼?È1Ô;MÑ&MÑNÒNÐNÐNÐNÐNÐNr   Úvideor:   r;   c                 ó¶  — |                       dddd¦  «        } | j        dd…         \  }}||k    s||k    rÔt          ||z  ||z  ¦  «        }t          j        | t          ||z  ¦  «        t          ||z  ¦  «        fdd¬¦  «        } |                      d¦  «        |k    r|                      d¦  «        |k    sJ ‚|                      d¦  «        |z
  dz  }|                      d¦  «        |z
  dz  }| dd…dd…|||z   …|||z   …f         } |                      dd¦  «                             ¦   «          	                    d	¦  «         
                    d
¦  «        } | S )a•  
        Resize, center crop and normalize loaded video frames (torch.Tensor type)

        Parameters:
          video - video to process (torch.Tensor): Tensor in shape of (T, H, W, C)
          oh - target height (int)
          ow - target width (int)

        Returns:
            The processed video (torch.Tensor): Normalized tensor range [-1, 1], in shape of (C, T, H, W)

        Raises:
        r   é   r   r.   NÚbicubicT)r   r   Ú	antialiasg     à_@rO   )ÚpermuteÚshaper/   ÚFÚinterpolater1   r   Ú	transposeÚfloatr8   r7   )rk   r:   r;   r>   r=   r?   r@   rA   s           r   Úresize_cropzVaceVideoProcessor.resize_cropg   si  € ð  —’˜a  A qÑ)Ô)ˆð ”˜Q˜R˜R”‰ˆˆBØ�Š8ˆ8�r˜R’x�xå˜˜R™  b¡Ñ)Ô)ˆEÝ”MØÝ˜E B™JÑ'Ô'­¨u°r©zÑ):Ô):Ð;ØØð	ñ ô ˆEð —:’:˜a‘=”= BÒ&Ð&¨5¯:ª:°a©=¬=¸BÒ+>Ð+>Ð+>Ð>ð —*’*˜Q‘-”- "Ñ$¨Ñ*ˆBØ—*’*˜Q‘-”- "Ñ$¨Ñ*ˆBØ˜!˜!˜!˜Q˜Q˜Q  2¨¡7 
¨B¨r°B©w¨JÐ6Ô7ˆEð —’  1Ñ%Ô%×+Ò+Ñ-Ô-×2Ò2°5Ñ9Ô9×>Ò>¸rÑBÔBˆØˆr   c                 ó0   — |                       |||¦  «        S r   )rv   )r   rk   r:   r;   s       r   Ú_video_preprocessz$VaceVideoProcessor._video_preprocess�   s   € Ø×Ò  r¨2Ñ.Ô.Ð.r   c                 óô  — t          || j        ¦  «        }|d                              ¦   «         }|€d|d|gn|\  }	}
}}||z
  |
|	z
  }}||z  }| j        \  }}}| j        ||z  z  }t          | j        | j        ||z  z  ||z  ||z  z  ¦  «        }t          j        t          j	        d| 
                    t          j        t          j        |¦  «        ¦  «        t          j        t          j        |¦  «        ¦  «        ¦  «        ¦  «        ¦  «        }t          t          ||z  ¦  «        dz
  |z  dz   t          | j        |z  ¦  «        ¦  «        }t          |t          | j        |z  ¦  «        ¦  «        }t          t          j        ||z  ¦  «        ¦  «        }t          ||z  ¦  «        }|dz
  |z  dz   }||z  }||z  }||z  }| j        rdn| 
                    d||z
  ¦  «        }t          j        |||z   |¦  «        }t          j        t          j        |d d …d f         |d d d …df         k    |d d …d f         |d d d …df         k     ¦  «        d¬¦  «                             ¦   «         }||	|
||f||f|fS )Néÿÿÿÿr   r.   r   g        )Úaxis)rU   rh   Úmeanr   re   r   rf   rV   ÚsquareÚpowerÚuniformÚlog2rW   rX   r1   ri   ÚlinspaceÚargmaxÚlogical_andÚtolist)r   ÚfpsÚframe_timestampsr\   r[   Úcrop_boxÚrngÚ
target_fpsÚdurationr@   Úx2rA   Úy2ÚratioÚdfr]   r^   Ú
min_area_zÚ
max_area_zÚrand_area_zÚofÚtarget_area_zr:   r;   Útarget_durationÚbeginÚ
timestampsÚ	frame_idss                               r   Ú_get_frameid_bbox_defaultz,VaceVideoProcessor._get_frameid_bbox_default’   s¦  € Ý˜˜dœlÑ+Ô+ˆ
Ø# BÔ'×,Ò,Ñ.Ô.ˆØ)1Ð)9˜!˜Q  1˜˜¸x‰ˆˆB��BØ�B‰w˜˜R™ˆ1ˆØ�A‘ˆØ”_‰
ˆˆB�ð ”] b¨2¡gÑ.ˆ
Ý˜œ t¤}¸¸R¹Ñ'@À1ÈÁ7ÈqÐTVÉwÑBWÑXÔXˆ
õ ”i¥¤¨¨C¯KªKÝŒG•B”G˜JÑ'Ô'Ñ(Ô(ÝŒG•B”G˜JÑ'Ô'Ñ(Ô(ñ-
ô -
ñ !ô !ñ ô ˆõ Ý�˜JÑ&Ñ'Ô'¨!Ñ+°Ñ2°QÑ6Ý�”˜{Ñ*Ñ+Ô+ñ
ô 
ˆõ ˜J­¨D¬L¸2Ñ,=Ñ(>Ô(>Ñ?Ô?ˆÝ•2”7˜=¨5Ñ0Ñ1Ô1Ñ2Ô2ˆÝ� Ñ#Ñ$Ô$ˆØ�1‰f˜‰]˜QÑˆØ
ˆb‰ˆØ
ˆb‰ˆð ˜z™/ˆØ”oÐU��¨3¯;ª;°q¸(À_Ñ:TÑ+UÔ+UˆÝ”[ ¨°Ñ(?ÀÑDÔDˆ
Ý”I�bœnØ�q�q�q˜$�wÔÐ#3°D¸!¸!¸!¸Q°JÔ#?Ò?Ø�q�q�q˜$�wÔÐ"2°4¸¸¸¸A°:Ô">Ò>ñ
ô 
ð ðñ ô ÷ ’6‘8”8ð 	ð ˜2˜r 2 rÐ*¨R°¨H°jÐ@Ð@r   r   c                 ó°   — ddl m} | j        } ||||
||¦  «        }|€d|d|gn|\  }}}}||z
  ||z
  }}t          |||||¦  «        \  }}|||||f||f|fS )Nr   r,   )Úshared.utils.utilsr-   rh   r   )r   r…   Úvideo_frames_countÚcanvas_heightÚcanvas_widthr\   r[   Úfit_into_canvasr‡   rˆ   Ú
max_framesÚstart_framer-   r‰   r—   r@   r‹   rA   rŒ   r:   r;   s                        r   Ú_get_frameid_bbox_adjust_lastz0VaceVideoProcessor._get_frameid_bbox_adjust_last¼   s—   € Ø/Ð/Ð/Ð/Ð/Ð/à”\ˆ
à�8˜CÐ!3°ZÀÈ[ÑZÔZˆ	à)1Ð)9˜!˜Q  1˜˜¸x‰ˆˆB��BØ�B‰w˜˜R™ˆ1ˆÝ)¨-¸ÀqÈ!È_Ñ]Ô]‰ˆˆBà˜2˜r 2 rÐ*¨R°¨H°jÐ@Ð@r   Nc                 óˆ   — | j         r |                      |||	|
|||||||¬¦  «        S |                      |||||||¬¦  «        S )N)rŸ   r    )rŸ   )rj   r¡   r˜   )r   r…   r›   r\   r[   r‡   rˆ   rŸ   r    rœ   r�   rž   s               r   Ú_get_frameid_bboxz$VaceVideoProcessor._get_frameid_bboxÉ   s…   € ØŒ>ð 	xØ×5Ò5°cÐ;MÈ}Ð^jÐlmÐopð  sBð  DLð  NQð  _ið  xCÐ5ñ  Dô  Dð  Dà×1Ò1°#Ð7IÈ1ÈaÐQYÐ[^ÐlvÐ1ÑwÔwÐwr   éè  c                 ó$   —  | j         |f||dœ|¤ŽS ©N)r‡   Úseed©Úload_video_batch)r   rI   r‡   r§   rD   s        r   Ú
load_videozVaceVideoProcessor.load_videoÏ   s$   € Ø$ˆtÔ$ XÐV¸ÀtÐVÐVÈvÐVÐVÐVr   c                 ó&   —  | j         ||f||dœ|¤ŽS r¦   r¨   )r   rI   rL   r‡   r§   rD   s         r   Úload_video_pairz"VaceVideoProcessor.load_video_pairÒ   s(   € Ø$ˆtÔ$ X¨yÐaÀ8ÐRVÐaÐaÐZ`ÐaÐaÐar   )r‡   r§   rŸ   Ú
trim_videor    rœ   r�   rž   c                óŒ  ‡ ‡‡‡‡‡‡‡‡— t           j                             |t          |	d         ¦  «        dz  z   ¦  «        }g }g }|	D ]f}t	          j        |¦  «        r|                     |¦  «         Œ,t          |¦  «        }|€t          d|› �¦  «        ‚|                     ||f¦  «         Œgt          |¦  «        dk    rUd}|d         j
        d         |z   }t          |¦  «        dk    r)t          d„ |D ¦   «         ¦  «        }t          ||¦  «        }nA|d         d         d         p|d         d         d         }t          d	„ |D ¦   «         ¦  «        }|dk    rt          ‰|¦  «        n‰Št          |¦  «        dk    r'ˆfd
„|D ¦   «         }|d         j
        dd…         \  }}n(|d         d         d         |d         d         d         }}‰                      |||||||||‰|¬¦  «        \  Š\  ŠŠŠŠ\  ŠŠ}ˆˆˆˆˆfd„|D ¦   «         }t          |¦  «        dk    r||z   }ˆˆˆ fd„|D ¦   «         }g |¢‰‘‰‰f‘|‘R S )Nr   i'  z#Unable to probe video metadata for é   c                 ó$   — g | ]\  }}|d          ‘ŒS ©Úframe_countrQ   ©rR   Ú_Úmetadatas      r   rS   z7VaceVideoProcessor.load_video_batch.<locals>.<listcomp>æ   s!   € Ð"ZÐ"ZÐ"Z¹{¸qÀ( 8¨MÔ#:Ð"ZÐ"ZÐ"Zr   r   Ú	fps_floatr…   c                 ó$   — g | ]\  }}|d          ‘ŒS r±   rQ   r³   s      r   rS   z7VaceVideoProcessor.load_video_batch.<locals>.<listcomp>ê   s!   € ÐQÐQÐQ±k°a¸˜( =Ô1ÐQÐQÐQr   c                 ó$   •— g | ]}|d ‰…         ‘ŒS r   rQ   )rR   Ú	src_videorŸ   s     €r   rS   z7VaceVideoProcessor.load_video_batch.<locals>.<listcomp>ï   s"   ø€ ÐNÐNÐN°i˜9 [ j [Ô1ÐNÐNÐNr   rm   Údisplay_heightÚdisplay_width)rœ   r�   rž   rŸ   r    c                 ó^   •— g | ])\  }}t          |‰d ¬¦  «        dd…‰‰…‰‰…dd…f         ‘Œ*S )Útorch)ÚbridgeN)r   )rR   Ú
video_pathr´   r—   r@   r‹   rA   rŒ   s      €€€€€r   rS   z7VaceVideoProcessor.load_video_batch.<locals>.<listcomp>ö   su   ø€ ð  Qð  Qð  Qñ  tAÐs}ð  @AÕ3°JÀ	ÐRYÐZÑZÔZÐ[\Ð[\Ð[\Ð^`ÐacÐ^cÐegÐhjÐejÐlmÐlmÐlmÐ[mÔnð  Qð  Qð  Qr   c                 ó>   •— g | ]}‰                      |‰‰¦  «        ‘ŒS rQ   )rx   )rR   rk   r:   r;   r   s     €€€r   rS   z7VaceVideoProcessor.load_video_batch.<locals>.<listcomp>ù   s+   ø€ ÐLÐLÐL¸E�$×(Ò(¨°°BÑ7Ô7ÐLÐLÐLr   )rV   ÚrandomÚdefault_rngÚhashr½   Ú	is_tensorrT   r   ÚRuntimeErrorÚlenrq   rU   r£   )r   r‡   r§   rŸ   r­   r    rœ   r�   rž   rY   rD   rˆ   Úvideo_specsÚ
src_videosÚdata_krµ   r…   ÚlengthÚmin_readersr\   r[   Úvideosr—   r:   r;   r@   r‹   rA   rŒ   s   `  `                  @@@@@@@r   r©   z#VaceVideoProcessor.load_video_batchÕ   sÿ  øøøøøøøøø€ ÝŒi×#Ò# D­4°¸qÔ0AÑ+BÔ+BÀUÑ+JÑ$JÑKÔKˆØˆØˆ
Ø$ð 	7ð 	7ˆFÝŒ˜vÑ&Ô&ð 7Ø×!Ò! &Ñ)Ô)Ð)Ð)å6°vÑ>Ô>�ØÐ#Ý&Ð'UÈVÐ'UÐ'UÑVÔVÐVØ×"Ò" F¨HÐ#5Ñ6Ô6Ð6Ð6åˆz‰?Œ?˜AÒÐØˆCØ ”]Ô(¨Ô+¨kÑ9ˆFÝ�;ÑÔ !Ò#Ð#Ý!Ð"ZÐ"ZÈkÐ"ZÑ"ZÔ"ZÑ[Ô[�Ý˜V [Ñ2Ô2�øà˜a”. Ô# KÔ0ÐL°KÀ´NÀ1Ô4EÀeÔ4LˆCÝÐQÐQÀ[ÐQÑQÔQÑRÔRˆFð 5?À²N°N•S˜ ZÑ0Ô0Ð0È
ˆ
Ýˆz‰?Œ?˜AÒÐØNÐNÐNÐNÀ:ÐNÑNÔNˆJØ˜a”=Ô& q¨ sÔ+‰DˆAˆqˆqà˜q”> !Ô$Ð%5Ô6¸ÀA¼ÀqÔ8IÈ/Ô8ZˆqˆAØ59×5KÒ5KÈCÐQWÐYZÐ\]Ð_gÐilð  @Mð  ^jð  ~Mð  [eð  u@Ð5Kñ  6Bô  6BÑ2ˆ	Ñ#�B˜˜B ¡X b¨"¨sð Qð  Qð  Qð  Qð  Qð  Qð  Qð  Qð  EPð  Qñ  Qô  QˆÝˆz‰?Œ?˜AÒÐØ &Ñ(ˆFØLÐLÐLÐLÐLÐLÀVÐLÑLÔLˆØ0�Ð0˜	Ð0 B¨ 8Ð0¨SÐ0Ð0Ð0r   r   )r   r   r   r   N)Nr¤   )r_   r`   ra   r   Ústaticmethodr½   ÚTensorrX   rv   rx   r˜   r¡   r£   rª   r¬   r©   rQ   r   r   rc   rc   [   s  € € € € € ð	Oð 	Oð 	Oð ð%˜5œ<ð %¨Sð %°cð %ð %ð %ñ „\ð%ðN/ð /ð /ð&Að &Að &AðTAð Að Að Aðxð xð xð xðWð Wð Wð Wðbð bð bð bð :>ÀDÐVWÐefÐvwð  JKð  \]ð  quð %1ð %1ð %1ð %1ð %1ð %1ð %1r   rc   c           
      óš  — t          t          | |¦  «        ¦  «        D ]^\  }\  }}|€T|€Rt          j        d||d         |d         f|¬¦  «        | |<   t          j        d||d         |d         f|¬¦  «        ||<   Œ_t          |¦  «        D �]:\  }}	|	��1t          |	¦  «        D �] \  }
}|��|j        dd …         |k    �r|\  }}|j        dd …         \  }}t          j        dd||f|¬¦  «        }t          ||z  ||z  ¦  «        }t          ||z  ¦  «        }t          ||z  ¦  «        }t          j	        | 
                    d¦  «                             d¦  «        ||fdd¬¦  «         
                    d¦  «                             d¦  «        }||z
  d	z  }||z
  d	z  }||d d …d d …|||z   …|||z   …f<   |||         |
<   �Œ"�Œ<| ||fS )
Nrm   r   r   )ÚdeviceéþÿÿÿÚbilinearF)r   r   Úalign_cornersr.   )Ú	enumerateÚzipr½   ÚzerosÚonesrq   rU   rX   rr   rs   Úsqueezer9   )r¹   Úsrc_maskÚsrc_ref_imagesÚ
num_framesÚ
image_sizerÐ   ÚiÚsub_src_videoÚsub_src_maskÚ
ref_imagesÚjÚref_imgrœ   r�   Ú
ref_heightÚ	ref_widthÚwhite_canvasr?   Ú
new_heightÚ	new_widthÚresized_imageÚtopÚlefts                          r   Úprepare_sourcerë   þ   sV  € Ý,5µc¸)ÀXÑ6NÔ6NÑ,OÔ,Oð cð cÑ(ˆÑ(ˆM˜<ØÐ  \Ð%9Ý œ;¨¨:°zÀ!´}ÀjÐQRÄmÐ'TÐ]cÐdÑdÔdˆI�a‰LÝœ* a¨°ZÀ´]ÀJÈqÄMÐ%RÐ[aÐbÑbÔbˆH�Q‰KøÝ" >Ñ2Ô2ð 8ñ 8‰ˆˆ:ØÑ!Ý'¨
Ñ3Ô3ð 8ñ 8‘
��7ØÑ&¨7¬=¸¸¸Ô+=ÀÒ+KÑ+KØ2<Ñ/�M <Ø,3¬M¸"¸#¸#Ô,>Ñ)�J 	Ý#(¤:¨q°!°]ÀLÐ.QÐZ`Ð#aÑ#aÔ#a�LÝ °
Ñ :¸LÈ9Ñ<TÑUÔU�EÝ!$ Z°%Ñ%7Ñ!8Ô!8�JÝ # I°Ñ$5Ñ 6Ô 6�IÝ$%¤M°'·/²/À!Ñ2DÔ2D×2NÒ2NÈqÑ2QÔ2QÐYcÐenÐXoð  wAð  QVð  %Wñ  %Wô  %W÷  %_ò  %_ð  `añ  %bô  %b÷  %lò  %lð  mnñ  %oô  %o�MØ(¨:Ñ5¸!Ñ;�CØ(¨9Ñ4¸Ñ:�DØVc�L    A A A s¨3°Ñ+;Ð';¸TÀ$ÈÑBRÐ=RÐ!RÑSØ+7�N 1Ô% aÑ(ùùØ�h Ð.Ð.r   )ÚnumpyrV   ÚPILr   r½   Útorch.nn.functionalÚnnÚ
functionalrr   Ú!torchvision.transforms.functionalÚ
transformsr5   Úutilsr   Úvideo_decoder   r   Úobjectr	   rc   rë   rQ   r   r   ú<module>rö      s  ðð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø €€€Ø Ð Ð Ð Ð Ð Ð Ð Ð Ø .Ð .Ð .Ð .Ð .Ð .Ð .Ð .Ð .Ø +Ð +Ð +Ð +Ð +Ð +Ø XÐ XÐ XÐ XÐ XÐ XÐ XÐ XðKð Kð Kð Kð K˜ñ Kô Kð Kð\_1ð _1ð _1ð _1ð _1˜ñ _1ô _1ð _1ðF/ð /ð /ð /ð /r   