o
    yqiMG                     @   s  d dl Z d dlZd dlZd dlmZmZ d dlmZ d dlZ	e	j
  d dlZd dlZde jd< 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 g dZg 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Z e  Z!dS )    N)ABCabstractmethod)PathcriticalZAISTUDIO_LOG)snapshot_download   )logging)	CACHE_DIR)download_and_extract)MODEL_SOURCE(   ZResNet18ZResNet18_vdZResNet34ZResNet34_vdZResNet50ZResNet50_vdZ	ResNet101ZResNet101_vdZ	ResNet152ZResNet152_vdZResNet200_vdPaddleOCR-VLzPP-LCNet_x0_25PP-LCNet_x0_25_textline_orizPP-LCNet_x0_35zPP-LCNet_x0_5zPP-LCNet_x0_75zPP-LCNet_x1_0PP-LCNet_x1_0_doc_oriPP-LCNet_x1_0_textline_orizPP-LCNet_x1_5zPP-LCNet_x2_5zPP-LCNet_x2_0zPP-LCNetV2_smallzPP-LCNetV2_basezPP-LCNetV2_largeZMobileNetV3_large_x0_35ZMobileNetV3_large_x0_5ZMobileNetV3_large_x0_75ZMobileNetV3_large_x1_0ZMobileNetV3_large_x1_25ZMobileNetV3_small_x0_35ZMobileNetV3_small_x0_5ZMobileNetV3_small_x0_75ZMobileNetV3_small_x1_0ZMobileNetV3_small_x1_25ZConvNeXt_tinyZConvNeXt_smallZConvNeXt_base_224ZConvNeXt_base_384ZConvNeXt_large_224ZConvNeXt_large_384ZMobileNetV2_x0_25ZMobileNetV2_x0_5ZMobileNetV2_x1_0ZMobileNetV2_x1_5ZMobileNetV2_x2_0ZMobileNetV1_x0_25ZMobileNetV1_x0_5ZMobileNetV1_x0_75ZMobileNetV1_x1_0Z'SwinTransformer_tiny_patch4_window7_224Z(SwinTransformer_small_patch4_window7_224Z'SwinTransformer_base_patch4_window7_224Z(SwinTransformer_base_patch4_window12_384Z(SwinTransformer_large_patch4_window7_224Z)SwinTransformer_large_patch4_window12_384zPP-HGNet_tinyzPP-HGNet_smallzPP-HGNet_basezPP-HGNetV2-B0zPP-HGNetV2-B1zPP-HGNetV2-B2zPP-HGNetV2-B3zPP-HGNetV2-B4zPP-HGNetV2-B5zPP-HGNetV2-B6zFasterNet-LzFasterNet-MzFasterNet-SzFasterNet-T0zFasterNet-T1zFasterNet-T2z
StarNet-S1z
StarNet-S2z
StarNet-S3z
StarNet-S4ZMobileNetV4_conv_smallZMobileNetV4_conv_mediumZMobileNetV4_conv_largeZMobileNetV4_hybrid_mediumZMobileNetV4_hybrid_largeZCLIP_vit_base_patch16_224ZCLIP_vit_large_patch14_224zPP-LCNet_x1_0_MLzPP-HGNetV2-B0_MLzPP-HGNetV2-B4_MLzPP-HGNetV2-B6_MLZResNet50_MLZCLIP_vit_base_patch16_448_MLzPP-YOLOE_plus-XzPP-YOLOE_plus-LzPP-YOLOE_plus-MzPP-YOLOE_plus-Sz	RT-DETR-Lz	RT-DETR-Hz	RT-DETR-XzYOLOv3-DarkNet53zYOLOv3-MobileNetV3zYOLOv3-ResNet50_vd_DCNzYOLOX-LzYOLOX-MzYOLOX-NzYOLOX-SzYOLOX-TzYOLOX-XzRT-DETR-R18zRT-DETR-R50z	PicoDet-Sz	PicoDet-LzDeeplabv3-R50zDeeplabv3-R101zDeeplabv3_Plus-R50zDeeplabv3_Plus-R101zPP-ShiTuV2_reczPP-ShiTuV2_rec_CLIP_vit_basezPP-ShiTuV2_rec_CLIP_vit_largezPP-LiteSeg-TzPP-LiteSeg-BzOCRNet_HRNet-W48zOCRNet_HRNet-W18zSegFormer-B0zSegFormer-B1zSegFormer-B2zSegFormer-B3zSegFormer-B4zSegFormer-B5ZSeaFormer_tinyZSeaFormer_smallZSeaFormer_baseZSeaFormer_largezMask-RT-DETR-HzMask-RT-DETR-LPP-OCRv4_server_reczMask-RT-DETR-SzMask-RT-DETR-MzMask-RT-DETR-XZSOLOv2zMaskRCNN-ResNet50zMaskRCNN-ResNet50-FPNzMaskRCNN-ResNet50-vd-FPNzMaskRCNN-ResNet101-FPNzMaskRCNN-ResNet101-vd-FPNzMaskRCNN-ResNeXt101-vd-FPNzCascade-MaskRCNN-ResNet50-FPNz'Cascade-MaskRCNN-ResNet50-vd-SSLDv2-FPNzPP-YOLOE_seg-SPP-OCRv3_mobile_recen_PP-OCRv3_mobile_reckorean_PP-OCRv3_mobile_recjapan_PP-OCRv3_mobile_recchinese_cht_PP-OCRv3_mobile_recte_PP-OCRv3_mobile_recka_PP-OCRv3_mobile_recta_PP-OCRv3_mobile_reclatin_PP-OCRv3_mobile_recarabic_PP-OCRv3_mobile_reccyrillic_PP-OCRv3_mobile_recdevanagari_PP-OCRv3_mobile_recen_PP-OCRv4_mobile_recPP-OCRv4_server_rec_docPP-OCRv4_mobile_recPP-OCRv4_server_detPP-OCRv4_mobile_detPP-OCRv3_server_detPP-OCRv3_mobile_detPP-OCRv4_server_seal_detPP-OCRv4_mobile_seal_detch_RepSVTR_recch_SVTRv2_recz"PP-LCNet_x1_0_pedestrian_attributezPP-LCNet_x1_0_vehicle_attributePicoDet_layout_1xPicoDet_layout_1x_tableSLANetSLANet_plusLaTeX_OCR_rec	UniMERNetPP-FormulaNet-SPP-FormulaNet-LPP-FormulaNet_plus-SPP-FormulaNet_plus-MPP-FormulaNet_plus-LzFasterRCNN-ResNet34-FPNzFasterRCNN-ResNet50zFasterRCNN-ResNet50-FPNzFasterRCNN-ResNet50-vd-FPNz!FasterRCNN-ResNet50-vd-SSLDv2-FPNzFasterRCNN-ResNet101zFasterRCNN-ResNet101-FPNzFasterRCNN-ResNeXt101-vd-FPNzFasterRCNN-Swin-Tiny-FPNzCascade-FasterRCNN-ResNet50-FPNz)Cascade-FasterRCNN-ResNet50-vd-SSLDv2-FPNUVDocZDLinearZNLinearZRLinearZNonstationaryZTimesNetZTiDEZPatchTSTZ
DLinear_adZAutoEncoder_adZNonstationary_adZPatchTST_adZTimesNet_adZTimesNet_clsZSTFPMzFCOS-ResNet50zDETR-R50zPP-YOLOE-L_vehiclezPP-YOLOE-S_vehiclezPP-ShiTuV2_detzPP-YOLOE-S_humanzPP-YOLOE-L_humanz	PicoDet-Mz
PicoDet-XSzPP-YOLOE_plus_SOD-LzPP-YOLOE_plus_SOD-SzPP-YOLOE_plus_SOD-largesize-LzCenterNet-DLA-34zCenterNet-ResNet50PicoDet-S_layout_3clsPicoDet-S_layout_17clsPicoDet-L_layout_3clsPicoDet-L_layout_17clsRT-DETR-H_layout_3clsRT-DETR-H_layout_17clsZPicoDet_LCNet_x2_5_faceZ	BlazeFacezBlazeFace-FPN-SSHzPP-YOLOE_plus-S_faceZMobileFaceNetZResNet50_facezPP-YOLOE-R-LzCo-Deformable-DETR-R50zCo-Deformable-DETR-Swin-TzCo-DINO-R50zCo-DINO-Swin-Lwhisper_largewhisper_basewhisper_mediumwhisper_smallwhisper_tinyzPP-TSM-R50_8frames_uniformz PP-TSMv2-LCNetV2_8frames_uniformz!PP-TSMv2-LCNetV2_16frames_uniformZMaskFormer_tinyZMaskFormer_smallPP-LCNet_x1_0_table_clsSLANeXt_wiredSLANeXt_wirelessRT-DETR-L_wired_table_cell_det!RT-DETR-L_wireless_table_cell_detZYOWOzPP-TinyPose_128x96zPP-TinyPose_256x192zGroundingDINO-Tz	SAM-H_boxzSAM-H_pointPP-DocLayoutV2PP-DocLayout-LPP-DocLayout-MPP-DocLayout-SPP-DocLayout_plus-LPP-DocBlockLayoutZ	BEVFusionzYOLO-Worldv2-LPP-DocBee-2BPP-DocBee-7BPP-Chart2TablePP-OCRv5_server_detPP-OCRv5_mobile_detPP-OCRv5_server_recPP-OCRv5_mobile_receslav_PP-OCRv5_mobile_recPP-DocBee2-3Blatin_PP-OCRv5_mobile_reckorean_PP-OCRv5_mobile_recth_PP-OCRv5_mobile_recel_PP-OCRv5_mobile_recen_PP-OCRv5_mobile_recarabic_PP-OCRv5_mobile_recte_PP-OCRv5_mobile_recta_PP-OCRv5_mobile_recdevanagari_PP-OCRv5_mobile_reccyrillic_PP-OCRv5_mobile_rec)Mr   r   r&   r'   r   r   r   r   rQ   r   r   r   rT   r,   r   rS   rW   rU   rV   r   r(   r)   r7   r6   r5   r4   rR   rL   rJ   rK   rI   rD   rE   rF   rH   rG   rD   r/   r2   r1   r0   r.   r   r   r?   r   r#   r   r"   r!   r   r%   r    r   r   r$   rN   rP   rM   rO   r9   r8   rB   rC   r*   r+   r@   rA   r   r   r-   r3   rX   rY   rZ   r[   r\   c                   @   sD   e Zd ZdZg ZdZdZdd Zdd Ze	dd	 Z
ed
d ZdS )_BaseModelHoster N   c                 C   s
   || _ d S N)	_save_dir)selfsave_dir rd   n/home/app/PaddleOCR-VL/.venv_paddleocr/lib/python3.10/site-packages/paddlex/inference/utils/official_models.py__init__     
