o
    yqi;                     @   sH  d dl Z 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
 ddlmZmZ edr0d dlZedr8d dlZedr@d dlZg dZG d	d
 d
e jZG dd deZG dd deZG dd deZG dd deZdd ZG dd deZG dd deZG dd deZG dd deZG dd deZG dd  d eZ edG d!d" d"e Z!G d#d$ d$e Z"eddG d%d& d&eZ#G d'd( d(eZ$G d)d* d*eZ%edG d+d, d,e%Z&G d-d. d.e%Z'G d/d0 d0eZ(G d1d2 d2eZ)G d3d4 d4e)Z*G d5d6 d6eZ+G d7d8 d8eZ,G d9d: d:eZ-edG d;d< d<e-Z.dS )=    N)ImageImageOps   )class_requires_depsis_dep_availablezopencv-contrib-python	pypdfium2	soundfile)
ReaderTypeImageReaderVideoReader	CSVReader	PDFReader
YAMLReaderAudioReaderc                   @   s4   e Zd Zd ZdZdZdZdZdZdZ	dZ
dZd	Zd
S )r	            r            	   
   N)__name__
__module____qualname____doc__IMAGE
GENERATIVEZPOINT_CLOUDJSONTSPDFYAMLMARKDOWNTXT r$   r$   i/home/app/PaddleOCR-VL/.venv_paddleocr/lib/python3.10/site-packages/paddlex/inference/utils/io/readers.pyr	   -   s    r	   c                       sR   e Zd Zd Z fddZdd ZdddZdd	 Zd
d Zdd Z	dd Z
  ZS )_BaseReaderc                    s8   t    t|dkr|  }|| _|| _|  | _d S )Nr   )super__init__lenget_default_backend_argsbk_typebk_argsget_backend_backendselfbackendr,   	__class__r$   r%   r(   >   s   
z_BaseReader.__init__c                 C      t zread file from pathNotImplementedErrorr0   in_pathr$   r$   r%   readF      z_BaseReader.readNc                 C   s   |du r| j }| | j|S )zget the backendN)r,   _init_backendr+   r0   r,   r$   r$   r%   r-   J   s   z_BaseReader.get_backendc                 K   s   || _ || _|  | _d S N)r+   r,   r-   r.   r/   r$   r$   r%   set_backendP   s   z_BaseReader.set_backendc                 C   r4   )init backendr6   r0   r+   r,   r$   r$   r%   r<   U   r;   z_BaseReader._init_backendc                 C   r4   zget typer6   r0   r$   r$   r%   get_typeY   r;   z_BaseReader.get_typec                 C   s   i S )zget default backend argumentsr$   rC   r$   r$   r%   r*   ]   r;   z$_BaseReader.get_default_backend_argsr>   )r   r   r   r   r(   r:   r-   r?   r<   rD   r*   __classcell__r$   r$   r2   r%   r&   ;   s    
r&   c                       :   e Zd Zd Zd
 fdd	Zdd Zdd Zdd	 Z  ZS )r   r   c                       t  j|fi | d S r>   r'   r(   r/   r2   r$   r%   r(   e      zPDFReader.__init__c                 c   s    | j t|E d H  d S r>   r.   	read_filestrr8   r$   r$   r%   r:   h   s   zPDFReader.readc                 C   s   t di |S )Nr$   )PDFReaderBackendrA   r$   r$   r%   r<   k      zPDFReader._init_backendc                 C      t jS r>   )r	   r    rC   r$   r$   r%   rD   n      zPDFReader.get_type)r   	r   r   r   r   r(   r:   r<   rD   rE   r$   r$   r2   r%   r   b   s    r   c                       rF   )r
   opencvc                       t  jdd|i| d S Nr1   r$   rH   r/   r2   r$   r%   r(   u      zImageReader.__init__c                 C      | j t|}|S zread the image file from pathrJ   r0   r9   Zarrr$   r$   r%   r:   x      zImageReader.readc                 C   s<   |dkrt di |S |dks|dkrtdi |S td)r@   rR   ZpilZpillowUnsupported backend typeNr$   )OpenCVImageReaderBackendPILImageReaderBackend
ValueErrorrA   r$   r$   r%   r<   }   s
   zImageReader._init_backendc                 C   rO   rB   )r	   r   rC   r$   r$   r%   rD         zImageReader.get_type)rR   rQ   r$   r$   r2   r%   r
   r   s    	r
   c                   @      e Zd Zd Zdd ZdS )_GenerativeReaderc                 C   rO   rB   )r	   r   rC   r$   r$   r%   rD      r^   z_GenerativeReader.get_typeN)r   r   r   r   rD   r$   r$   r$   r%   r`          r`   c                 C   s
   t | tS )is_generative_reader)
