§
    eœÆj™  ã                   óŒ  — d dl Z d dlZd dlZd dlZd dlmZ ej        dk    rC	 ej         	                    d¬¦  «         ej
         	                    d¬¦  «         n# e$ r Y nw xY wdefd„Zd„ Zdd
ededefd„Zedk    rE eej        ¦  «        dk    r$ eej        d         ej        d         ¦  «         dS  ed¦  «         dS dS )é    N)ÚPathÚwin32zutf-8)ÚencodingÚ
video_pathc                 óö  — t          j        | ¦  «        }t          |                     t           j        ¦  «        ¦  «        }|                     t           j        ¦  «        pd}|                     t           j        d¦  «         |                     ¦   «         \  }}|                     t           j        t          d|dz
  ¦  «        ¦  «         |                     ¦   «         \  }}| 
                    ¦   «          ||||fS )Ng      8@r   é   )Úcv2ÚVideoCaptureÚintÚgetÚCAP_PROP_FRAME_COUNTÚCAP_PROP_FPSÚsetÚCAP_PROP_POS_FRAMESÚreadÚmaxÚrelease)r   ÚcapÚtotal_framesÚfpsÚret_headÚ
head_frameÚret_tailÚ
tail_frames           ú,05_Production_Pipeline/continuity_checker.pyÚextract_head_tailr      sÈ   € Ý
Ô
˜:Ñ
&Ô
&€CÝ�s—w’w�sÔ7Ñ8Ô8Ñ9Ô9€LØ
�'Š'•#Ô"Ñ
#Ô
#Ð
+ t€Cð ‡G‚G�CÔ# QÑ'Ô'Ð'ØŸ8š8™:œ:Ñ€Hˆjð ‡G‚G�CÔ#¥S¨¨L¸1Ñ,<Ñ%=Ô%=Ñ>Ô>Ð>ØŸ8š8™:œ:Ñ€Hˆjà‡K‚K�M„M€MØ�z <°Ð4Ð4ó    c                 ó^  — | �|€dS d\  }}t          j        | ||f¦  «        }t          j        |||f¦  «        }t          j        |t           j        ¦  «        }t          j        |t           j        ¦  «        }t          j        |gddgdddgg d¢¦  «        }t          j        |gddgdddgg d¢¦  «        }	t          j        ||ddt           j        ¦  «         t          j        |	|	ddt           j        ¦  «         t          j        ||	t           j        ¦  «        }
t          j        |t           j	        ¦  «        }t          j        |t           j	        ¦  «        }t          j
        ||¦  «        }d	t          j        |¦  «        d
z  z
  }t          d|
¦  «        dz  |dz  z   }t          |¦  «        S )uÞ   
    So sÃ¡nh Ä‘á»™ tÆ°Æ¡ng Ä‘á»“ng thá»‹ giÃ¡c giá»¯a 2 khung hÃ¬nh:
    - Histogram Correlation (Ä‘o lÆ°á»�ng tÆ°Æ¡ng Ä‘á»“ng mÃ u sáº¯c & Ã¡nh sÃ¡ng)
    - Structural Template Match / Normalized Absolute Difference
    Nç        )ih  i€  r   r   é2   é<   )r   é´   r   é   g      ð?g     ào@g333333ã?gš™™™™™Ù?)r	   ÚresizeÚcvtColorÚCOLOR_BGR2HSVÚcalcHistÚ	normalizeÚNORM_MINMAXÚcompareHistÚHISTCMP_CORRELÚCOLOR_BGR2GRAYÚabsdiffÚnpÚmeanr   Úfloat)Úframe_aÚframe_bÚhÚwÚimg_aÚimg_bÚhsv_aÚhsv_bÚhist_aÚhist_bÚ