z_BaseModelHoster.__init__c                 C   sr   || j v sJ d| d| jj d| j|  }td| d| d | || td| d| j d	 |S )
Nz
The model z is not supported on hosting !zUsing official model (zB), the model files will be automatically downloaded and saved in ``.`z4` model files has been download from model source: `z`!)	
model_list	__class____name__ra   r   info	_downloaddebugalias)rb   
model_name	model_dirrd   rd   re   	get_model  s   z_BaseModelHoster.get_modelc                 C   s   t r`   )NotImplementedErrorrb   rd   rd   re   ro     s   z_BaseModelHoster._downloadc                 C   sV   | j d u rdS ztj| j | jd}|jdkW S  ty*   td| j d Y dS w )NT)timeoutzThe model hosting platform(z) is unreachable!F)	healthcheck_urlrequestshead_healthcheck_timeoutok	Exceptionr   rp   rm   )clsresponserd   rd   re   is_available  s   
z_BaseModelHoster.is_available)rm   
__module____qualname__rq   rk   rx   r{   rf   rt   r   ro   classmethodr   rd   rd   rd   re   r]     s    
r]   c                   @   s8   e Zd ZeZdZdZdZdZddddd	d
Z	dd Z
dS )_BosModelHosterZbosz*https://paddle-model-ecology.bj.bcebos.comzpaddle3.0.0zKhttps://paddle-model-ecology.bj.bcebos.com/paddlex/official_inference_modelzwhisper_large.tarzwhisper_base.tarzwhisper_medium.tarzwhisper_small.tarzwhisper_tiny.tar)r:   r;   r<   r=   r>   c                 C   sN   || j v r| j | }n| d}| j d| j d| }t||j|dd d S )Nz
_infer.tar/F)	overwrite)special_model_fnbase_urlversionr
   parent)rb   rr   rc   fnurlrd   rd   re   ro     s
   

z_BosModelHoster._downloadN)rm   r   r   
ALL_MODELSrk   rq   rx   r   r   r   ro   rd   rd   rd   re   r     s    r   c                   @       e Zd ZeZdZdZdd ZdS )_HuggingFaceModelHosterZhuggingfacezhttps://huggingface.coc                    t    fdd}t j|r|| d S t }t j|d}|| t|| W d    d S 1 s3w   Y  d S )Nc                       t jd  | d d S NPaddlePaddle/Zrepo_id	local_dir)hf_hubr   r   rr   rd   re   _clone     

z1_HuggingFaceModelHoster._download.<locals>._clonetemp_dirospathexiststempfileTemporaryDirectoryjoinshutilmoverb   rr   rc   r   tdr   rd   r   re   ro        
"z!_HuggingFaceModelHoster._downloadNrm   r   r   
OCR_MODELSrk   rq   rx   ro   rd   rd   rd   re   r     
    r   c                   @   r   )_ModelScopeModelHoster
modelscopezhttps://modelscope.cnc                    r   )Nc                    r   r   )r   r   r   r   rd   re   r     r   z0_ModelScopeModelHoster._download.<locals>._cloner   r   r   rd   r   re   ro     r   z _ModelScopeModelHoster._downloadNr   rd   rd   rd   re   r     r   r   c                   @   r   )_AIStudioModelHosterZaistudiozhttps://aistudio.baidu.comc                    r   )Nc                    s4    dkrt d  | d d S t d  | d d S )Nr   r   r   zPaddleX/)aistudio_downloadr   r   rd   re   r     s
   

z._AIStudioModelHoster._download.<locals>._cloner   r   r   rd   r   re   ro     s   
"z_AIStudioModelHoster._downloadNr   rd   rd   rd   re   r     r   r   c                   @   sN   e Zd ZeZeed ZdddZdd Z	dd	 Z
d
d Zdd Zdd ZdS )_ModelManagerofficial_modelsreturnNc                 C   s   |   | _d S r`   )_build_hosters_hostersrv   rd   rd   re   rf   !  s   z_ModelManager.__init__c                 C   s   g }t tttfD ]!}|jtkr| r|d|| j q| r)|	|| j qt
|dkrFtdt j dtj dtj dtj d	 |S )Nr   zuNo model hoster is available! Please check your network connection to one of the following model hosts: HuggingFace (z), ModelScope (z), AIStudio (z), or BOS (z,). Otherwise, only local models can be used.)r   r   r   r   rq   r   r   insertra   appendlenr   warningrx   )rb   hostersZ
hoster_clsrd   rd   re   r   $  s$   
$z_ModelManager._build_hostersc                 C   s   |dkrd}| j |  }tj|rtd| d nt| jdkr.d}t| t	|| 
| j|}|dkrG|d }| rG| rG|S |S )NzPaddleOCR-VL-0.9Br   zeModel files already exist. Using cached files. To redownload, please delete the directory manually: `ri   r   zTNo available model hosting platforms detected. Please check your network connection.)ra   r   r   r   r   rn   r   r   errorr}   _download_from_hosteris_dir)rb   rr   rs   msgZvl_model_dirrd   rd   re   _get_model_local_path8  s"   

z#_ModelManager._get_model_local_pathc                 C   s   t |D ]X\}}||jv r\z
||}|W   S  ty[ } z8t|dkr.td|j dtd|j d| d||d  j d | ||d d  |W  Y d }~  S d }~ww qtd| d	)
Nr_   z-Encounter exception when download model from zN. No model source is available! Please check network or use local model files!z0Encountering exception when download model from z: 
z2, will try to download from other model sources: `ri   z(No model source is available for model `zA`! Please check model name and network, or use local model files!)		enumeraterk   rt   r}   r   rq   r   r   r   )rb   r   rr   idxZhosterZ
model_patherd   rd   re   r   P  s(   


"(
z#_ModelManager._download_from_hosterc                 C   s
   || j v S r`   )rk   rb   rr   rd   rd   re   __contains__d  rg   z_ModelManager.__contains__c                 C   s
   |  |S r`   )r   r   rd   rd   re   __getitem__g  rg   z_ModelManager.__getitem__)r   N)rm   r   r   r   rk   r   r	   ra   rf   r   r   r   r   r   rd   rd   rd   re   r     s    
r   )"r   r   r   abcr   r   pathlibr   Zhuggingface_hubr   r   Zset_verbosity_errorr   ry   environZaistudio_sdk.snapshot_downloadr   r   utilsZutils.cacher	   Zutils.downloadr
   Zutils.flagsr   r   r   r]   r   r   r   r   r   r   rd   rd   rd   re   <module>   s4   

  &Q+
N