isinstancer`   )readerr$   r$   r%   rb         
rb   c                       sB   e Zd Zd Z				d fdd	Zdd Zd	d
 Zdd Z  ZS )r   rR   r   NTc                    s2   t  jdd|i| || _|| _|| _d| _d S )Nr1   r   r$   )r'   r(   st_frame_idmax_num_frames
auto_close_fps)r0   r1   rf   rg   rh   r,   r2   r$   r%   r(      s
   
zVideoReader.__init__c                 c   sZ    | j | j | j t|}| jdurt|| j}|E dH  | j	r+| j 
  dS dS )zread vide file from pathN)r.   set_posrf   rK   rL   rg   	itertoolsisliceZ
num_framesrh   close)r0   r9   genr$   r$   r%   r:      s   

zVideoReader.readc                 C   
   | j  S )zget fps)r.   get_fpsrC   r$   r$   r%   rp      re   zVideoReader.get_fpsc                 C   s4   |dkrt di |S |dkrtdi |S td)r@   rR   decordrZ   Nr$   )OpenCVVideoReaderBackendDecordVideoReaderBackendr]   rA   r$   r$   r%   r<      s
   zVideoReader._init_backend)rR   r   NT)	r   r   r   r   r(   r:   rp   r<   rE   r$   r$   r2   r%   r      s    
r   c                       6   e Zd Zd
 fdd	Zdd Zdd Zdd	 Z  ZS )r   PyYAMLc                    rG   r>   rH   r/   r2   r$   r%   r(      rI   zYAMLReader.__init__c                 C      | j t|S r>   rJ   r8   r$   r$   r%   r:         zYAMLReader.readc                 C      |dkrt di |S td)Nru   rZ   r$   )YAMLReaderBackendr]   rA   r$   r$   r%   r<         zYAMLReader._init_backendc                 C   rO   r>   )r	   r!   rC   r$   r$   r%   rD      rP   zYAMLReader.get_type)ru   r   r   r   r(   r:   r<   rD   rE   r$   r$   r2   r%   r      
    r   c                       rt   )MarkDownReaderMarkdownc                    rG   r>   rH   r/   r2   r$   r%   r(      rI   zMarkDownReader.__init__c                 C   rv   r>   rJ   r8   r$   r$   r%   r:      rw   zMarkDownReader.readc                 C   rx   )Nr~   rZ   r$   )TXTReaderBackendr]   rA   r$   r$   r%   r<      rz   zMarkDownReader._init_backendc                 C   rO   r>   )r	   r"   rC   r$   r$   r%   rD      rP   zMarkDownReader.get_type)r~   r{   r$   r$   r2   r%   r}      r|   r}   c                       rF   )	TXTReadertxtc                    rG   r>   rH   r/   r2   r$   r%   r(      rI   zTXTReader.__init__c                 C   rv   r>   rJ   r8   r$   r$   r%   r:      rw   zTXTReader.readc                 C   s   |dkrt di |S d S )Nr   r$   )r   rA   r$   r$   r%   r<      s   zTXTReader._init_backendc                 C   rO   r>   )r	   r#   rC   r$   r$   r%   rD      rP   zTXTReader.get_type)r   rQ   r$   r$   r2   r%   r      s    r   c                   @   r_   )_BaseReaderBackendc                 C   r4   r5   r6   r8   r$   r$   r%   rK      r;   z_BaseReaderBackend.read_fileNr   r   r   r   rK   r$   r$   r$   r%   r      ra   r   c                   @      e Zd Zd ZdS )_ImageReaderBackendNr   r   r   r   r$   r$   r$   r%   r          r   c                       s*   e Zd Zd Zd fdd	Zdd Z  ZS )r[   Nc                    s"   t    |d u rtj}|| _d S r>   )r'   r(   cv2ZIMREAD_COLORflags)r0   r   r2   r$   r%   r(     s   

z!OpenCVImageReaderBackend.__init__c                 C   sL   t |d}t| tj}W d   n1 sw   Y  tj|| jdS )#read image file from path by OpenCVrbN)r   )opennpZ
frombufferr:   Zuint8r   Zimdecoder   )r0   r9   fZ	img_arrayr$   r$   r%   rK     s   z"OpenCVImageReaderBackend.read_filer>   r   r   r   r   r(   rK   rE   r$   r$   r2   r%   r[     s    r[   c                       (   e Zd Zd Z fddZdd Z  ZS )r\   c                       t    d S r>   rH   rC   r2   r$   r%   r(     rN   zPILImageReaderBackend.__init__c                 C   s   t t|S )z read image file from path by PIL)r   Zexif_transposer   r   r8   r$   r$   r%   rK     s   zPILImageReaderBackend.read_filer   r$   r$   r2   r%   r\         r\   c                       s&   e Zd Zd fdd	Zdd Z  ZS )rM   r          @c                    s   t    || _|| _d S r>   )r'   r(   	_rotation_scale)r0   rotateZzoomr2   r$   r%   r(   !  s   

zPDFReaderBackend.__init__c                 c   sH    t |}z|D ]}|j| j| jd V  q	W |  d S |  w )N)scaleZrotation)pdfiumZPdfDocumentrenderr   r   Zto_numpyrm   )r0   r9   docpager$   r$   r%   rK   &  s   
zPDFReaderBackend.read_file)r   r   )r   r   r   r(   rK   rE   r$   r$   r2   r%   rM     s    rM   c                   @   r_   )r   c                 C   s8   t |d}| }W d    |S 1 sw   Y  |S )Nr)r   r:   )r0   r9   r   datar$   r$   r%   rK   2  s   

zTXTReaderBackend.read_fileNr   r$   r$   r$   r%   r   /  ra   r   c                   @   s    e Zd Zd Zdd Zdd ZdS )_VideoReaderBackendc                 C   r4   )zset posr6   r0   posr$   r$   r%   rj   ;  r;   z_VideoReaderBackend.set_posc                 C   r4   )zclose ior6   rC   r$   r$   r%   rm   ?  r;   z_VideoReaderBackend.closeN)r   r   r   r   rj   rm   r$   r$   r$   r%   r   8  s    r   c                       s`   e Zd Zd Z fddZdd Zdd Zdd Zd	d
 Zdd Z	dd Z
