
    i                     V    d Z ddlZddlmZmZmZ ddlZ G d dej                        Z	y)u<   
检测器基类
定义所有检测器必须实现的接口
    N)DictAnyOptionalc                      e Zd ZdZddededefdZej                  ddeee	f   de
fd	       Zej                  dd
ej                  deee	f   deee	f   fd       Zej                  deee	f   fd       Zdeeef   fdZdded
ej                  deee	f   deee	f   fdZddZdeeef   fdZdeee	f   de
fdZd Zd Zd Zy)BaseDetectoru9   检测器基类，所有具体检测器必须继承此类nameversiondescriptionc                 J    || _         || _        || _        d| _        i | _        y)u   
        初始化检测器基本信息
        
        Args:
            name: 检测器名称
            version: 检测器版本
            description: 检测器描述
        FN)r   r	   r
   initialized
parameters)selfr   r	   r
   s       7   D:\pyccd\极耳翻折-拆分\detectors\base_detector.py__init__zBaseDetector.__init__   s)     	&     Nconfig_paramsreturnc                      y)u  
        初始化检测器，加载模型和配置
        
        Args:
            config_params: 配置参数字典，如果为None则使用默认配置
            
        Returns:
            bool: 初始化成功返回True，失败返回False
        N )r   r   s     r   
initializezBaseDetector.initialize   s     	r   imageparamsc                      y)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   s      r   detectzBaseDetector.detect*   s    , 	r   c                      y)ui   
        获取默认参数配置
        
        Returns:
            Dict: 默认参数字典
        Nr   r   s    r   get_default_parametersz#BaseDetector.get_default_parametersB   s     	r   c                 
    ddiS )u   
        获取检测器可用的检测函数列表
        
        Returns:
            Dict[str, str]: 函数名称到描述的映射
        r   u   主检测函数r   r   s    r   get_available_functionsz$BaseDetector.get_available_functionsL   s     '
 	
r   function_namec                 L    |dk(  r| j                  ||      S t        d|       )u   
        调用指定的检测函数
        
        Args:
            function_name: 要调用的函数名称
            image: 输入图像
            params: 检测参数
            
        Returns:
            Dict: 检测结果
        r   u   未知的函数名称: )r   
ValueError)r   r    r   r   s       r   call_functionzBaseDetector.call_functionX   s0     H$;;uf--6}oFGGr   c                      y)u   
        预热检测器（可选方法）
        
        子类可以重写此方法来实现模型预热逻辑
        默认实现为空操作
        Nr   r   s    r   warm_upzBaseDetector.warm_upi   s     	r   c                 `    | j                   | j                  | j                  | j                  dS )u   
        获取检测器信息
        
        Returns:
            Dict: 包含名称、版本、描述等信息的字典
        r   r	   r
   r   r'   r   s    r   get_infozBaseDetector.get_infor   s.     II||++++	
 	
r   c                 "    t        |t              S )u   
        验证参数有效性
        
        Args:
            params: 参数字典
            
        Returns:
            bool: 参数有效返回True
        )
isinstancedict)r   r   s     r   validate_parametersz BaseDetector.validate_parameters   s     &$''r   c                      d| _         i | _        y)u0   
        清理资源，释放内存等
        FN)r   r   r   s    r   cleanupzBaseDetector.cleanup   s     !r   c                 8    | j                    d| j                   S )Nz v)r   r	   r   s    r   __str__zBaseDetector.__str__   s    ))Bt||n--r   c                 j    d| j                   j                   d| j                   d| j                   dS )N<(z, z)>)	__class____name__r   r	   r   s    r   __repr__zBaseDetector.__repr__   s0    4>>**+1TYYKr$,,rJJr   ) )N)r   N)r5   
__module____qualname____doc__strr   abcabstractmethodr   r   boolr   npndarrayr   r   r   r#   r%   r(   r,   r.   r0   r6   r   r   r   r   r      sV   CS 3 S  	
S#X 
$ 
 
 	BJJ S#X $sTWx.  . 	S#X  

c3h 

H3 Hrzz H4PSUXPX> Heijmorjres H"
$sCx. 
($sCx. (T (.Kr   r   )
r:   r<   typingr   r   r   numpyr?   ABCr   r   r   r   <module>rD      s,   
  & & MK377 MKr   