
    9i+                     4   S SK r S SKrS SKrS SKJr  S SKrS SKrS SKrS SK	r	S SK
Js  Jr  S SKJr  S SKJr  S\	R$                  R&                  l        SrSrSrSrS	rS
rSrSrSrSrS rSS jr S r!S r"SS jr#\RH                  4S jr%S r&S r'S r( SS jr)g)    N)deque)Image)
transformsTi  2   g      $@      d   
      c                 (   SnUR                  5       nUR                  SS u  pEU[        :  d
  U[        :  a  [        [        U5      -  n[        [        U5      -  nXg:  a  UOUn[	        [        XR-  5      S5      [	        [        XB-  5      S5      4n[        R                  " X8[        R                  5      n[	        S[        U[        -  S-   5      5      n	[        R                  " [        R                  X45      n
[        R                  " U[        R                  U
5      n[        U[        S5      u  pU[         :  a  [#        S5      eSU-  n[%        XU5      nXS   US   US   -   S-   2US   US   US   -   S-   24   R                  5       nU$ )	Ng      ?r                  ?Tz7[extractSkyImage]failed!! Valid sky region is too small)copyshape IMAGE_BLENDER_INNER_RECT_MAX_DIMfloatmaxintcv2resizeINTER_LINEAR IMAGE_BLENDER_DILATE_KERNEL_SIZEgetStructuringElement
MORPH_RECTmorphologyExMORPH_CLOSEget_max_inner_rect"IMAGE_BLENDER_VALID_MASK_THRESHOLD IMAGE_BLENDER_MIN_VALID_SKY_AREA	Exception
scale_rect)in_sky_imagein_sky_maskscaleresize_maskrowscolsheight_scalewidth_scalenew_size
kernelSizeelementmax_inner_rectarearaw_inner_rectout_sky_images                  n/var/www/html/land-doc-ocr/venv/lib/python3.13/site-packages/modelscope/models/cv/image_skychange/skychange.pyextract_sky_imager4      s   E""$K""1Q'JD//667%+E6tD , :DL)1-s3t|3D3406 7jj8H8HIQE$DDsJKLJ'')3(@BG"";IK-7?N ..EG 	G %KEUCN !2>!3D#1!#4457849 "9!/!2>!3D#1!#4457849 "9": < =ADF      c                    [         R                  R                  5       (       a=  U R                  5       R	                  5       n UR                  5       R	                  5       nO U R	                  5       n UR	                  5       nUR
                  SS u  pVUR
                  SS u  pxU R
                  SS u  pUR
                  SS u  pXW:w  d  Xh:w  a  [        S5      eX:w  d  X:w  a  [        S5      e[        X#5      n[        XUU5      nU$ )Nr   r   zC[blend]failed!! sky_image shape not equal with sky_image_mask shapezG[blend]failed!! scene_image shape not equal with scene_image_mask shape)	torchcudais_availablecpunumpyr   r"   r4   blend_merge)scene_image
scene_mask	sky_imagesky_maskinBlendLevelNumsky_image_hsky_image_w
sky_mask_h
sky_mask_wscene_image_hscene_image_wscene_mask_hscene_mask_wvalid_sky_imageout_blend_images                  r3   blendrL   C   s   zz  !oo'--/MMO))+	!'')OO%	(q3K%^^Aa0J#.#4#4Qq#9 M!+!1!1!A!6L K$=Q
 	
 $(EU
 	
 (	<O!+?"13Or5   c                    SnU R                   SS u  pESu  pgpS/US-   -  n
[        SU5       H  n[        5       n[        SUS-   5       H  nX:  a2  U(       a  XU4   U:  a  X   S-   OSX'   OXU4   U::  a  X   S-   OSX'   [        U5      S:w  a  XS      X   :  au  US   nUR	                  5         X   n[        U5      S:X  a  UO	XS   -
  S-
  nUU-  nUU:  a  UnUnX-
  S-   nUS-
  n	U	U-
  S-   n[        U5      S:w  a  XS      X   :  a  Mu  UR                  U5        M     M     UUX-
  S-   X-
  S-   4nUU4$ )Nr   r   )r   r   r   r   r   )r   ranger   lenpopappend)in_image_maskin_alpha_thresholdis_bigger_validresrowcoli0j0i1j1heightisjcur_h_wcurAreaout_rects                      r3   r   r   `   s   
C""1Q'HCNBBSC!G_F1c]Gq#'"Aw"  -T25GG 	MN I )A.2DD 	AJK I a&A+&2-69"<e[a&A+Q1u9q=r'S=!CB1BQBb1B a&A+&2-69"< HHQK/ # 8 	

!
!	H S=r5   c                    [        U S   U-  S-   5      n[        U S   U-  S-   5      nUR                  SS u  pV[        [        U S   U-  S-   5      U5      n[        [        U S   U-  S-   5      U5      nX4Xs-
  X-
  4n	U	$ )Nr   r   r   r   r   )r   r   min)
in_rectin_image_sizein_scaletlXtlYin_image_size_hin_image_size_wbrXbrYre   s
             r3   r#   r#      s    
gaj8#c)
*C
gaj8#c)
*C'4':':1Q'?$O
c'!*x'#-.
@C
c'!*x'#-.
@C#)SY/HOr5   c                     X:  n [         R                  " U R                  [        R                  5      5      n[         R
                  " U5      nU$ )N)r   findNonZeroastypenpuint8boundingRect)in_maskin_threshold	locationsoutput_rects       r3   get_fast_valid_rectr{      s;    $Grxx 89I""9-Kr5   c                    U R                  5       nUu  pEU R                  SS u  pgXV-  nXG-  n	X:  a  UOU	n
[        [        Xz-  S-   5      S5      [        [        Xj-  S-   5      S5      4n[        R
                  " X;SSU5      nU$ )Nr   r   r   r   )r   r   r   r   r   r   )in_imagein_min_sizetyperesize_imagewidthr]   resize_img_heightresize_img_widthr*   widht_scaler&   r,   s               r3   min_size_matchr      s    ==?LME*2..1*='-L*K(6LKEC (3./3C!)C/0!4H
 ::laDALr5   c                     Uu  p#U R                   SS u  pEXC-
  S-  nXR-
  S-  nU R                  5       nXXc-   2XwU-   24   nU$ )Nr   r   )r   r   )	r}   in_size	in_size_w	in_size_h
in_image_h
in_image_whalf_height
half_widthout_crop_images	            r3   center_cropr      sl    "I%^^Aa0J)a/K(Q.J]]_N#0G$G$.I/E$E%F GNr5   c                 8   Uu  p4pVUS:  d  US:  d  US::  d  US::  a  [        S5      eXPR                  S   :w  d  X`R                  S   :w  a  [        S5      eX5-   UR                  S   :  d  XF-   UR                  S   :  a  [        S5      eU X$XF-   2X3U-   24'   g )Nr   z3[safe_roi_pad] Failed!! x,y,w,h of rect are illegalr   z[safe_roi_pad] Failed!!)r"   r   )in_pad_imagerh   out_base_image	in_rect_x	in_rect_y	in_rect_w	in_rect_hs          r3   safe_roi_padr      s    18.I)1}	Aa9>MNN&&q))Y:L:LQ:O-O122 4 4Q 77$~';';A'>>122 7C Y22223 4r5   c                 Z   UR                   SS UR                   SS :w  a  [        S5      eUu  pEUR                   SS u  pgU R                   SS u  pXG-   U	:  d  XV-   U:  a  [        S5      eXXV-   2XDU-   24   n
UR                  5       nUR                  5       n[        R                  " U
5      n
[        R
                  " US S 2S S 2[        R                  4   SSS9nUS-  nSU-
  U
-  X-  -   n
[        R                  " U
SS	5      n
U
R                  S
5      n
XEUU4n[        XU 5        U $ )Nr   r   zD[merge_image] Failed!! in_merge_image.shape != in_merge_mask.shape!!z:[merge_image] Failed!! merge_image:image rect not in imager   )axisg     o@r      ru   )
r   r"   r   rt   float32repeatnewaxiscliprs   r   )in_base_imagein_merge_imagein_merge_maskin_point
in_point_x
in_point_yin_merge_image_rowsin_merge_image_colsin_base_image_rowsin_base_image_colsbase_roi_imagemerge_imagemerge_alpharoi_rects                 r3   r   r      su   Aa M$7$7!$<<R
 	
 &J/=/C/CAa/H,-:-@-@1-E*(+==/2DDHJ 	J #j.N#N#-%8/9 $9$: <N !%%'K$$&KZZ/N))K1bjj(8911EK%K 	
K>*,7,EFNWW^Q4N#**73N(;#%H=9r5   c                 j   [        US5      nUS   US   -  nU[        :  a  [        S5      e[        X$SS  5      n[	        XdSS  5      n[        [        UR                  S   [        -  S-   5      [        5      [        [        UR                  S   [        -  S-   5      [        5      4n[        R                  " X[        R                  5      n[        R                  " U[        [        45      n[        R                  " [        R                   [        [        45      n	[        R"                  " X5      n
[        R$                  " X5      nSU-
  n[        R                  " XR                  SS S S S2   5      n
[        R                  " XR                  SS S S S2   5      nUu  ppXX-   2XU-   24   nU R'                  5       n[)        UUUUSS 5      n/ nUR+                  U 5        UR+                  U5        / nUR+                  UR-                  [.        R0                  5      5        UR+                  U
R-                  [.        R0                  5      5        SSU R                  S   U R                  S   4n[        R2                  " SU5      nUR5                  U5        [7        S[9        U5      5       H  nUR;                  UU   UU   S	5        M     [.        R<                  " U R                  S   U R                  S   4S
S9S-  n[.        R>                  " U 5      nURA                  UU5      nUS   $ )Nr   r   r   z@[blend_merge] Failed!! Scene Image Valid sky region is too smallr   r   r   rN   )r   r   ru   )dtype)!r{   r!   r"   r   r   r   r   r   IMAGE_BLENDER_MASK_RESIZE_SCALEIMAGE_BLENDER_MIN_RESIZE_DIMr   r   r   blurIMAGE_BLENDER_BLUR_KERNEL_SIZEr   r   dilateeroder   r   rR   rs   rt   ru   detail_MultiBandBlenderpreparerO   rP   feedones
zeros_likerL   )in_scene_imagein_scene_maskin_valid_sky_imagerA   scene_sky_rectr0   rJ   sky_sizeresize_scene_maskr.   r@   r>   xywhvalid_sky_maskpano_sky_imageblend_imagesblend_maskspanorama_rectblenderr^   	pano_maskrK   results                             r3   r<   r<      s    ):N!~a00D..NP 	P %%79KLO!/!"3EFO 	##A&)HH (	

 	##A&)HH (	
H 

=C<L<LM	')GH
 ''	')GHJG zz+5H,6Jz!Jzz($7$7!$<TrT$BCHJ(;(;Aa(@2(FGJJA!gqQw./N#((*N !/!1DFNL''Kz((23xrxx01>//2N4H4H4KLM))!_=GOOM"1c,'(\!_k!nf= ) 	!!!$n&:&:1&=>g	O
	  mmN3O]]?I6F!9r5   )r
   )r   )r   )*numbersospdbcollectionsr   r   jsonr;   rt   r7   torch.nn.functionalnn
functionalFPILr   torchvisionr   backendscudnnenabledIMAGE_MAX_DIMIMAGE_MIN_DIMIMAGE_MAX_RATIOr   r   r   r    r!   r   r   r4   rL   r   r#   r{   r   r   r   r   r   r<    r5   r3   <module>r      s     	 
  
       "#   "& #&  #$  %( "#&  ! !" #L:'T 03/?/?  
C"!N !"Hr5   