dd Zdd Z  ZS )rr   c                    s4   t    || _|dd | _d | _d| _d | _d S )Nnum_segr   )r'   r(   cap_init_argsgetr   _cap_pos_max_num_framesr=   r2   r$   r%   r(   H  s   

z!OpenCVVideoReaderBackend.__init__c                 C   s   | j tjS r>   )r   r   r   ZCAP_PROP_FPSrC   r$   r$   r%   rp   P  rN   z OpenCVVideoReaderBackend.get_fpsc                 C   s<   | j dur	|   | || _ | jdur|   | | j S )read video file from pathN)r   _cap_release	_cap_openr   _cap_set_pos_read_framesr8   r$   r$   r%   rK   S  s   

z"OpenCVVideoReaderBackend.read_filec                 c   s    | j r6g }	 | \}}|sn%g }t|dkr%t| j D ]}|| q|| |d | V  qn	 | \}}|s@n|V  q7|   dS )zread framesTr   N)r   r:   r)   rangeappendpopcopyr   )r0   capqueueretframeir$   r$   r%   r   \  s.   


z%OpenCVVideoReaderBackend._read_framesc                 C   s^   | j dd  | j dd  | j dd  tj|fi | j | _| j s,td| | jS )Nr   seg_lensample_typezFailed to open )r   r   r   ZVideoCapturer   ZisOpenedRuntimeError)r0   Z
video_pathr$   r$   r%   r   u  s   
z"OpenCVVideoReaderBackend._cap_openc                 C   s   | j   d S r>   )r   releaserC   r$   r$   r%   r   ~  rN   z%OpenCVVideoReaderBackend._cap_releasec                 C   s   | j tj| j d S r>   )r   setr   ZCAP_PROP_POS_FRAMESr   rC   r$   r$   r%   r     s   z%OpenCVVideoReaderBackend._cap_set_posc                 C   
   || _ d S r>   r   r   r$   r$   r%   rj        
z OpenCVVideoReaderBackend.set_posc                 C   s    | j d ur|   d | _ d S d S r>   )r   r   rC   r$   r$   r%   rm     s   

