o
    ߥi                     @   s^   d dl Zd dlZd dlm  mZ d dlmZ ddlm	Z	 ddl
mZmZ dd Zd	d
 ZdS )    N)tqdm   )cfg   )HomoCalcHomoProjc                 C   s  | j }tttjdtjjtjj|dtjdtjj	tjj|dd
dddd }|t||gd }g }t|jd D ]O}	t|d ||	 }
tttjdtjj|dtjdtjj	|dd
ddd }t|
| dd
dd
dd}|| j|j 
ddd q@t|d}|dddddddf tjj d d |dddddddf< |dddddddf tjj	 d d |dddddddf< |
dd	dd}tj|||fd
dd}|
ddd	d}tj| |dd}|S )z
    @param frame current frame [N, 1, H, W]
    @param x_motion [N, 1, G_H, G_W]
    @param y_motion [N, 1, G_H, G_W]

    @return mesh warping according to given motion
    r   )devicer   r   Ng       @g      ?   bilinearT)modealign_corners)r   )r   torchstackmeshgridaranger   MODELWIDTHPIXELSHEIGHTpermute	unsqueezefloatcatrangeshaper   r   
contiguousviewappendFinterpolategrid_sample)framex_motiony_motion	cap_width
cap_heighttarget_device	src_grids	des_grids
projectionihomo	origin_kpprojected_kpgenerated_frame r0   l/home/ubuntu/.local/lib/python3.10/site-packages/modelscope/models/cv/video_stabilization/utils/WarpUtils.pymesh_warp_frame   sp   	
Dr2   c                 C   sz   t | d}t t |dd}t t |dd}t|t j}t|t j}t|t j}t|||||S )zt
    @param images List(image [1, 1, H, W])
    @param x_motion [G_H, G_W, N]
    @param y_motion [G_H, G_W, N]
    r   )r   r   r   r   )	npconcatenateexpand_dims	transposer   
from_numpyastypefloat32r2   )imagesr#   r$   r%   r&   framesr0   r0   r1   warpListImageE   s   r<   )numpyr3   r   torch.nn.functionalnn
functionalr   r   
DUT.configr   ProjectionUtilsr   r   r2   r<   r0   r0   r0   r1   <module>   s   8