
    9i6                        S SK r S SKJrJr  S SKrS SKrS SKJr  S SK	J
r
  S SKJr  S SKJr  S SKJr  S SKJrJr  S SKJr  S S	KJr  S S
KJr  S SKJr  \" 5       r\R:                  " \R<                  \R<                  S9 " S S\5      5       rg)    N)AnyDict)Image)	Pipelines)HRNetCrowdCounting)
OutputKeys)InputPipeline)	PIPELINES)	LoadImage)Tasks)
get_logger)module_namec                      ^  \ rS rSrS\4U 4S jjrS rS rS\S\	\\
4   4S jrS\	\\
4   S\	\\
4   4S	 jr\R                  " 5       S
 5       rS\	\\
4   S\	\\
4   4S jrSrU =r$ )CrowdCountingPipeline   modelc                 D  > [        U[        5      (       d   S5       e[        TU ]  " SUSS.UD6  [        R                  SU 35        [        U5      R                  U R                  5      U l	        U R                  R                  5         [        R                  S5        g)z$
model: model id on modelscope hub.
zmodel must be a single strF)r   auto_collatezloading model from dir zload model doneN )
isinstancestrsuper__init__loggerinfor   todeviceinfer_modeleval)selfr   kwargs	__class__s      o/var/www/html/land-doc-ocr/venv/lib/python3.13/site-packages/modelscope/pipelines/cv/crowd_counting_pipeline.pyr   CrowdCountingPipeline.__init__   s     %%%C'CC%Cu5CFC-eW56-e477D%&    c                    UR                   S   nUR                   S   nUnUnUS:  a  UnSnXV-  U-  nUS:  a  UnSnXF-  U-  nUS::  a  UnSnXF-  U-  nUS::  a  UnSnXV-  U-  nXE:  a  XT-  S:  a  SnSnOXE-  S:  a  SnSn[        R                  " US-  5      S-  n[        R                  " US-  5      S-  n[        R                  " XE/5      " U5      nU$ )N   r   i   i  g;;@    )sizemathceil
transformsResize)r!   imgheightwidthresize_heightresize_widthtmps          r$   resizeCrowdCountingPipeline.resize%   s"   !4CL)/=@MD C M)/<?LCCM)/<?L3CL)/=@M '+j8# #+j8 $"		-""45:yy!23b8 =>sC
r&   c                 R   [        S5       GH  n[        S5       GH  n[        R                  " US   S-  5      [        R                  " US   S-  5      pvUS   S-  US   S-  p[        R                  " SUS   -  S-  5      US   S-  US-
  -  -   n
[        R                  " SUS   -  S-  5      US   S-  US-
  -  -   nUS:X  a$  [        R                  " SUS   -  S-  5      nSnSn
O%US:X  a  [        R                  " SUS   -  S-  5      nUS:X  a$  [        R                  " SUS   -  S-  5      n	SnSnO%US:X  a  [        R                  " SUS   -  S-  5      n	US S 2S S 2XU-   2XU	-   24==   X$S-  U-   US-  U-   S-   2S S 2XfU-   2XwU	-   24   -  ss'   GM     GM     U$ )N         r(   r   )ranger+   floorr,   )r!   
eval_shapeeval_ppred_mijstart_hstart_wvalid_hvalid_wpred_hpred_ws               r$   merge_crops!CrowdCountingPipeline.merge_cropsL   s   qA1X#'::jma.?#@$**qMA%C'#-a=A#5z!}7I
1%)+.8mq.@A. 
1%)+.8mq.@A. 6"jjZ]):Q)>?GGF!V"iiJqM(9A(=>G6"jjZ]):Q)>?GGF!V"iiJqM(9A(=>Gq!VW$44f >! 7! ! "%+EAIa!eai!m,CQ,3g4E,E,3g4E,E-F &GG "/  8 r&   inputreturnc           
         [         R                  " U5      nU R                  U5      n[        R                  " 5       " U5      nUR
                  n[        R                  " SS5      " U5      nUS   S-  US   S-  pe/ n[        S5       HE  n[        S5       H3  n	US-  U-  US-  U	-  pUR                  US S 2XU-   2XU-   24   5        M5     MG     [        R                  " U5      nUR                  U R                  5      n[        R                  " U5      n[        R                  " SSUS   S-  US   S-  45      R                  U R                  5      nUUS.nU$ )N)g
ףp=
?gv/?gCl?)gZd;O?gy&1?g?r(   r9   r8   )r/   map)r   convert_to_imgr5   r-   ToTensorshape	Normalizer;   appendtorchstackr   r   squeezezeros)r!   rJ   r/   img_ori_tensor	img_shapepatch_heightpatch_widthimgsr@   rA   rB   rC   eval_imgeval_patchsprediction_mapresults                   r$   
preprocess CrowdCountingPipeline.preprocessk   sm   &&u-kk##,,.s3"((	""#8#8:'57 &/q\a$7)A,19LkqA1X$0A$5#:[@A>BEF=GC7\+A#A '+(= =!> ? @   {{4 774;;'mmH-9Q<1$ila&78::<"T[[/ 	 !
 r&   c                 l    U R                  U5      u  p#[        R                  U[        R                  U0$ N)perform_inferencer   SCORES
OUTPUT_IMG)r!   rJ   countsimg_datas       r$   forwardCrowdCountingPipeline.forward   s0    11%8!!6:+@+@(KKr&   c                 N   US   nUS   nU R                  U5      u  n  nUR                  nU R                  XdU5      n[        R                  " USS9R
                  R                  5       R                  5       UR
                  R                  5       R                  5       S   S   4$ )Nr/   rM   )r(   r9   r8   )dimr   )r   rP   rH   rS   sumdatacpunumpy)r!   rn   r]   r^   eval_prediction_eval_patchs_shapes          r$   rd   'CrowdCountingPipeline.perform_inference   s    5ke $ 0 0 =A+11))*;*8: yy ! Duuw(;(;(?(?(A(G(G(I!(LQ(OP 	Pr&   inputsc                     U$ rc   r   )r!   ru   s     r$   postprocess!CrowdCountingPipeline.postprocess   s    r&   )r   )__name__
__module____qualname____firstlineno__r   r   r5   rH   r	   r   r   r`   ri   rS   no_gradrd   rw   __static_attributes____classcell__)r#   s   @r$   r   r      s    	'c 	'%N> $sCx. 8LT#s(^ LS#X L ]]_P P$sCx. T#s(^  r&   r   ) r+   typingr   r   rp   nprS   torchvision.transformsr-   PILr   modelscope.metainfor   #modelscope.models.cv.crowd_countingr   modelscope.outputsr   modelscope.pipelines.baser	   r
   modelscope.pipelines.builderr   modelscope.preprocessors.imager   modelscope.utils.constantr   modelscope.utils.loggerr   r   register_modulecrowd_countingr   r   r&   r$   <module>r      sr        +  ) B ) 5 2 4 + .	 	i&>&>@BH B@Br&   