zOpenCVVideoReaderBackend.close)r   r   r   r   r(   rp   rK   r   r   r   r   rj   rm   rE   r$   r$   r2   r%   rr   D  s    		rr   c                       sH   e Zd Zd Z fddZdd Zdd Zdd Zd	d
 Zdd Z	  Z
S )rs   c                    s   t    || _d | _d| _d | _|dd| _|dd| _|dd| _	d| _
d| _z
dd l}|| _W d S  t yB   tdw )	Nr   r   r   r   r   r   TzPlease install `decord` manually, otherwise, the related model cannot work. It can be automatically installed only on `x86_64`. Refers: `https://github.com/dmlc/decord`.)r'   r(   r   r   r   r   r   r   r   r   
valid_moderi   rq   decord_moduleModuleNotFoundError	Exception)r0   r,   rq   r2   r$   r%   r(     s$   
z!DecordVideoReaderBackend.__init__c                 C   r   r>   r   r   r$   r$   r%   rj     r   z DecordVideoReaderBackend.set_posc                 C   s  g }t || j }t| jD ]]}d}| js8|| jkr*td|| j }||| 7 }n-|dkr5||| 7 }n"|}n|| jkrJ|d d }||| 7 }n|dkrU||| 7 }n|}t||| j D ]}|t ||  q_q||}|	 }	g }
t|	j
d D ]}|	| }|
| q~|
S )Nr   r   r   )intr   r   r   r   randomrandintr   Z	get_batchZasnumpyshape)r0   Z
frames_lenZvideo_objectZ
frames_idxZaverage_durr   idxZjjZframes_selectZ	np_framesZimgsZimgbufr$   r$   r%   sample  s6   


zDecordVideoReaderBackend.samplec                 C   ro   r>   )r   Zget_avg_fpsrC   r$   r$   r%   rp     r   z DecordVideoReaderBackend.get_fpsc                 C   s:   | j || _t| j}| jdkr| || j}|S | jS )r   uniform)r   r   r   r)   r   r   )r0   r9   Z	frame_lenZsample_videor$   r$   r%   rK     s   

z"DecordVideoReaderBackend.read_filec                 C   s   d S r>   r$   rC   r$   r$   r%   rm     s   zDecordVideoReaderBackend.close)r   r   r   r   r(   rj   r   rp   rK   rm   rE   r$   r$   r2   r%   rs     s     
rs   c                       rF   )r   pandasc                    rS   rT   rH   r/   r2   r$   r%   r(     rU   zCSVReader.__init__c                 C   rV   rW   rJ   rX   r$   r$   r%   r:     rY   zCSVReader.readc                 C      |dkrt di |S td)r@   r   rZ   Nr$   )PandasCSVReaderBackendr]   rA   r$   r$   r%   r<        zCSVReader._init_backendc                 C   rO   rB   )r	   r   rC   r$   r$   r%   rD     r^   zCSVReader.get_type)r   rQ   r$   r$   r2   r%   r     s    r   c                   @   r   )_CSVReaderBackendNr   r$   r$   r$   r%   r     r   r   c                       r   )r   c                    r   r>   rH   rC   r2   r$   r%   r(     rN   zPandasCSVReaderBackend.__init__c                 C   s
   t |S )r   )pdZread_csvr8   r$   r$   r%   rK     re   z PandasCSVReaderBackend.read_filer   r$   r$   r2   r%   r     r   r   c                   @   s   e Zd Zdd ZdS )ry   c                 K   sL   t |dfddi|}tj|tjd}W d    |S 1 sw   Y  |S )Nr   encodingzutf-8)Loader)r   yamlloadZ
FullLoader)r0   r9   kwargsZ	yaml_filer   r$   r$   r%   rK     s   
zYAMLReaderBackend.read_fileN)r   r   r   rK   r$   r$   r$   r%   ry      s    ry   c                       s.   e Zd Zd fdd	Zdd Zdd Z  ZS )	r   wavc                    s   t  jdddi| d S )Nr1   r   r$   rH   r/   r2   r$   r%   r(   	  rU   zAudioReader.__init__c                 C   r   )r@   r   rZ   Nr$   )WAVReaderBackendr]   rA   r$   r$   r%   r<     r   zAudioReader._init_backendc                 C   s   | j t|\}}||fS r>   rJ   r0   r9   ZaudioZaudio_sample_rater$   r$   r%   r:     s   zAudioReader.read)r   )r   r   r   r(   r<   r:   rE   r$   r$   r2   r%   r     s    r   c                   @   r   )_AudioReaderBackendNr   r$   r$   r$   r%   r     r   r   c                       s(   e Zd ZdZ fddZdd Z  ZS )r   r   c                    r   r>   rH   rC   r2   r$   r%   r(      rN   zWAVReaderBackend.__init__c                 C   s   t j|ddd\}}||fS )zread wav file from pathZfloat32T)ZdtypeZ	always_2d)r   r:   r   r$   r$   r%   rK   #  s   
zWAVReaderBackend.read_filer   r$   r$   r2   r%   r     s    r   )/enumrk   r   numpyr   r   r   r   ZPILr   r   Z
utils.depsr   r   r   r   r   r   __all__Enumr	   objectr&   r   r
   r`   rb   r   r   r}   r   r   r   r[   r\   rM   r   r   rr   rs   r   r   r   ry   r   r   r   r$   r$   r$   r%   <module>   sZ   ')	HM