o
    äÚiž  ã                   @   s>   d Z ddlZddlmZmZmZ ddlZG dd„ dejƒZ	dS )u<   
æ£€æµ‹å™¨åŸºç±»
å®šä¹‰æ‰€æœ‰æ£€æµ‹å™¨å¿…é¡»å®žçŽ°çš„æŽ¥å£
é    N)ÚDictÚAnyÚOptionalc                   @   s,  e Zd ZdZd$dededefdd„Zejd%d	eee	f d
e
fdd„ƒZejd%dejdeee	f d
eee	f fdd„ƒZejd
eee	f fdd„ƒZd
eeef fdd„Zd%dedejdeee	f d
eee	f fdd„Zd&dd„Zd
eeef fdd„Zdeee	f d
e
fdd„Zdd„ Zd d!„ Zd"d#„ ZdS )'ÚBaseDetectoru9   æ£€æµ‹å™¨åŸºç±»ï¼Œæ‰€æœ‰å…·ä½“æ£€æµ‹å™¨å¿…é¡»ç»§æ‰¿æ­¤ç±»Ú ÚnameÚversionÚdescriptionc                 C   s"   || _ || _|| _d| _i | _dS )u·   
        åˆå§‹åŒ–æ£€æµ‹å™¨åŸºæœ¬ä¿¡æ¯
        
        Args:
            name: æ£€æµ‹å™¨åç§°
            version: æ£€æµ‹å™¨ç‰ˆæœ¬
            description: æ£€æµ‹å™¨æè¿°
        FN)r   r   r	   ÚinitializedÚ
parameters)Úselfr   r   r	   © r   õ7   D:\pyccd\æžè€³ç¿»æŠ˜-æ‹†åˆ†\detectors\base_detector.pyÚ__init__   s
   	
zBaseDetector.__init__NÚconfig_paramsÚreturnc                 C   ó   dS )u  
        åˆå§‹åŒ–æ£€æµ‹å™¨ï¼ŒåŠ è½½æ¨¡åž‹å’Œé…ç½®
        
        Args:
            config_params: é…ç½®å‚æ•°å­—å…¸ï¼Œå¦‚æžœä¸ºNoneåˆ™ä½¿ç”¨é»˜è®¤é…ç½®
            
        Returns:
            bool: åˆå§‹åŒ–æˆåŠŸè¿”å›žTrueï¼Œå¤±è´¥è¿”å›žFalse
        Nr   )r   r   r   r   r   Ú
initialize   s   zBaseDetector.initializeÚimageÚparamsc                 C   r   )u  
        æ‰§è¡Œæ£€æµ‹
        
        Args:
            image: è¾“å…¥å›¾åƒ (numpy array)
            params: æ£€æµ‹å‚æ•°ï¼Œå¦‚æžœä¸ºNoneåˆ™ä½¿ç”¨é»˜è®¤å‚æ•°
            
        Returns:
            Dict: æ£€æµ‹ç»“æžœï¼Œå¿…é¡»åŒ…å«ä»¥ä¸‹å­—æ®µï¼š
            {
                'success': bool,           # æ£€æµ‹æ˜¯å¦æˆåŠŸ
                'fold_result': int,        # ç¿»æŠ˜çŠ¶æ€ç 
                'errors': List[str],       # é”™è¯¯ä¿¡æ¯
                'messages': List[str],     # æç¤ºä¿¡æ¯
                'statistics': Dict,        # ç»Ÿè®¡ä¿¡æ¯
                'details': Dict,           # è¯¦ç»†ç»“æžœ
                'draw_items': Dict,        # ç»˜å›¾é¡¹ï¼ˆä¿æŒåŽŸæœ‰æ ¼å¼ï¼‰
                'processed_image': np.ndarray  # å¤„ç†åŽçš„å›¾åƒ
            }
        Nr   )r   r   r   r   r   r   Údetect*   s   zBaseDetector.detectc                 C   r   )ui   
        èŽ·å–é»˜è®¤å‚æ•°é…ç½®
        
        Returns:
            Dict: é»˜è®¤å‚æ•°å­—å…¸
        Nr   ©r   r   r   r   Úget_default_parametersB   s   z#BaseDetector.get_default_parametersc                 C   s   ddiS )u‘   
        èŽ·å–æ£€æµ‹å™¨å¯ç”¨çš„æ£€æµ‹å‡½æ•°åˆ—è¡¨
        
        Returns:
            Dict[str, str]: å‡½æ•°åç§°åˆ°æè¿°çš„æ˜ å°„
        r   u   ä¸»æ£€æµ‹å‡½æ•°r   r   r   r   r   Úget_available_functionsL   s   	ÿz$BaseDetector.get_available_functionsÚfunction_namec                 C   s"   |dkr
