ó
    UShC  ã                   óä   • S SK r S SKrS SKJrJr  S SKJrJrJ	r	  S SK
Jr  S SKrSq " S S\ R                  R                  5      rSrS rSS jrS	 rSS
 jrS rS rS rS rS r " S S5      rg)é    N)ÚImageÚImageFilter)Úresample_imageÚset_image_shape_ceilÚget_image_shape_ceil)Úperform_upscalec                   ó.   ^ • \ rS rSrU 4S jrS rSrU =r$ )ÚInpaintHeadé   c                 ó”   >• [         TU ]  " U0 UD6  [        R                  R	                  [        R
                  " SSS95      U l        g )N)i@  é   é   r   Úcpu)ÚsizeÚdevice)ÚsuperÚ__init__ÚtorchÚnnÚ	ParameterÚemptyÚhead)ÚselfÚargsÚkwargsÚ	__class__s      €Ú:/home/gothic/public_html/Fooocus/modules/inpaint_worker.pyr   ÚInpaintHead.__init__   s6   ø€ Ü‰Ò˜$Ð) &Ò)Ü—H‘H×&Ñ&¤u§{¢{¸ÈuÑ'UÓVˆ�	ó    c                 óº   • [         R                  R                  R                  USS5      n[         R                  R                  R	                  XR
                  S9$ )N)é   r!   r!   r!   Ú	replicate)ÚinputÚweight)r   r   Ú
