§
    ïmËjc6  ã                  ó8  — d Z ddlmZ ddlZddlZddlmZ ddlmZm	Z	m
Z
mZ ddlZddlmZmZ ddlmZ dd	lmZ dd
lmZmZmZmZ ddlmZmZ ddlmZmZm Z  ddl!m"Z" ddl#m$Z$ ddl%m&Z&m'Z' ddl(m)Z)m*Z*m+Z, ddl-m.Z.  ej/        e0¦  «        Z1 G d„ d¦  «        Z2dS )uƒ   
VideoDetection Pipeline Orchestrator.
Ä�iá»�u phá»‘i toÃ n bá»™ luá»“ng Ingestion -> Feature Extraction -> Indexing -> Alignment.
é    )ÚannotationsN)ÚPath)ÚDictÚListÚOptionalÚTupleé   )ÚMatchSegmentÚTemporalMatcher)ÚNeuralFPExtractor)ÚCONFIG)ÚDATA_DIRÚ
TARGET_DIRÚTEMP_DIRÚclean_temp_dir)ÚOwnerDatabaseÚVideoRecord)ÚCachedVideoFeaturesÚFeatureStoreÚSUPPORTED_EXTENSIONS)ÚVideoDatabase)ÚAudioChunkExtractor)ÚVideoClipExtractorÚget_video_metadata)ÚDEFAULT_SECTION_1HÚYouTubeDownloadResultÚdownload_youtube_video)ÚVJEPAExtractorc                  óˆ   — e Zd Zd%d„Z	 d&d'd„Z	 d&d(d
„Z	 d&d)d„Zd&d*d„Zd&d+d„Zd&d+d„Z	d,d„Z
d,d„Z	 	 d-d.d„Zedddfd/d$„ZdS )0ÚVideoDetectionPipelineÚreturnÚNonec                óÎ  — t          t          ¬¦  «        | _        t          t          j                             dd¦  «        t          j                             dd¦  «        t          j                             dd¦  «        ¬¦  «        | _        t          t          j	                             d	d
¦  «        t          j	                             dd¦  «        ¬¦  «        | _
        t          j                             dd¦  «        }t          j                             dd¦  «        }t          t          j                             dd¦  «        ||d¬¦  «        | _        t          t          j	                             d	d
¦  «        t          j	                             dd¦  «        |¬¦  «        | _        t!          | j        | j
        | j        | j        ¬¦  «        | _        t%          | j        t'          t          j                             dd¦  «        ¦  «        t'          t          j	                             dd¦  «        ¦  «        t'          t          j                             dd¦  «        ¦  «        t'          t          j                             dd ¦  «        ¦  «        t'          t          j                             d!d"¦  «        ¦  «        ¬#¦  «        | _        t-          t          d$z  ¦  «        | _        d S )%N)Údata_dirÚframes_per_clipé   Ú
