o
    ߥi                     @   s   d dl Z d dlZd dlZd dlZd dlZdddZdd Zdd Z	d	d
 Z
dddZdddZdd Zdd Zdd Zdd Zdd ZdS )    N  c                 C   sn   t | \}}}t|||kr*||krt|| | |}}n|t|| | }}tj| ||ftjd} | S )N)interpolation)npshapeminintcv2resize
INTER_AREA)imagesizehwc r   V/home/ubuntu/.local/lib/python3.10/site-packages/modelscope/models/cv/cartoon/utils.pyresize_size   s   r   c                 C   s   t | \}}}|d dkr|d dkr| ||fS |d d d |d d d }}t ||dft jd }| |d |d |d d f< |||fS )N   r            )r   r   onesuint8)r   r   r   r   nhnwimg_newr   r   r   padTo16x   s   
"
r   c                 C   s   t | dd |}t | dd |}|d u s|d u r2td | dd jdd}| dd jdd}| d }| d	 }| d
 }|d |d g|d |d g|d |d g|d |d g|d |d gg}|S )N$   )   *   /   z8cannot find 5 points with find_puil, used mean instead.!r   )axis   0   6   r   )
find_pupilprintmean)	landmarksnp_imgeye_left	eye_rightnose
mouth_leftmouth_rightf5pr   r   r   get_f5p!   s   r0   c                 C   s  |j \}}}t| d d df  }t| d d df  }t| d d df  }t| d d df  }||ksN||ksN|dk sN|dk sN||ksN||krPd S |||||d d f }	t|	tj}
t|
}
| t	||g
ddg }tt|
|tjd}t|
ddtjtjB \}}d|d  | }d}g }g }t|j d D ]"}t|j d D ]}|||f dkr|| || |d7 }qq|dkr|  |  ||d  }||d  }n|j d d }|j d d }|| || fS )Nr   r      d   r   g     o@      ?)r   r   maxr   r   cvtColorCOLOR_BGR2GRAYequalizeHistr   arrayreshapefillConvexPoly
zeros_likeastypeint32	thresholdTHRESH_BINARYTHRESH_OTSUrangeappendsort)r(   r)   r   r   _xmaxxminymaxymineye_img_bgreye_imgn_markseye_maskretthreshcntxmymijr   r   r   r%   1   sJ   0




r%      c                 C   s   t dt| }t j| |d | }g }t|D ]A}t| ||  }|j\}}}	t	d|| }
t	d|| }|||| |
|
| d d f }|
t jd d }|| qt |S )Nr        _@r   )r   arangelenrandomshufflerA   r   imreadr   randintr<   float32rB   asarray)filename_list
batch_sizefineSizeidx
batch_datarR   r   r   r   r   rwrhr   r   r   
next_batchX   s   "
re   c                 C   sp   t j| }t jj|dd}t j|t j}|g d t jj|||gd}|dd d df }|d d }|S )	Nr   )channels)NNr   )imagesr   .r3   r1   )	tfio	read_filer   decode_imageconvert_image_dtyper\   	set_shaper	   )
image_path
IMAGE_SIZEr   r   r   r   
read_imagei   s   rq   c                 C   s   t | }|S )N)rq   )
photo_listphotor   r   r   	load_datav   s   rt   c                 C   sB   t jj| }|t| }|jtdd}||}|	d}|S )N   )num_parallel_callsr   )
ri   dataDatasetfrom_tensor_slicesrY   rW   maprt   batchprefetch)
image_listr_   datasetr   r   r   tf_data_loader{   s   

r   c           	      C   s   t j|st | t j||}dg| }t|D ]:}g ||< t|D ]&}|| | }| | d d | |< t| | dd| |< || | |  q%t	|| ||< qt
|}t||tj d S Nr   r   rU   r   )ospathexistsmakedirsjoinrA   r   cliprB   hstackvstackr   imwriter<   r   )	r   save_dirnamen	fused_dirfused_imagerR   rS   kr   r   r   write_batch_image   s   


r   c                 C   s   dg| }t |D ]:}g ||< t |D ]&}|| | }| | d d | |< t| | dd| |< || | |  qt|| ||< q	t|}|S r   )rA   r   r   rB   r   r   )r   r   r   rR   rS   r   r   r   r   grid_batch_image   s   

r   c                 C   sl   g }t | D ],\}}}|D ]$}t j|d }|dks(|dks(|dks(|dkr2|t j|| qq|S )Nr   z.pngz.jpgz.jpegz.JPG)r   walkr   splitextrB   r   )file_dirLrootdirsfilesfileextendr   r   r   all_file   s    r   )r   )rT   )r   rX   r   numpyr   
tensorflowri   r   r   r0   r%   re   rq   rt   r   r   r   r   r   r   r   r   <module>   s    

'
	