o
    *j'                     @   s  d dl Z d dlZd dlZd dlZd dlZd dlmZmZmZm	Z	 d dl
Z
d dlZd dlZd dlmZ d dlmZ d dlmZ d dlmZ d dlmZmZ d dlmZ d d	lmZ d d
lmZ d dlm Z m!Z! d dl"m#Z# e# Z$dddZ%dgZ&ej'e!j(ej(dG dd deZ)dS )    N)AnyDictOptionalUnion)	Pipelines)warpprocess)DUTRAFTStabilizer)
OutputKeys)InputPipeline)	PIPELINES)	LoadImage)VideoReader)	ModelFileTasks)
get_loggerfile "{}" does not existc                 C   s   t | st|| d S N)ZospisfileFileNotFoundErrorformat)filenameZmsg_tmpl r   u/var/www/html/Deteccion_Ine/venv/lib/python3.10/site-packages/modelscope/pipelines/cv/video_stabilization_pipeline.pycheck_file_exist   s   
r   VideoStabilizationPipeline)module_namec                       s   e Zd ZdZ	ddeeef f fddZdede	ee
f fdd	Zde	ee
f de	ee
f fd
dZde	ee
f de	ee
f fddZ  ZS )r   aj    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))
    Nmodelc                    s&   t  jd||d| td d S )N)r   preprocessorz#load video stabilization model doner   )super__init__loggerinfo)selfr   r   kwargs	__class__r   r   r    7   s   z#VideoStabilizationPipeline.__init__inputreturnc                 C   s(   t |}|j}|j}|j}||||dS )N)vid_pathfpswidthheight)r   r*   r+   r,   )r#   r'   Zvideo_readerr*   r+   r,   r   r   r   
preprocess?   s   z%VideoStabilizationPipeline.preprocessc                    sd   | j |d }t|}|d    tj  fddt jd D  |d } |d |dS )	Nr)   outputc                    s   g | ]
}t  | d qS ))      r   )npZ	transpose).0idxZ
out_imagesr   r   
<listcomp>R   s    z6VideoStabilizationPipeline.forward.<locals>.<listcomp>r   base_crop_widthr*   )r.   r*   r6   )	r   Z_inference_forwardr   numpyZastyper1   Zuint8rangeshape)r#   r'   resultsr6   r   r4   r   forwardM   s   
z"VideoStabilizationPipeline.forwardinputsc                 K   s:  | dd }| dd}|d u rtjddj}|d d jdd	 \}}tjd
 }t|||d ||f}t|d D ]/\}	}
t	|d | d }t	|| | }|
|| || f }t
|||f}|| q;|  |rtddks|J d|d d d }d| d| }tj|dd tj|iS tj|iS )NZoutput_videois_cvt_h264Fz.mp4)suffixr.   r   Zmp4vr*   r6   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namer9   cv2ZVideoWriter_fourccZVideoWriter	enumerateintresizewritereleaseossystem
subprocesscallr	   ZOUTPUT_VIDEO)r#   r<   r$   Zoutput_video_pathr=   hwZfourccZvideo_writerr3   frameZhorizontal_borderZvertical_borderZ	new_frameZoutput_video_path_for_webZconvert_cmdr   r   r   postprocess^   s>   



z&VideoStabilizationPipeline.postprocessr   )__name__
__module____qualname____doc__r   r   strr    r
   r   r   r-   r;   rT   __classcell__r   r   r%   r   r   %   s    
"*)r   )*globmathrM   rO   rD   typingr   r   r   r   rG   r7   r1   ZtorchZmodelscope.metainfor   Z-modelscope.metrics.video_stabilization_metricr   Z:modelscope.models.cv.video_stabilization.DUTRAFTStabilizerr   Zmodelscope.outputsr	   Zmodelscope.pipelines.baser
   r   Zmodelscope.pipelines.builderr   Zmodelscope.preprocessorsr   Zmodelscope.preprocessors.cvr   Zmodelscope.utils.constantr   r   Zmodelscope.utils.loggerr   r!   r   __all__Zregister_moduleZvideo_stabilizationr   r   r   r   r   <module>   s4   
