Ë
    Fêñiª	  ã                  óf   — 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y)
é    )Úannotations)ÚPathN)ÚLOGGER)Úcheck_requirementsé   )ÚBaseBackendc                  ó    — e Zd ZdZdd„Zdd„Zy)ÚNCNNBackendzôTencent NCNN inference backend for mobile and embedded deployment.

    Loads and runs inference with Tencent NCNN models (*_ncnn_model/ directories). Optimized for mobile platforms with
    optional Vulkan GPU acceleration when available.
    c                óÀ  — t        j                  d|› d�«       t        dd¬«       ddl}|| _        |j                  «       | _        t        | j                  t        «      r‘| j                  j                  d«      rvd	| j                  j                  _        | j                  j                  t        | j                  j                  d
«      d   «      «       t!        j                  d«      | _        nd| j                  j                  _        t#        |«      }|j%                  «       st'        |j)                  d«      «      }| j                  j+                  t        |«      «       | j                  j-                  t        |j/                  d«      «      «       |j0                  dz  }|j3                  «       r'ddlm} | j9                  |j;                  |«      «       yy)z¾Load an NCNN model from a .param/.bin file pair or model directory.

        Args:
            weight (str | Path): Path to the .param file or directory containing NCNN model files.
        zLoading z for NCNN inference...Úncnnz	--no-deps)Úcmdsr   NÚvulkanTú:r   ÚcpuFz*.paramz.binzmetadata.yaml)ÚYAML)r   Úinfor   r   ÚpyncnnÚNetÚnetÚ
isinstanceÚdeviceÚstrÚ
startswithÚoptÚuse_vulkan_computeÚset_vulkan_deviceÚintÚsplitÚtorchr   Úis_fileÚnextÚglobÚ
load_paramÚ
load_modelÚwith_suffixÚparentÚexistsÚultralytics.utilsr   Úapply_metadataÚload)ÚselfÚweightr   ÚwÚmetadata_filer   s         ú^/var/www/pod-logistic/pod-ai/venv/lib/python3.12/site-packages/ultralytics/nn/backends/ncnn.pyr$   zNCNNBackend.load_model   sM  € ô 	�‰�h˜v˜hÐ&<Ð=Ô>Ü˜6¨Õ4ÛàˆŒØ—:‘:“<ˆŒô �d—k‘k¤3Ô'¨D¯K©K×,BÑ,BÀ8Ô,LØ.2ˆD�H‰H�L‰LÔ+Ø�H‰H×&Ñ&¤s¨4¯;©;×+<Ñ+<¸SÓ+AÀ!Ñ+DÓ'EÔFÜŸ,™, uÓ-ˆD�Kà.3ˆD�H‰H�L‰LÔ+ä�‹LˆØ�y‰yŒ{Ü�Q—V‘V˜IÓ&Ó'ˆAà�‰×ÑœC ›FÔ#Ø�‰×ÑœC §¡¨fÓ 5Ó6Ô7ð Ÿ™ ?Ñ2ˆØ×ÑÔ!Ý.à×Ñ §	¡	¨-Ó 8Õ9ð "ó    c           	     óî  — | j                   j                  |d   j                  «       j                  «       «      }| j                  j                  «       5 }|j                  | j                  j                  «       d   |«       t        | j                  j                  «       «      D �cg c],  }t        j                  |j                  |«      d   «      d   ‘Œ. }}ddd«       |S c c}w # 1 sw Y   S xY w)a
  Run inference using the NCNN runtime.

        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.
        r   r   N)r   ÚMatr   Únumpyr   Úcreate_extractorÚinputÚinput_namesÚsortedÚoutput_namesÚnpÚarrayÚextract)r+   ÚimÚmat_inÚexÚxÚys         r/   ÚforwardzNCNNBackend.forward:   sÂ   € ð —‘—‘  A¡§¡£×!2Ñ!2Ó!4Ó5ˆØ�X‰X×&Ñ&Ó(ð 	\¨BØ�H‰H�T—X‘X×)Ñ)Ó+¨AÑ.°Ô7ä;AÀ$Ç(Á(×BWÑBWÓBYÓ;ZÖ[°a”—‘˜"Ÿ*™* Q›-¨Ñ*Ó+¨DÓ1Ð[ˆAÐ[÷	\ð ˆùò \÷	\ð ˆús   ÁAC*Â(1C%ÃC*Ã%C*Ã*C4N)r,   z
str | PathÚreturnÚNone)r<   ztorch.TensorrB   zlist[np.ndarray])Ú__name__Ú
__module__Ú__qualname__Ú__doc__r$   rA   © r0   r/   r
   r
      s   „ ñó!:ôFr0   r
   )Ú
__future__r   Úpathlibr   r3   r9   r   r(   r   Úultralytics.utils.checksr   Úbaser   r
   rH   r0   r/   ú<module>rM      s(   ðõ #å ã Û å $Ý 7å ô8�+õ 8r0   