frame_sizeéà   Úclip_duration_secg      ð?)Úclip_framesÚtarget_sizeÚ
stride_secÚsample_ratei€>  Úhop_duration_secg      à?)r-   r.   ÚdeviceÚautoÚ	precisionÚfp16Ú
model_nameÚvjepa2_vitli   )r3   r/   r1   Úembedding_dimÚfingerprint_dimé€   )r-   r6   r/   )Úclip_extractorÚchunk_extractorÚvisual_extractorÚaudio_extractorÚsimilarity_thresholdgö(\�Âõè?g=
×£p=ê?Úmin_match_duration_secg      @Úfusion_weight_visualgÍÌÌÌÌÌä?Úfusion_weight_audiogffffffÖ?)ÚdbÚvisual_thresholdÚaudio_thresholdr=   r>   r?   zvideodetection.db)r   r   r@   r   r   ÚvisualÚgetr8   r   Úaudior9   Úhardwarer   r:   r   r;   r   Úfeature_storer   ÚfloatÚ	alignmentÚmatcherr   Úsql_db)Úselfr/   r1   s      ú*C:\Projects\VideoDetection\src\pipeline.pyÚ__init__zVideoDetectionPipeline.__init__"   sc  € Ý­Ð2Ñ2Ô2ˆŒõ 1Ýœ×)Ò)Ð*;¸RÑ@Ô@Ýœ×)Ò)¨,¸Ñ<Ô<Ý”}×(Ò(Ð)<¸cÑBÔBð
ñ 
ô 
ˆÔõ
  3Ýœ×(Ò(¨¸Ñ>Ô>Ý#œ\×-Ò-Ð.@À#ÑFÔFð 
ñ  
ô  
ˆÔõ ”×$Ò$ X¨vÑ6Ô6ˆÝ”O×'Ò'¨°VÑ<Ô<ˆ	å .Ý”}×(Ò(¨°}ÑEÔEØØØð	!
ñ !
ô !
ˆÔõ  1Ýœ×(Ò(¨¸Ñ>Ô>Ý"œL×,Ò,Ð->ÀÑDÔDØð 
ñ  
ô  
ˆÔõ *ØÔ.Ø Ô0Ø!Ô2Ø Ô0ð	
ñ 
ô 
ˆÔõ 'ØŒwÝ"¥6¤=×#4Ò#4Ð5KÈTÑ#RÔ#RÑSÔSÝ!¥&¤,×"2Ò"2Ð3IÈ4Ñ"PÔ"PÑQÔQÝ#(­Ô)9×)=Ò)=Ð>VÐX[Ñ)\Ô)\Ñ#]Ô#]Ý!&¥vÔ'7×';Ò';Ð<RÐTXÑ'YÔ'YÑ!ZÔ!ZÝ %¥fÔ&6×&:Ò&:Ð;PÐRVÑ&WÔ&WÑ XÔ Xð
ñ 
ô 
ˆŒõ $¥HÐ/BÑ$BÑCÔCˆŒˆˆó    NÚ
video_pathr   úETuple[List[Tuple[float, np.ndarray]], List[Tuple[float, np.ndarray]]]c                óÊ  — g }g }|r |dd|j         › �¦  «         | j                             |¦  «        D ]6\  }}| j                             |¦  «        }|                     ||f¦  «         Œ7|r |dd|j         › �¦  «         | j                             |¦  «        D ]6\  }}| j                             |¦  «        }	|                     ||	f¦  «         Œ7|r |dd¦  «         ||fS )uU   
        TrÃ­ch xuáº¥t Ä‘áº·c trÆ°ng Visual (V-JEPA 2) vÃ  Audio (NeuralFP).
        é
   u!   Ä�ang trÃ­ch xuáº¥t video clips: é2   u(   Ä�ang trÃ­ch xuáº¥t audio fingerprints: éP   u'   HoÃ n táº¥t trÃ­ch xuáº¥t Ä‘áº·c trÆ°ng)	Únamer8   Úextract_clipsr:   ÚextractÚappendr9   Úextract_chunksr;   )
rL   rP   Úprogress_callbackÚvisual_featuresÚaudio_featuresÚt_secÚclipÚembÚchunkÚfps
             rM   Úextract_featuresz'VideoDetectionPipeline.extract_featuresU   s2  € ð ;=ˆØ9;ˆàð 	YØÐ˜bÐ"WÀjÄoÐ"WÐ"WÑXÔXÐXð  Ô.×<Ò<¸ZÑHÔHð 	1ð 	1‰KˆE�4ØÔ'×/Ò/°Ñ5Ô5ˆCØ×"Ò" E¨3 <Ñ0Ô0Ð0Ð0àð 	`ØÐ˜bÐ"^ÈZÌ_Ð"^Ð"^Ñ_Ô_Ð_ð !Ô0×?Ò?À
ÑKÔKð 	/ð 	/‰LˆE�5ØÔ%×-Ò-¨eÑ4Ô4ˆBØ×!Ò! 5¨" +Ñ.Ô.Ð.Ð.àð 	MØÐ˜bÐ"KÑLÔLÐLà Ð.Ð.rO   r   c           
     óH  — t          |¦  «        }|j        }|                      ||¦  «        \  }}t          j                             ¦   «                              d¦  «        }t          ||j        t          |¦  «        |j	        t          |¦  «        t          |¦  «        |¬¦  «        }| j                             |||¦  «         | j                             ¦   «          t          j                             dd¦  «        rt#          ¦   «          |r |dd|j        › d�¦  «         |S )u[   
        Náº¡p má»™t video cá»§a chá»§ sá»Ÿ há»¯u vÃ o cÆ¡ sá»Ÿ dá»¯ liá»‡u Data/.
        z%Y-%m-%d %H:%M:%S)Úvideo_idÚfilenameÚrel_pathÚduration_secÚvisual_clips_countÚaudio_chunks_countÚ
indexed_atÚauto_clean_tempTéd   u   Ä�Ã£ lÆ°u video 'u   ' vÃ o cÆ¡ sá»Ÿ dá»¯ liá»‡u.)r   Ústemrc   ÚdatetimeÚnowÚstrftimer   rV   Ústrrh   Úlenr@   Úadd_referenceÚsaver   ÚuirD   r   )	rL   rP   r[   Úmetare   Ú	vis_featsÚ	aud_featsÚnow_strÚrecords	            rM   Úindex_reference_videoz,VideoDetectionPipeline.index_reference_videou   s  € õ " *Ñ-Ô-ˆØ”?ˆà#×4Ò4°ZÐARÑSÔSÑˆ	�9åÔ#×'Ò'Ñ)Ô)×2Ò2Ð3FÑGÔGˆÝØØ”_Ý˜‘_”_ØÔ*Ý" 9™~œ~Ý" 9™~œ~Øð
ñ 
ô 
ˆð 	Œ×Ò˜f i°Ñ;Ô;Ð;ØŒ�Š‰ŒˆåŒ9�=Š=Ð*¨DÑ1Ô1ð 	ÝÑÔÐàð 	fØÐ˜cÐ#d°z´Ð#dÐ#dÐ#dÑeÔeÐeàˆrO   Útarget_video_pathúList[MatchSegment]c           	     óÀ  — | j         j        j        dk    r1| j         j        j        dk    rt                               d¦  «         g S |                      ||¦  «        \  }}|r |dd¦  «         | j                             ||¦  «        }t          j
                             dd¦  «        rt          ¦   «          |r% |dd|j        › d	t          |¦  «        › d
�¦  «         |S )uy   
        QuÃ©t má»™t video má»¥c tiÃªu Ä‘á»ƒ tÃ¬m kiáº¿m Ä‘oáº¡n trÃ¹ng láº·p vá»›i kho dá»¯ liá»‡u trong Data/.
        r   u^   CÆ¡ sá»Ÿ dá»¯ liá»‡u Data/ Ä‘ang rá»—ng. ChÆ°a cÃ³ video chá»§ sá»Ÿ há»¯u nÃ o Ä‘Æ°á»£c náº¡p.éU   uE   Ä�ang Ä‘á»‘i soÃ¡t & cÄƒn chá»‰nh thá»�i gian (Temporal Alignment)...rl   Trm   u   HoÃ n táº¥t quÃ©t u   : tÃ¬m tháº¥y õ    Ä‘oáº¡n trÃ¹ng láº·p.)r@   Úvisual_indexÚtotalÚaudio_indexÚloggerÚwarningrc   rJ   Úmatchr   rv   rD   r   rV   rs   )rL   r}   r[   rx   ry   Úmatchess         rM   Úscan_target_videoz(VideoDetectionPipeline.scan_target_video˜   s  € ð Œ7ÔÔ%¨Ò*Ð*¨t¬wÔ/BÔ/HÈAÒ/MÐ/MÝ�NŠNÐ{Ñ|Ô|Ð|ØˆIà#×4Ò4Ð5FÐHYÑZÔZÑˆ	�9àð 	kØÐ˜bÐ"iÑjÔjÐjà”,×$Ò$ Y°	Ñ:Ô:ˆåŒ9�=Š=Ð*¨DÑ1Ô1ð 	ÝÑÔÐàð 	DØÐ˜cð  $CÐ8IÔ8Nð  $Cð  $CÕ^aÐbiÑ^jÔ^jð  $Cð  $Cð  $Cñ  Dô  Dð  DàˆrO   úDict[str, List[MatchSegment]]c                ó2  ‡‡‡‡	— h d£Š	ˆ	fd„t          j        ¦   «         D ¦   «         }i }t          |¦  «        Š‰dk    rt                               d¦  «         |S t          |¦  «        D ],\  Š}ˆˆˆfd„}|                      ||¦  «        }|||j        <   Œ-|S )uR   
        QuÃ©t táº¥t cáº£ cÃ¡c file video náº±m trong thÆ° má»¥c Target/.
        >   ú.tsú.aviú.flvú.mkvú.movú.mp4ú.webmc                ór   •— g | ]3}|                      ¦   «         r|j                             ¦   «         ‰v ¯1|‘Œ4S © )Úis_fileÚsuffixÚlower)Ú.0ÚfÚvalid_extensionss     €rM   ú
<listcomp>z;VideoDetectionPipeline.scan_all_targets.<locals>.<listcomp>¸   sK   ø€ ð 
ð 
ð 
ØØ�yŠy‰{Œ{ð
à œxŸ~š~Ñ/Ô/Ð3CÐCÐCð ØCÐCÐCrO   r   u<   ThÆ° má»¥c Target/ hiá»‡n khÃ´ng cÃ³ video nÃ o cáº§n quÃ©t.c           	     óp   •— ‰r2t          ‰dz  | z   ‰z  ¦  «        } ‰|d‰dz   › d‰› d|› �¦  «         d S d S )Nrm   ú[r	   ú/z] )Úint)ÚpctÚmsgÚoverall_pctÚidxr[   rƒ   s      €€€rM   Úfile_progressz>VideoDetectionPipeline.scan_all_targets.<locals>.file_progressÅ   si   ø€ Ø$ð OÝ"%¨¨c©	°SÑ'8¸EÑ&AÑ"BÔ"B�KØ%Ð% kÐ3M°s¸1±uÐ3MÐ3M¸uÐ3MÐ3MÈÐ3MÐ3MÑNÔNÐNÐNÐNðOð OrO   )r   Úiterdirrs   r…   ÚinfoÚ	enumerater‰   rV   )
rL   r[   Útarget_filesÚresultsÚ	file_pathr¤   rˆ   r£   rƒ   rš   s
    `     @@@rM   Úscan_all_targetsz'VideoDetectionPipeline.scan_all_targets³   së   øøøø€ ð TÐSÐSÐð
ð 
ð 
ð 
Ý!Ô)Ñ+Ô+ð
ñ 
ô 
ˆð
 24ˆÝ�LÑ!Ô!ˆà�AŠ:ˆ:Ý�KŠKÐVÑWÔWÐWØˆNå'¨Ñ5Ô5ð 	.ð 	.‰NˆC�ðOð Oð Oð Oð Oð Oð Oð
 ×,Ò,¨Y¸ÑFÔFˆGØ&-ˆG�I”NÑ#Ð#àˆrO   ú*Tuple[int, int, List[CachedVideoFeatures]]c                ó6  — | j                              t          |¦  «        \  }}}|D ]n}	 | j                             t          |j        ¦  «        d|¬¦  «         Œ3# t          $ r/}t           	                    d|j
        › d|› �¦  «         Y d}~Œgd}~ww xY w|||fS )uØ   
        Tá»± Ä‘á»™ng quÃ©t vÃ  Ä‘á»“ng bá»™ cÃ¡c video gá»‘c ngÆ°á»�i dÃ¹ng copy vÃ o thÆ° má»¥c Data/.
        TrÃ­ch xuáº¥t Ä‘áº·c trÆ°ng V-JEPA 2 + NeuralFP vÃ  lÆ°u vÃ o SQLite Database theo tÃªn video.
        Ú	reference©ÚcategoryÚfeaturesõ   Lá»—i lÆ°u video õ    vÃ o SQLite: N)rG   Úsync_directoryr   rK   Úupsert_videor   rP   Ú	Exceptionr…   Úerrorrf   ©rL   r[   Únew_cntÚ	cache_cntÚ	all_featsÚfeatÚes          rM   Úsync_data_repositoryz+VideoDetectionPipeline.sync_data_repositoryÐ   sÊ   € ð
 )-Ô(:×(IÒ(IÍ(ÐTeÑ(fÔ(fÑ%ˆ�˜Iàð 	Sð 	SˆDðSØ”×(Ò(­¨d¬oÑ)>Ô)>ÈÐ_cÐ(ÑdÔdÐdÐdøÝð Sð Sð SÝ—’ÐQ°´ÐQÐQÈaÐQÐQÑRÔRÐRÐRÐRÐRÐRÐRøøøøðSøøøà˜	 9Ð,Ð,ó   ª/AÁ
BÁ$%BÂBc                ó6  — | j                              t          |¦  «        \  }}}|D ]n}	 | j                             t          |j        ¦  «        d|¬¦  «         Œ3# t          $ r/}t           	                    d|j
        › d|› �¦  «         Y d}~Œgd}~ww xY w|||fS )uy   
        Tá»± Ä‘á»™ng quÃ©t vÃ  Ä‘á»“ng bá»™ cÃ¡c video má»¥c tiÃªu ngÆ°á»�i dÃ¹ng copy vÃ o thÆ° má»¥c Target/.
        Útargetr¯   r²   r³   N)rG   r´   r   rK   rµ   r   rP   r¶   r…   r·   rf   r¸   s          rM   Úsync_target_repositoryz-VideoDetectionPipeline.sync_target_repositoryÞ   sÊ   € ð )-Ô(:×(IÒ(IÍ*ÐVgÑ(hÔ(hÑ%ˆ�˜IØð 	Sð 	SˆDðSØ”×(Ò(­¨d¬oÑ)>Ô)>ÈÐ\`Ð(ÑaÔaÐaÐaøÝð Sð Sð SÝ—’ÐQ°´ÐQÐQÈaÐQÐQÑRÔRÐRÐRÐRÐRÐRÐRøøøøðSøøøà˜	 9Ð,Ð,r¿   úList[CachedVideoFeatures]c                ó>  — g }t          j        ¦   «         D ]†}|                     ¦   «         rp|j                             ¦   «         t
          v rP| j                             |j        ¦  «        p| j	         
                    |¦  «        }|r|                     |¦  «         Œ‡|S )uX   Láº¥y táº¥t cáº£ cÃ¡c video Ä‘Ã£ cache trong Data/ (Æ°u tiÃªn Ä‘á»�c tá»« SQLite/Cache).)r   r¥   r•   r–   r—   r   rK   Úget_features_by_namerV   rG   Úload_featuresrY   )rL   Úrefsr™   Úfeatss       rM   Úget_cached_referencesz,VideoDetectionPipeline.get_cached_referencesê   s”   € à*,ˆÝÔ!Ñ#Ô#ð 	'ð 	'ˆAØ�yŠy‰{Œ{ð '˜qœxŸ~š~Ñ/Ô/Õ3GÐGÐGØœ×8Ò8¸¼Ñ@Ô@ÐgÀDÔDV×DdÒDdÐefÑDgÔDg�Øð 'Ø—K’K Ñ&Ô&Ð&øØˆrO   c                ó>  — g }t          j        ¦   «         D ]†}|                     ¦   «         rp|j                             ¦   «         t
          v rP| j                             |j        ¦  «        p| j	         
                    |¦  «        }|r|                     |¦  «         Œ‡|S )u5   Láº¥y táº¥t cáº£ cÃ¡c video Ä‘Ã£ cache trong Target/.)r   r¥   r•   r–   r—   r   rK   rÅ   rV   rG   rÆ   rY   )rL   Útargetsr™   rÈ   s       rM   Úget_cached_targetsz)VideoDetectionPipeline.get_cached_targetsô   s”   € à-/ˆÝÔ#Ñ%Ô%ð 	*ð 	*ˆAØ�yŠy‰{Œ{ð *˜qœxŸ~š~Ñ/Ô/Õ3GÐGÐGØœ×8Ò8¸¼Ñ@Ô@ÐgÀDÔDV×DdÒDdÐefÑDgÔDg�Øð *Ø—N’N 5Ñ)Ô)Ð)øØˆrO   Úselected_reference_idsúOptional[List[str]]c           	     ó€  ‡— |r |dd|j         › �¦  «         | j                             |j         ¦  «        p| j                             |¦  «        }|r| j                             |¦  «        s8| j                             ||¦  «        }| j                             |d|¬¦  «         |                      ¦   «         }|s|  	                    |¦  «        \  }}}|st                               d¦  «         g S ‰rˆfd„|D ¦   «         }n|}|r% |dd|j         › d	t          |¦  «        › d
�¦  «         | j                             ||¦  «        }|rV	 | j                             |j         |¦  «         n4# t           $ r'}	t                               d|	› �¦  «         Y d}	~	nd}	~	ww xY w|r |ddt          |¦  «        › d�¦  «         |S )uK  
        Thá»±c hiá»‡n so sÃ¡nh linh hoáº¡t:
        - 1 video target vs Cáº£ kho Data/ (khi selected_reference_ids is None hoáº·c rá»—ng)
        - 1 video target vs 1 vÃ i video tham chiáº¿u cá»¥ thá»ƒ do ngÆ°á»�i dÃ¹ng tÃ­ch chá»�n
        LÆ°u káº¿t quáº£ Ä‘á»‘i soÃ¡t vÃ o báº£ng comparison_history trong CSDL SQLite.
        rS   u"   Ä�ang náº¡p Ä‘áº·c trÆ°ng target: rÁ   r¯   u,   Kho Data/ chÆ°a cÃ³ video tham chiáº¿u nÃ o.c                ó8   •— g | ]}|j         ‰v s	|j        ‰v ¯|‘ŒS r”   )re   rf   )r˜   ÚrrÍ   s     €rM   r›   zIVideoDetectionPipeline.compare_target_with_references.<locals>.<listcomp>  sV   ø€ ð  Dð  Dð  D Q°a´jÐDZÐ6ZÐ6ZÐ^_Ô^hð  mCð  _Cð  _C˜qð  _Cð  _Cð  _CrO   éF   u   Ä�ang Ä‘á»‘i soÃ¡t u    vá»›i u    video tham chiáº¿u...u0   Lá»—i ghi lá»‹ch sá»­ Ä‘á»‘i soÃ¡t vÃ o SQLite: Nrm   u'   Ä�á»‘i soÃ¡t hoÃ n táº¥t: phÃ¡t hiá»‡n r�   )rV   rK   rÅ   rG   rÆ   Úis_cached_and_validÚprocess_and_cache_videorµ   rÉ   r¾   r…   r†   rs   rJ   Úmatch_cachedÚlog_match_historyr¶   r·   )
rL   r}   rÍ   r[   Útarget_featsÚall_refsÚ_Úrefs_to_comparerˆ   r½   s
     `       rM   Úcompare_target_with_referencesz5VideoDetectionPipeline.compare_target_with_referencesþ   s  ø€ ð ð 	aØÐ˜bÐ"_ÐGXÔG]Ð"_Ð"_Ñ`Ô`Ð`à”{×7Ò7Ð8IÔ8NÑOÔOð  GÐSWÔSe×SsÒSsð  uFñ  TGô  TGˆØð 	b 4Ô#5×#IÒ#IÐJ[Ñ#\Ô#\ð 	bØÔ-×EÒEÐFWÐYjÑkÔkˆLØŒK×$Ò$Ð%6ÀÐT`Ð$ÑaÔaÐaà×-Ò-Ñ/Ô/ˆØð 	JØ!×6Ò6Ð7HÑIÔI‰NˆAˆq�(àð 	Ý�NŠNÐIÑJÔJÐJØˆIà!ð 	'ð Dð  Dð  Dð  D¨(ð  Dñ  Dô  DˆOˆOà&ˆOàð 	EØÐ˜bð  #DÐ8IÔ8Nð  #Dð  #DÕWZÐ[jÑWkÔWkð  #Dð  #Dð  #Dñ  Eô  Eð  Eà”,×+Ò+¨L¸/ÑJÔJˆð ð 	UðUØ”×-Ò-Ð.?Ô.DÀgÑNÔNÐNÐNøÝð Uð Uð UÝ—’ÐSÐPQÐSÐSÑTÔTÐTÐTÐTÐTÐTÐTøøøøðUøøøð ð 	sØÐ˜cÐ#qÍSÐQXÉ\Ì\Ð#qÐ#qÐ#qÑrÔrÐràˆs   Å
 E+ Å+
FÅ5FÆFrÁ   FÚ	url_or_idrr   ÚsectionúOptional[str]Údestú
str | PathÚ	auto_syncÚboolr   c                ó  — t          ||||¬¦  «        }|j        rn|rlt          |¦  «                             ¦   «         }d|v r$|r |dd¦  «         |                      |¦  «         n#|r |dd¦  «         |                      |¦  «         |S )uþ   
        Táº£i video hoáº·c 1 Ä‘oáº¡n chá»‰ Ä‘á»‹nh (máº·c Ä‘á»‹nh 1h Ä‘áº§u) tá»« YouTube vÃ o thÆ° má»¥c Target/ hoáº·c Data/.
        Há»— trá»£ tá»± Ä‘á»™ng Ä‘á»“ng bá»™ (auto_sync) Ä‘á»ƒ trÃ­ch xuáº¥t V-JEPA 2 & NeuralFP ngay sau khi táº£i.
        )rÜ   rÝ   rß   r[   ÚdataéZ   u@   Ä�ang Ä‘á»“ng bá»™ vÃ  trÃ­ch xuáº¥t Ä‘áº·c trÆ°ng vÃ o Data/...uB   Ä�ang Ä‘á»“ng bá»™ vÃ  trÃ­ch xuáº¥t Ä‘áº·c trÆ°ng vÃ o Target/...)Údl_yt_videoÚsuccessrr   r—   r¾   rÂ   )rL   rÜ   rÝ   rß   rá   r[   ÚresÚ
dest_lowers           rM   r   z-VideoDetectionPipeline.download_youtube_video0  sÃ   € õ ØØØØ/ð	
ñ 
ô 
ˆð Œ;ð 		?˜9ð 		?Ý˜T™œŸšÑ*Ô*ˆJØ˜Ð#Ð#Ø$ð nØ%Ð% bÐ*lÑmÔmÐmØ×)Ò)Ð*;Ñ<Ô<Ð<Ð<à$ð pØ%Ð% bÐ*nÑoÔoÐoØ×+Ò+Ð,=Ñ>Ô>Ð>Øˆ
rO   )r!   r"   )N)rP   r   r!   rQ   )rP   r   r!   r   )r}   r   r!   r~   )r!   rŠ   )r!   r¬   )r!   rÃ   )NN)r}   r   rÍ   rÎ   r!   r~   )
rÜ   rr   rÝ   rÞ   rß   rà   rá   râ   r!   r   )Ú__name__Ú
__module__Ú__qualname__rN   rc   r|   r‰   r«   r¾   rÂ   rÉ   rÌ   rÛ   r   r   r”   rO   rM   r    r    !   sE  € € € € € ð1Dð 1Dð 1Dð 1Dðl ð/ð /ð /ð /ð /ðF ð!ð !ð !ð !ð !ðL ðð ð ð ð ð6ð ð ð ð ð:-ð -ð -ð -ð -ð
-ð 
-ð 
-ð 
-ð 
-ðð ð ð ðð ð ð ð 7;Øð	0ð 0ð 0ð 0ð 0ðj "4Ø#ØØðð ð ð ð ð ð rO   r    )3Ú__doc__Ú
__future__r   ro   ÚloggingÚpathlibr   Útypingr   r   r   r   ÚnumpyÚnpÚalignment.matcherr
   r   Úaudio.neuralfp_extractorr   Úcore.configr   Ú