color_corrÚgray_aÚgray_bÚdiffÚ
diff_scoreÚmatch_scores                   r   Úcompare_framesrA      s‹  € ð €˜'˜/Øˆsð �D€A€qÝŒJ�w  A Ñ'Ô'€EÝŒJ�w  A Ñ'Ô'€Eõ ŒL˜¥Ô 1Ñ2Ô2€EÝŒL˜¥Ô 1Ñ2Ô2€EÝŒ\˜5˜' A q 6¨4°"°b°Ð;KÐ;KÐ;KÑLÔL€FÝŒ\˜5˜' A q 6¨4°"°b°Ð;KÐ;KÐ;KÑLÔL€FÝ„M�&˜& ! Q­¬Ñ8Ô8Ð8Ý„M�&˜& ! Q­¬Ñ8Ô8Ð8Ý” ¨µÔ1CÑDÔD€Jõ Œ\˜%¥Ô!3Ñ4Ô4€FÝŒ\˜%¥Ô!3Ñ4Ô4€FÝŒ;�v˜vÑ&Ô&€DØ�œ ™œ¨Ñ-Ñ.€Jõ �q˜*Ñ%Ô%¨Ñ+°
¸SÑ0@ÑA€KÝ�ÑÔÐr   çÍÌÌÌÌÌä?Úvideo_prev_pathÚvideo_next_pathÚ	thresholdc                 óæ  — t          d¦  «         t          dt          | ¦  «        j        › �¦  «         t          dt          |¦  «        j        › �¦  «         t          | ¦  «        \  }}}}t          |¦  «        \  }}}}|�|€t          d¦  «         dS t	          ||¦  «        }t          d|d›�¦  «         ||k    rt          d¦  «         d	|fS t          d
¦  «         t          d¦  «         d|fS )Nu#   
[*] Ä�ang kiá»ƒm tra ná»‘i tiáº¿p:u       - Shot trÆ°á»›c: z    - Shot sau:   uQ       [!] Lá»—i: KhÃ´ng thá»ƒ trÃ­ch xuáº¥t khung hÃ¬nh tá»« má»™t trong hai video.)Fr   u2       ðŸ‘‰ Ä�iá»ƒm tÆ°Æ¡ng Ä‘á»“ng chuyá»ƒn cáº£nh: z.2%uY       [âœ“] KHá»šP Máº CH PHIM: Hai shot liá»�n máº¡ch, khÃ´ng cáº§n chuyá»ƒn cáº£nh phá»¥.TuW       [!] Cáº¢NH BÃ�O KHá»°NG HÃŒNH: Ä�á»™ lá»‡ch thá»‹ giÃ¡c vÆ°á»£t ngÆ°á»¡ng an toÃ n.u]       ðŸ‘‰ Cáº§n bá»• sung Ä‘oáº¡n ná»‘i (Bridging Transition) hoáº·c Cross-Dissolve 1-2 giÃ¢y.F)Úprintr   Únamer   rA   )rC   rD   rE   Ú_Ú	tail_prevÚ	head_nextÚscores          r   Úcheck_shot_continuityrM   @   s  € Ý	Ð
1Ñ2Ô2Ð2Ý	Ð
>¥$ Ñ"7Ô"7Ô"<Ð
>Ð
>Ñ?Ô?Ð?Ý	Ð
;�t OÑ4Ô4Ô9Ð
;Ð
;Ñ<Ô<Ð<å*¨?Ñ;Ô;Ñ€A€y�!�QÝ*¨?Ñ;Ô;Ñ€Iˆq�!�QàÐ˜IÐ-ÝÐaÑbÔbÐbØˆzå˜9 iÑ0Ô0€EÝ	Ð
J¸uÐ
JÐ
JÐ
JÑKÔKÐKà�	ÒÐÝÐjÑkÔkÐkØ�Uˆ{ÐåÐhÑiÔiÐiÝÐnÑoÔoÐoØ�eˆ|Ðr   Ú__main__é   r   é   uK   Sá»­ dá»¥ng: python continuity_checker.py <video_truoc.mp4> <video_sau.mp4>)rB   )ÚosÚsysr	   Únumpyr.   Úpathlibr   ÚplatformÚstdoutÚreconfigureÚstderrÚ	ExceptionÚstrr   rA   r0   rM   Ú__name__ÚlenÚargvrG   © r   r   ú<module>r_      sg  ðØ 	€	€	€	Ø 
€
€
€
Ø 
€
€
€
Ø Ð Ð Ð Ø Ð Ð Ð Ð Ð ð „<�7ÒÐðØŒ
×Ò¨ÐÑ0Ô0Ð0ØŒ
×Ò¨ÐÑ0Ô0Ð0Ð0øØð ð ð Øˆðøøøð5 #ð 5ð 5ð 5ð 5ð ð ð ðBð ¨3ð Àð ÐQVð ð ð ð ð. ˆzÒÐØ
€sˆ3Œ8�}„}˜ÒÐØÐ˜cœh qœk¨3¬8°A¬;Ñ7Ô7Ð7Ð7Ð7àˆÐ[Ñ\Ô\Ð\Ð\Ð\ð	 Ðs   £6A ÁA"Á!A"