|   ||¡S td|› ƒ‚)uö   
        è°ƒç”¨æŒ‡å®šçš„æ£€æµ‹å‡½æ•°
        
        Args:
            function_name: è¦è°ƒç”¨çš„å‡½æ•°åç§°
            image: è¾“å…¥å›¾åƒ
            params: æ£€æµ‹å‚æ•°
            
        Returns:
            Dict: æ£€æµ‹ç»“æžœ
        r   u   æœªçŸ¥çš„å‡½æ•°åç§°: )r   Ú
ValueError)r   r   r   r   r   r   r   Úcall_functionX   s   zBaseDetector.call_functionc                 C   r   )uœ   
        é¢„çƒ­æ£€æµ‹å™¨ï¼ˆå¯é€‰æ–¹æ³•ï¼‰
        
        å­ç±»å¯ä»¥é‡å†™æ­¤æ–¹æ³•æ¥å®žçŽ°æ¨¡åž‹é¢„çƒ­é€»è¾‘
        é»˜è®¤å®žçŽ°ä¸ºç©ºæ“ä½œ
        Nr   r   r   r   r   Úwarm_upi   s   zBaseDetector.warm_upc                 C   s   | j | j| j| jdœS )u„   
        èŽ·å–æ£€æµ‹å™¨ä¿¡æ¯
        
        Returns:
            Dict: åŒ…å«åç§°ã€ç‰ˆæœ¬ã€æè¿°ç­‰ä¿¡æ¯çš„å­—å…¸
        ©r   r   r	   r
   r   r   r   r   r   Úget_infor   s
   üzBaseDetector.get_infoc                 C   s
   t |tƒS )u¦   
        éªŒè¯å‚æ•°æœ‰æ•ˆæ€§
        
        Args:
            params: å‚æ•°å­—å…¸
            
        Returns:
            bool: å‚æ•°æœ‰æ•ˆè¿”å›žTrue
        )Ú
isinstanceÚdict)r   r   r   r   r   Úvalidate_parameters€   s   
z BaseDetector.validate_parametersc                 C   s   d| _ i | _dS )u0   
        æ¸…ç†èµ„æºï¼Œé‡Šæ”¾å†…å­˜ç­‰
        FN)r
   r   r   r   r   r   Úcleanup   s   
zBaseDetector.cleanupc                 C   s   | j › d| j› S )Nz v)r   r   r   r   r   r   Ú__str__”   s   zBaseDetector.__str__c                 C   s    d| j j› d| j› d| j› dS )Nú<ú(z, z)>)Ú	__class__Ú__name__r   r   r   r   r   r   Ú__repr__—   s    zBaseDetector.__repr__)r   )N)r   N)r(   Ú
__module__Ú__qualname__Ú__doc__Ústrr   ÚabcÚabstractmethodr   r   Úboolr   ÚnpZndarrayr   r   r   r   r   r   r"   r#   r$   r)   r   r   r   r   r      s"    ,	.
	r   )
r,   r.   Útypingr   r   r   Znumpyr1   ÚABCr   r   r   r   r   Ú<module>   s
    