functionalÚpadÚconv2dr   )r   Úxs     r   Ú__call__ÚInpaintHead.__call__   sB   € Ü�H‰H×Ñ×#Ñ# A |°[ÓAˆÜ�x‰x×"Ñ"×)Ñ)°¿)¹)Ð)ÐDÐDr   )r   )Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__r   r)   Ú__static_attributes__Ú__classcell__)r   s   @r   r
   r
      s   ø† õW÷Eð Er   r
   c                 ó¤   • [         R                  " U 5      n U R                  [        R                  " U5      5      n [
        R                  " U 5      $ ©N)r   Ú	fromarrayÚfilterr   ÚBoxBlurÚnpÚarray)r(   Úks     r   Úbox_blurr9      s7   € Ü�Š˜Ó€AØ	�‰”×$Ò$ QÓ'Ó(€AÜ�8Š8�A‹;Ðr   c                 ót   • [         R                  " U [        R                  " X4[        R                  S95      $ )N©Údtype)Úcv2Údilater6   ÚonesÚint16)r(   Úksizes     r   Úmax_filter_opencvrB       s&   € ô �:Š:�aœŸš % ´r·x±xÑ@ÓAÐAr   c                 ó.  • [         R                  " U [         R                  S9nSXS:„  '   [        S5       H&  n[	        USS9S-
  n[         R
                  " X15      nM(     [         R                  " USS	5      R                  [         R                  5      nU$ )
Nr;   é   é   é    r   )rA   é   r   éÿ   )	r6   Ú
zeros_liker@   ÚrangerB   ÚmaximumÚclipÚastypeÚuint8)r(   Úx_int16ÚiÚmaxedÚx_uint8s        r   Úmorphological_openrS   &   sw   € ä�mŠm˜A¤R§X¡XÑ.€GØ€G�‰GÑä�2ŽYˆä! '°Ñ3°aÑ7ˆÜ—*’*˜UÓ,Šñ ô �gŠg�g˜q #Ó&×-Ñ-¬b¯h©hÓ7€GØ€Nr   c                 óz   • [         R                  " U 5      R                  [         R                  5      nSX U:„  '   U$ )NrH   )r6   rI   rM   rN   )r(   ÚtÚys      r   Úup255rW   5   s/   € Ü
�Š�aÓ×Ñ¤§¡Ó)€AØ€Aˆ!�e�HØ€Hr   c                 óR   • [         R                  " U 5      n U R                  U5        g r2   )r   r3   Úsave)r(   Úpaths     r   Úimsaver[   ;   s   € Ü�Š˜Ó€AØ‡F�Fˆ4…Lr   c                 óð   • U R                   S S u  pVUS:  a  SnX:”  a  UnUS:  a  SnX%:”  a  UnUS:  a  SnX6:”  a  UnUS:  a  SnXF:”  a  Un[        U5      [        U5      [        U5      [        U5      4$ )Né   r   )ÚshapeÚint)r(   ÚaÚbÚcÚdÚHÚWs          r   Úregulate_abcdrf   @   sŠ   € Ø�7‰7�2�Aˆ;�D€AØˆ1ƒuØˆØƒuØˆØˆ1ƒuØˆØƒuØˆØˆ1ƒuØˆØƒuØˆØˆ1ƒuØˆØƒuØˆÜˆq‹6”3�q“6œ3˜q›6¤3 q£6Ð)Ð)r   c                 ó°  • [         R                  " U 5      n[         R                  " US   5      n[         R                  " US   5      n[         R                  " US   5      n[         R                  " US   5      nX2-   S-  nX2-
  S-  nXT-   S-  nXT-
  S-  n	[	        [        Xy5      S-  5      n
Xj-
  nXj-   S-   nXŠ-
  nXŠ-   S-   n[        XX4U5      u  p#pEX#XE4$ )Nr   r!   r]   gffffffò?)r6   ÚwhereÚminÚmaxr_   rf   )r(   Úindicesr`   ra   rb   rc   ÚabpÚabmÚcdpÚcdmÚls              r   Úcompute_initial_abcdrq   U   sÖ   € Ü�hŠh�q‹k€GÜ
�Šˆw�q‰zÓ€AÜ
�Šˆw�q‰zÓ€AÜ
�Šˆw�q‰zÓ€AÜ
�Šˆw�q‰zÓ€AØ‰5�Q‰,€CØ‰5�Q‰,€CØ‰5�Q‰,€CØ‰5�Q‰,€CÜŒC�‹M˜DÑ Ó!€AØ‰€AØ‰�!‰€AØ‰€AØ‰�!‰€AÜ˜q Q¨1Ó-�J€Aˆ!Ø�ˆ:Ðr   c                 óZ  • [        U5      nSUs=::  a  S::  d   e   eU R                  S S u  pgUS:X  a  SUSU4$  X!-
  Xe-  :¼  a  XC-
  Xu-  :¼  a  OXX!-
  XC-
  :  nU(       + n	X!-
  U:X  a  Sn	XC-
  U:X  a  SnU(       a
  US-  nUS-  nU	(       a
  US-  nUS-  n[        XX#U5      u  pp4Mm  XX44$ )Ng        g      ð?r]   r   Tr!   )Úfloatr^   rf   )
r(   r`   ra   rb   rc   r8   rd   re   Úadd_hÚadd_ws
             r   Ú
solve_abcdrv   h   sß   € Üˆa‹€AØ�!�?�s‹?Ð‰?Ðˆ?à�7‰7�2�Aˆ;�D€AØˆCƒxØ�!�Q˜ˆzÐØ
Ø‰5�A‘E‹>˜a™e q¡u›nØà‘˜1™5Ñ!ˆØ”	ˆà‰5�A‹:ØˆEà‰5�A‹:ØˆEæØ�‰FˆAØ�‰FˆAæØ�‰FˆAØ�‰FˆAä" 1¨¨qÓ1‰
ˆˆañ+ ð, �ˆ:Ðr   c                 óØ   • U R                  5       nU R                  5       n[        R                  " US:  5      nX4   nS H&  u  pg[        U5       H  n[	        X&5      nXRU'   M     M(     U$ )NrE   ))i   r]   )rD   r]   )é€   é   )é@   ry   )é!   rG   )é   rG   )r   é   )r   r}   )Úcopyr6   rh   rJ   r9   )	ÚimageÚmaskÚcurrent_imageÚ	raw_imageÚareaÚstorer8   ÚrepeatsÚ_s	            r   Úfooocus_fillr‡   ˆ   sf   € Ø—J‘J“L€MØ—
‘
“€IÜ�8Š8�D˜3‘JÓ€DØ‰O€Eãa‰
ˆÜ�w–ˆAÜ$ ]Ó6ˆMØ"'˜$Óó  ñ bð
 Ðr   c                   óL   • \ rS rSrSS jrSS jrS rS rS rS r	S	 r
S
 rSrg)ÚInpaintWorkeré–   c           	      ó¨  • [        US:„  5      u  pVpx[        X%XgX„S9u  pVpxXVXx4U l        X%U2Xx24   U l        XU2Xx24   U l        [        U R                  5      S:  a  [        U R                  5      U l        [        U R                  S5      U l        U R                  R                  5       U l	        U R                  R                  u  pšn[        [        U R                  X©5      SS9U l        U(       a%  [        U R                  U R                  5      U l	        [        U5      U l        Xl        S U l        S U l        SU l        S U l        S U l        g )Nr   )r8   i   rE   )rU   F)rq   rv   Úinterested_areaÚinterested_maskÚinterested_imager   r   r   r~   Úinterested_fillr^   rW   r   r‡   rS   r€   r   ÚlatentÚlatent_after_swapÚswappedÚlatent_maskÚinpaint_head_feature)r   r   r€   Úuse_fillr8   r`   ra   rb   rc   rd   re   ÚCs               r   r   ÚInpaintWorker.__init__—   sD  € Ü)¨$°©(Ó3‰
ˆˆaÜ ¨¨qÑ6‰
ˆˆað !" a˜|ˆÔØ# a C¨¨ H™~ˆÔØ %¨ c¨1¨3 h¡ˆÔô   × 5Ñ 5Ó6¸Ó=Ü$3°D×4IÑ4IÓ$JˆDÔ!ô !5°T×5JÑ5JÈDÓ QˆÔØ#×4Ñ4×9Ñ9Ó;ˆÔØ×'Ñ'×-Ñ-‰ˆˆaô  %¤^°D×4HÑ4HÈ!Ó%OÐSVÑWˆÔö Ü#/°×0EÑ0EÀt×G[ÑG[Ó#\ˆDÔ ô ' tÓ,ˆŒ	ØŒ
ð ˆŒØ!%ˆÔØˆŒØˆÔØ$(ˆÔ!Ør   Nc                 ó(   • Xl         X l        X0l        g r2   )r�   r“   r‘   )r   Úlatent_fillr“   Úlatent_swaps       r   Úload_latentÚInpaintWorker.load_latent¼   s   € Ø!ŒØ&ÔØ!,ÔØr   c                 ó”  ^	• [         c5  [        5       q [        R                  " USSS9n[         R	                  U5        [        R
                  " UUR                  R                  U5      /SS9n[         R                  UR                  UR                  S9  [        U5      m	U	4S jnUR                  5       nUR                  U5        U$ )Nr   T)Úmap_locationÚweights_onlyr!   )Údim)r   r<   c                 óH   >• US   S   S:X  a  U TR                  U 5      -   n U $ )NÚblockr!   r   )Úto)ÚhÚtransformer_optionsr”   s     €r   Úinput_block_patchÚ.InpaintWorker.patch.<locals>.input_block_patchÒ   s0   ø€ Ø" 7Ñ+¨AÑ.°!Ó3ØÐ,×/Ñ/°Ó2Ñ2�ØˆHr   )Úinpaint_head_modelr
   r   ÚloadÚload_state_dictÚcatÚmodelÚprocess_latent_inr£   r   r<   ÚcloneÚset_model_input_block_patch)
r   Úinpaint_head_model_pathÚinpaint_latentÚinpaint_latent_maskr¬   ÚsdÚfeedr¦   Úmr”   s
            @r   ÚpatchÚInpaintWorker.patchÂ   s°   ø€ ô Ñ%Ü!,£ÐÜ—’Ð3À%ÐVZÑ[ˆBÜ×.Ñ.¨rÔ2ä�yŠyØØ�K‰K×)Ñ)¨.Ó9ð
ð ñˆô
 	×Ñ T§[¡[¸¿
¹
ÐÑCÜ1°$Ó7Ðõ	ð
 �K‰K‹MˆØ	×%Ñ%Ð&7Ô8Øˆr   c                 ó´   • U R                   (       a  g U R                  c  g U R                  c  g U R                  U R                  sU l        U l        SU l         g )NT©r’   r�   r‘   ©r   s    r   ÚswapÚInpaintWorker.swapÛ   sM   € Ø�<�<Øà�;‰;ÑØà×!Ñ!Ñ)Øà.2×.DÑ.DÀdÇkÁkÐ+ˆŒ�TÔ+ØˆŒØr   c                 ó´   • U R                   (       d  g U R                  c  g U R                  c  g U R                  U R                  sU l        U l        SU l         g )NFr¹   rº   s    r   ÚunswapÚInpaintWorker.unswapé   sM   € Ø�|�|Øà�;‰;ÑØà×!Ñ!Ñ)Øà.2×.DÑ.DÀdÇkÁkÐ+ˆŒ�TÔ+ØˆŒØr   c                 ó’  • UR                  [        R                  5      nU R                  R	                  5       R                  [        R                  5      nU R
                  S S 2S S 2S 4   R                  [        R                  5      S-  nX$-  USU-
  -  -   nUR                  SS5      R                  [        R                  5      $ )Ng     ào@r!   r   rH   )rM   r6   Úfloat32r   r~   r€   rL   rN   )r   ÚimgÚfgÚbgÚwrV   s         r   Úcolor_correctionÚInpaintWorker.color_correction÷   sŽ   € Ø�Z‰ZœŸ
™
Ó#ˆØ�Z‰Z�_‰_Ó×%Ñ%¤b§j¡jÓ1ˆØ�I‰I’aš˜D�jÑ!×(Ñ(¬¯©Ó4°uÑ<ˆØ‰F�R˜1˜q™5‘\Ñ!ˆØ�v‰v�a˜‹~×$Ñ$¤R§X¡XÓ.Ð.r   c                 ó¬   • U R                   u  p#pE[        XU-
  X2-
  5      nU R                  R                  5       nXgX#2XE24'   U R	                  U5      nU$ r2   )rŒ   r   r   r~   rÆ   )r   rÂ   r`   ra   rb   rc   ÚcontentÚresults           r   Úpost_processÚInpaintWorker.post_processþ   sX   € Ø×)Ñ)‰
ˆˆaÜ  ¨!¡e¨Q©UÓ3ˆØ—‘—‘Ó"ˆØ"ˆqˆs�A�CˆxÑØ×&Ñ& vÓ.ˆØˆr   c                 óH   • U R                   U R                  U R                  /$ r2   )r�   r�   rŽ   rº   s    r   Úvisualize_mask_processingÚ'InpaintWorker.visualize_mask_processing  s!   € Ø×$Ñ$ d×&:Ñ&:¸D×<QÑ<QÐRÐRr   )r   r”   rŒ   r�   rŽ   r�   r�   r‘   r“   r€   r’   )Tg-²�ï§Æã?r2   )r+   r,   r-   r.   r   r›   r¶   r»   r¾   rÆ   rË   rÎ   r/   © r   r   r‰   r‰   –   s,   † ô#ôJòò2òò/òõSr   r‰   )r   )r   )r   Únumpyr6   ÚPILr   r   Úmodules.utilr   r   r   Úmodules.upscalerr   r=   r¨   r   ÚModuler
   Úcurrent_taskr9   rB   rS   rW   r[   rf   rq   rv   r‡   r‰   rÐ   r   r   Ú<module>r×      s|   ðÛ Û ç "ß SÑ SÝ ,Û 
ð Ð ôE�%—(‘(—/‘/ô Eð €òôBòôòò
*ò*ò&ò@÷qSò qSr   