Ë
    Fêñiê  ã                  ón   — d dl mZ d dlmZ d dlZd dlZd dlmZm	Z	m
Z
 d dlmZ ddlmZ  G d„ d	e«      Zy)
é    )Úannotations)ÚPathN)ÚARM64ÚLINUXÚLOGGER)Úcheck_requirementsé   )ÚBaseBackendc                  ó    — e Zd ZdZdd„Zdd„Zy)Ú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.
    c                óR  — t        j                  d|› d�«       t        d«       ddl}|j	                  «       }|j
                  dgk(  rdnd}|}t        | j                  t        «      r�| j                  j                  d«      rr| j                  j                  d	«      d
   j                  «       }t        j                  d«      | _        ||j
                  vrt        j                  d|› d|› d�«       |}t        |«      }|j                  «       st!        |j#                  d«      «      }|j%                  t        |«      |j'                  d«      ¬«      }|j)                  «       d   j+                  «       j,                  r1|j)                  «       d   j/                  |j1                  d«      «       |j2                  dz  }|j5                  «       r&ddlm}	 | j;                  |	j=                  |«      «       | j>                  r| j@                  d
kD  rdnd| _!        d| jB                  i}
tD        rQtF        rK|dk(  rF|jH                  jJ                  jL                  jN                  |
d<   |jP                  jR                  |
d<   |jU                  |||
¬«      | _+        t        j                  d| jB                  › d| j@                  › ddjY                  | jV                  j[                  d«      «      › d �«       | jV                  j]                  «       j_                  «       | _0        || _1        y)!zËLoad 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ÚCPUÚAUTOÚintelú:r	   ÚcpuzOpenVINO device 'z' not available. Using 'z
' instead.z*.xmlz.bin)ÚmodelÚweightsÚNCHWzmetadata.yaml)ÚYAMLÚCUMULATIVE_THROUGHPUTÚLATENCYÚPERFORMANCE_HINTÚEXECUTION_MODE_HINTÚINFERENCE_PRECISION_HINT)Údevice_nameÚconfigzUsing OpenVINO z mode for batch=z inference on z, ÚEXECUTION_DEVICESz...)2r   Úinfor   ÚopenvinoÚCoreÚavailable_devicesÚ
isinstanceÚdeviceÚstrÚ
startswithÚsplitÚupperÚtorchÚ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_moder   r   Ú
propertiesÚhintÚExecutionModeÚACCURACYÚTypeÚf32Úcompile_modelÚov_compiled_modelÚjoinÚget_propertyÚinputÚget_any_nameÚ
input_nameÚov)ÚselfÚweightrJ   ÚcoreÚfallback_devicer   ÚwÚov_modelÚmetadata_filer   r   s              úb/var/www/pod-logistic/pod-ai/venv/lib/python3.12/site-packages/ultralytics/nn/backends/openvino.pyÚ
load_modelzOpenVINOBackend.load_model   s™  € ô 	�‰�h˜v˜hÐ&@ÐAÔBÜÐ/Ô0Ûà�w‰w‹yˆØ#'×#9Ñ#9¸e¸WÒ#D™%È&ˆØ%ˆä�d—k‘k¤3Ô'¨D¯K©K×,BÑ,BÀ7Ô,KØŸ+™+×+Ñ+¨CÓ0°Ñ3×9Ñ9Ó;ˆKÜŸ,™, uÓ-ˆDŒKØ $×"8Ñ"8Ñ8Ü—‘Ð!2°;°-Ð?WÐXgÐWhÐhrÐsÔtØ-�ä�‹LˆØ�y‰yŒ{Ü�Q—V‘V˜G“_Ó%ˆAà—?‘?¬¨Q«¸¿¹ÀvÓ9N�?ÓOˆØ×"Ñ"Ó$ QÑ'×2Ñ2Ó4×:Ò:Ø×#Ñ#Ó% aÑ(×3Ñ3°B·I±I¸fÓ4EÔFð Ÿ™ ?Ñ2ˆØ×ÑÔ!Ý.à×Ñ §	¡	¨-Ó 8Ô9ð :>¿ºÈ$Ï*É*ÐWXÊ.Ñ5Ð^gˆÔØ$ d×&9Ñ&9Ð:ˆÝ•U˜{¨eÒ3Ø,.¯M©M×,>Ñ,>×,LÑ,L×,UÑ,UˆFÐ(Ñ)Ø13·±·±ˆFÐ-Ñ.à!%×!3Ñ!3ØØ#Øð "4ó "
ˆÔô
 	�‰Ø˜d×1Ñ1Ð2Ð2BÀ4Ç:Á:À,ÈnØ�y‰y˜×/Ñ/×<Ñ<Ð=PÓQÓRÐSÐSVðXô	
ð ×0Ñ0×6Ñ6Ó8×EÑEÓGˆŒØˆ�ó    c                óÈ  ‡	— |j                  «       j                  «       j                  t        j                  «      }| j
                  dv rå|j                  d   }dg|z  Š	ˆ	fd„}| j                  j                  | j                  «      }|j                  |«       t        |«      D ]'  }|j                  | j                  |||dz    i|¬«       Œ) |j                  «        ‰	D �cg c]  }t        |j!                  «       «      ‘Œ }}t#        |Ž D �cg c]  }t        j$                  |«      ‘Œ }}|S t        | j                  |«      j!                  «       «      }|S c c}w c c}w )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                   ‰|<   y)zQStore async inference result in the preallocated results list at the given index.N)Úresults)ÚrequestÚuserdatarX   s     €rR   Úcallbackz)OpenVINOBackend.forward.<locals>.callback^   s   ø€ à$+§O¡O�˜Ò!rT   r	   )ÚinputsrZ   )r   ÚnumpyÚastypeÚnpÚfloat32r<   ÚshaperJ   ÚAsyncInferQueuerD   Úset_callbackÚrangeÚstart_asyncrI   Úwait_allÚlistÚvaluesÚzipÚconcatenate)
rK   ÚimÚnr[   Úasync_queueÚiÚrÚyÚxrX   s
            @rR   ÚforwardzOpenVINOBackend.forwardN   s6  ø€ ð �V‰V‹X�^‰^Ó×$Ñ$¤R§Z¡ZÓ0ˆà×ÑÐ"IÑIà—‘˜‘ˆAØ�f˜q‘jˆGô4ð Ÿ'™'×1Ñ1°$×2HÑ2HÓIˆKØ×$Ñ$ XÔ.ä˜1“Xò ]�Ø×'Ñ'°·±ÀÀAÈÈAÉÀÐ/OÐZ[Ð'Õ\ð]à× Ñ Ô"à+2Ö3 a”�a—h‘h“jÕ!Ð3ˆAÐ3Ü,/°¨GÖ4 q”—‘ Õ"Ð4ˆAÐ4ð ˆô �T×+Ñ+¨BÓ/×6Ñ6Ó8Ó9ˆAØˆùò 4ùÚ4s   Ã$ EÄEN)rL   z
str | PathÚreturnÚNone)rk   ztorch.Tensorrs   zlist[np.ndarray])Ú__name__Ú
__module__Ú__qualname__Ú__doc__rS   rr   © rT   rR   r   r      s   „ ñó5ôn rT   r   )Ú
__future__r   Úpathlibr   r]   r_   r)   r7   r   r   r   Úultralytics.utils.checksr   Úbaser
   r   ry   rT   rR   ú<module>r~      s-   ðõ #å ã Û ç 2Ñ 2Ý 7å ô^�kõ ^rT   