core.pathsr   r   r   r   Úindexing.databaser   r   Úindexing.feature_storer   r   r   Úindexing.sqlite_dbr   Úingestion.audio_loaderr   Úingestion.video_loaderr   r   Úingestion.youtube_downloaderr   r   r   ræ   Úvisual.vjepa_extractorr   Ú	getLoggerrê   r…   r    r”   rO   rM   ú<module>r      sÝ  ððð ð #Ð "Ð "Ð "Ð "Ð "à €€€Ø €€€Ø Ð Ð Ð Ð Ð Ø .Ð .Ð .Ð .Ð .Ð .Ð .Ð .Ð .Ð .Ð .Ð .à Ð Ð Ð à <Ð <Ð <Ð <Ð <Ð <Ð <Ð <Ø 7Ð 7Ð 7Ð 7Ð 7Ð 7Ø Ð Ð Ð Ð Ð Ø FÐ FÐ FÐ FÐ FÐ FÐ FÐ FÐ FÐ FÐ FÐ FØ 9Ð 9Ð 9Ð 9Ð 9Ð 9Ð 9Ð 9Ø [Ð [Ð [Ð [Ð [Ð [Ð [Ð [Ð [Ð [Ø -Ð -Ð -Ð -Ð -Ð -Ø 7Ð 7Ð 7Ð 7Ð 7Ð 7Ø JÐ JÐ JÐ JÐ JÐ JÐ JÐ Jðð ð ð ð ð ð ð ð ð ð
 3Ð 2Ð 2Ð 2Ð 2Ð 2à	ˆÔ	˜8Ñ	$Ô	$€ðkð kð kð kð kñ kô kð kð kð krO   