
    /j                    n    d dl mZ d dlmZ d dlZd dlZd dlmZ d dl	m
Z
 ddlmZ  G d d	e          ZdS )
    )annotations)PathN)LOGGER)check_requirements   )BaseBackendc                  "    e Zd ZdZddZdd
ZdS )OpenVINOBackenda  Intel OpenVINO inference backend for Intel hardware acceleration.

    Loads and runs inference with Intel OpenVINO IR models (*_openvino_model/ directories). Supports automatic device
    selection, Intel-specific device targeting, and async inference for throughput optimization.
    weight
str | PathreturnNonec                   t          j        d| d           t          d           ddl}|                                }d}t          | j        t                    r| j                            d          rn| j        	                    d          d	         
                                }t          j        d
          | _        ||j        vrt          j        d| d           d}t          |          }|                                s"t!          |                    d                    }|                    t          |          |                    d                    }|                                d                                         j        r@|                                d                             |                    d                     |j        dz  }|                                r.ddlm} |                     |                    |                     | j        r| j         d	k    rdnd| _!        |"                    ||d| j!        i          | _#        t          j        d| j!         d| j          dd$                    | j#        %                    d                     d           | j#        &                                '                                | _(        || _)        dS )zLoad an Intel OpenVINO IR model from a .xml/.bin file pair or model directory.

        Args:
            weight (str | Path): Path to the .xml file or directory containing OpenVINO model files.
        zLoading z for OpenVINO inference...zopenvino>=2024.0.0r   NAUTOintel:r   cpuzOpenVINO device 'z&' not available. Using 'AUTO' instead.z*.xmlz.bin)modelweightsNCHWzmetadata.yaml)YAMLCUMULATIVE_THROUGHPUTLATENCYPERFORMANCE_HINT)device_nameconfigzUsing OpenVINO z mode for batch=z inference on z, EXECUTION_DEVICESz...)*r   infor   openvinoCore
isinstancedevicestr
startswithsplituppertorchavailable_deviceswarningr   is_filenextglob
read_modelwith_suffixget_parameters
get_layoutempty
set_layoutLayoutparentexistsultralytics.utilsr   apply_metadataloaddynamicbatchinference_modecompile_modelov_compiled_modeljoinget_propertyinputget_any_name
input_nameov)	selfr   rC   corer   wov_modelmetadata_filer   s	            e/home/longshao/multi-rider-rag/.venv/lib/python3.11/site-packages/ultralytics/nn/backends/openvino.py
load_modelzOpenVINOBackend.load_model   s    	AvAAABBB/000wwyydk3'' 	%DK,B,B7,K,K 	%+++C00399;;K,u--DK$"888f;fffggg$LLyy{{ 	&QVVG__%%A??Qv9N9N?OO""$$Q'2244: 	G##%%a(33BIIf4E4EFFF ?2!! 	:......		- 8 8999 :>g$*WX..55^g!%!3!3#&(;< "4 "
 "

 	Xd1 X X4: X Xyy/<<=PQQRRX X X	
 	
 	
 06688EEGG    imtorch.Tensorlist[np.ndarray]c                ~   |                                                                                     t          j                  }| j        dv r|j        d         }dg|z  fd}| j                            | j	                  }|
                    |           t          |          D ]+}|                    | j        |||dz            i|           ,|                                 d D             }d t          | D             }n4t!          | 	                    |                                                    }|S )	a7  Run Intel OpenVINO inference with sync or async execution based on inference mode.

        Args:
            im (torch.Tensor): Input image tensor in BCHW format, normalized to [0, 1].

        Returns:
            (list[np.ndarray]): Model predictions as a list of numpy arrays, one per output layer.
        >   
THROUGHPUTr   r   Nc                    | j         |<   dS )zQStore async inference result in the preallocated results list at the given index.N)results)requestuserdatarR   s     rI   callbackz)OpenVINOBackend.forward.<locals>.callbackY   s    $+O!!!rK   r   )inputsrT   c                P    g | ]#}t          |                                          $S  )listvalues).0rs     rI   
<listcomp>z+OpenVINOBackend.forward.<locals>.<listcomp>d   s(    333aahhjj!!333rK   c                6    g | ]}t          j        |          S rX   )npconcatenate)r[   xs     rI   r]   z+OpenVINOBackend.forward.<locals>.<listcomp>e   s"    444q""444rK   )r   numpyastyper_   float32r;   shaperC   AsyncInferQueuer=   set_callbackrangestart_asyncrB   wait_allziprY   rZ   )rD   rL   nrU   async_queueiyrR   s          @rI   forwardzOpenVINOBackend.forwardI   sK    VVXX^^$$RZ00"IIIAfqjG4 4 4 4 4 '11$2HIIK$$X...1XX ] ]''AAI/OZ['\\\\  """337333A44CG444AA T++B//668899ArK   N)r   r   r   r   )rL   rM   r   rN   )__name__
__module____qualname____doc__rJ   rp   rX   rK   rI   r
   r
      sG         0 0 0 0d           rK   r
   )
__future__r   pathlibr   rb   r_   r'   r6   r   ultralytics.utils.checksr   baser   r
   rX   rK   rI   <module>ry      s    # " " " " "            $ $ $ $ $ $ 7 7 7 7 7 7      Y Y Y Y Yk Y Y Y Y YrK   