
    9i'                     `   S SK r S SKrS SKrS SKrS SKrS SKJrJrJrJ	r	  S SK
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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#  \#" 5       r$SS jr%S/r&\RN                  " \!RP                  \RP                  S9 " S S\5      5       r)g)    N)AnyDictOptionalUnion)	Pipelines)warpprocess)DUTRAFTStabilizer)
OutputKeys)InputPipeline)	PIPELINES)	LoadImage)VideoReader)	ModelFileTasks)
get_loggerc                 l    [         R                  U 5      (       d  [        UR                  U 5      5      eg N)ospisfileFileNotFoundErrorformat)filenamemsg_tmpls     t/var/www/html/land-doc-ocr/venv/lib/python3.13/site-packages/modelscope/pipelines/cv/video_stabilization_pipeline.pycheck_file_existr      s*    ::h 9::      VideoStabilizationPipeline)module_namec                      ^  \ rS rSrSr SS\\\4   4U 4S jjjrS\	S\
\\4   4S jrS\
\\4   S\
\\4   4S jrS	\
\\4   S\
\\4   4S
 jrSrU =r$ )r   %   a@  Video Stabilization Pipeline.

Examples:

>>> import cv2
>>> from modelscope.outputs import OutputKeys
>>> from modelscope.pipelines import pipeline
>>> from modelscope.utils.constant import Tasks

>>> test_video = 'https://modelscope.oss-cn-beijing.aliyuncs.com/test/videos/video_stabilization_test_video.avi'
>>> video_stabilization = pipeline(Tasks.video_stabilization, model='damo/cv_dut-raft_video-stabilization_base')
>>> out_video_path = video_stabilization(test_video)[OutputKeys.OUTPUT_VIDEO]
>>> print('Pipeline: the output video path is {}'.format(out_video_path))
modelc                 T   > [         TU ]  " SXS.UD6  [        R                  S5        g )N)r"   preprocessorz#load video stabilization model done )super__init__loggerinfo)selfr"   r$   kwargs	__class__s       r   r'   #VideoStabilizationPipeline.__init__7   s'     	JuJ6J9:r   inputreturnc                 n    [        U5      nUR                  nUR                  nUR                  nUUUUS.$ )N)vid_pathfpswidthheight)r   r2   r3   r4   )r*   r.   video_readerr2   r3   r4   s         r   
preprocess%VideoStabilizationPipeline.preprocess?   sE    "5)""$$ 	
 	
r   c                 \   U R                   R                  US   5      n[        U5      nUS   nUR                  5       R	                  [
        R                  5      n[        UR                  S   5       Vs/ s H  n[
        R                  " X4   S5      PM     nnUS   nUUS   US.$ s  snf )Nr1   outputr   )      r   base_crop_widthr2   )r9   r2   r<   )
r"   _inference_forwardr   numpyastypenpuint8rangeshape	transpose)r*   r.   results
out_imagesidxr<   s         r   forward"VideoStabilizationPipeline.forwardM   s    **//j0ABg&X&
%%'..rxx8
 Z--a01
1 LL)41 	 
 ""34 !<.
 	

s   6#B)inputsc                    UR                  SS 5      nUR                  SS5      nUc  [        R                  " SS9R                  nUS   S   R                  SS	 u  pV[
        R                  " S
6 n[
        R                  " X7US   Xe45      n[        US   5       H]  u  p[        US   U-  S-  5      n[        X-  U-  5      nXU* 2X* 24   n[
        R                  " XU45      nUR                  U5        M_     UR                  5         U(       aX  [        R                  " S5      S:X  d   S5       eUS S S-   nSU SU 3n[        R                   " USS9  ["        R$                  U0$ ["        R$                  U0$ )Noutput_videois_cvt_h264Fz.mp4)suffixr9   r   mp4vr2   r<   i   zffmpeg -versionzaffmpeg is not installed correctly, please refer to https://trac.ffmpeg.org/wiki/CompilationGuide.z_web.mp4z
ffmpeg -i z -vcodec h264 -crf 5 T)shell)gettempfileNamedTemporaryFilenamerC   cv2VideoWriter_fourccVideoWriter	enumerateintresizewritereleaseossystem
subprocesscallr
   OUTPUT_VIDEO)r*   rJ   r+   output_video_pathrM   hwfourccvideo_writerrG   framehorizontal_bordervertical_border	new_frameoutput_video_path_for_webconvert_cmds                   r   postprocess&VideoStabilizationPipeline.postprocess^   s   "JJ~t<jj6$ ( ; ;6 J O Oh"((B/''0'8'-e}qf>#F8$45JC #F+<$=$AD$H I!"3"7!";<O.>>/0BBC DI

9!f5Iy) 6 	99! xwx  ):#2(>(K%&'8&99NOhNijKOOKt4++-FGG++->??r   r%   r   )__name__
__module____qualname____firstlineno____doc__r   r	   strr'   r   r   r   r6   rH   rp   __static_attributes____classcell__)r,   s   @r   r   r   %   s    " #;/45; ;
 
$sCx. 

T#s(^ 
S#X 
"@$sCx. @tCH~ @ @r   )zfile "{}" does not exist)*globmathr`   rb   rU   typingr   r   r   r   rX   r>   r@   torchmodelscope.metainfor   -modelscope.metrics.video_stabilization_metricr   :modelscope.models.cv.video_stabilization.DUTRAFTStabilizerr	   modelscope.outputsr
   modelscope.pipelines.baser   r   modelscope.pipelines.builderr   modelscope.preprocessorsr   modelscope.preprocessors.cvr   modelscope.utils.constantr   r   modelscope.utils.loggerr   r(   r   __all__register_modulevideo_stabilizationr   r%   r   r   <module>r      s      	   - - 
   ) E ) 5 2 . 3 6 .	;
 (
( 	9+H+HJS@ S@JS@r   