B
    Á’–]  ã               @   s  d dl mZ d dlmZ d dlZd dlZd dlZd dlZd dl	m
Z
 dZG dd„ dƒZG dd	„ d	ƒZG d
d„ deƒZG dd„ de
jƒZedkrþdZeeddZe ¡  e ¡  xNedƒD ]BZe ¡  e ¡ Zx"eD ]Ze de¡ e d¡ qÒW e d¡ q¸W dS )é    )ÚThread)ÚFileVideoStreamN)ÚQtCoreTc               @   s   e Zd Zdd„ Zdd„ ZdS )Ú
DepthSlicec             C   s   d | _ d| _d | _d S )Néÿÿÿÿ)ÚpointsZ	nom_depthÚlabel)Úself© r
   ú=X:\800139.EyeRIS\EyeRIS.Software\ThreeDR\ThreadedProcessor.pyÚ__init__   s    zDepthSlice.__init__c             C   s(   | j d kr|| _ nt | j |f¡| _ d S )N)r   ÚnpÚconcatenate)r	   r   r
   r
   r   Ú
add_points   s    
zDepthSlice.add_pointsN)Ú__name__Ú
__module__Ú__qualname__r   r   r
   r
   r
   r   r      s   r   c               @   s   e Zd Zddd„Zdd„ ZdS )	ÚFrameProcessoréð   éú   c             C   s   d| _ || _|| _d S )NF)ZcropÚlowÚhigh)r	   r   r   r
   r
   r   r      s    zFrameProcessor.__init__c             C   s¼   t  || j| j¡}t dtj¡}t  |t j|¡}t  	|t j
t j¡\}}d}d}| ¡ }	tƒ }
xBt|ƒD ]6\}}t  || d¡dkrft  |	||ddt j|d¡ qfW |
 t |¡ ¡ ¡ |	|
fS )N)é   r   r   r   Fé(   )r   éÿ   r   é   )Úcv2ÚCannyr   r   r   ÚonesÚuint8ÚmorphologyExÚMORPH_CLOSEÚfindContoursÚ	RETR_LISTÚCHAIN_APPROX_NONEÚcopyr   Ú	enumerateÚ	arcLengthÚdrawContoursÚLINE_8r   ÚvstackÚsqueeze)r	   ÚframeÚedgesÚkernelZedges_filteredZcontoursZ	hierarchyZmax_area_indexZmax_areaZ
cont_imageÚdsÚindÚcontr
   r
   r   Úproc    s    zFrameProcessor.procN)r   r   )r   r   r   r   r2   r
   r
   r
   r   r      s   
r   c               @   s*   e Zd Zeƒ fdd„Zdd„ Zdd„ ZdS )ÚThreadedProcessorc             C   s8   t  | ¡ || _t |¡| _d| _g | _|| _d| _	d S )NFr   )
r   r   Úframesr%   ÚdeepcopyÚprocessed_framesÚfinishedÚthree_dr_dataÚ	processorÚprocessed_counter)r	   r4   r9   r
   r
   r   r   2   s    
zThreadedProcessor.__init__c             C   s   | j  |¡S )N)r9   r2   )r	   r,   r
   r
   r   Úapply_processor;   s    z!ThreadedProcessor.apply_processorc             C   s\   d| _ d| _xDt| jƒD ]6\}}|  |¡\| j|< }| j |¡ |  jd7  _qW d| _ d S )NFr   é   T)r7   r:   r&   r4   r;   r6   r8   Úappend)r	   Úir,   r/   r
   r
   r   Úrun>   s    zThreadedProcessor.runN)r   r   r   r   r   r;   r?   r
   r
   r
   r   r3   0   s   	r3   c               @   s‚   e Zd Ze e¡Ze e¡Zddd„Zdd„ Z	dd„ Z
d	d
„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ ZdS )ÚVideoManagerNé   c             C   sR   t j | ¡ || _d| _d| _d| _d | _g | _g | _	g | _
d| _|| _|| _d S )NFr   r   g        )r   ÚQObjectr   Ú
video_pathZ	is_loadedÚcurrent_frameÚframes_in_fileÚvideor4   Úframes_chunksÚ
processorsÚvideo_load_timeÚ	transformÚncpus)r	   rC   rJ   rK   r
   r
   r   r   L   s    zVideoManager.__init__c             C   sz   t | jƒ}t|| j ƒ}d}xXt| jƒD ]J}|| |krT| j | j||| … ¡ n| j | j|d … ¡ ||7 }q(W d S )Nr   )Úlenr4   ÚintrK   ÚrangerG   r=   )r	   Ztotal_framesÚ
chunk_sizeÚidxr>   r
   r
   r   Úchunk_video[   s    
zVideoManager.chunk_videoc             C   s4   g | _ x(t| jƒD ]}| j  t| j| ƒ¡ qW d S )N)rH   rN   rK   r=   r3   rG   )r	   r>   r
   r
   r   Úsetup_processorsg   s    zVideoManager.setup_processorsc             C   s&   x t | jƒD ]}| j|  ¡  qW d S )N)rN   rK   rH   Ústart)r	   r>   r
   r
   r   Ústart_processorsl   s    zVideoManager.start_processorsc             C   s&   x t | jƒD ]}| j|  ¡  qW d S )N)rN   rK   rH   Ústop)r	   r>   r
   r
   r   Ústop_processorsp   s    zVideoManager.stop_processorsc             C   sL   d}d}x2t | jƒD ]$}| j| js(d}|| j| j7 }qW | j |¡ |S )Nr   TF)rN   rK   rH   r7   r:   Úframes_processedÚemit)r	   ZnprocZis_doner>   r
   r
   r   Údonet   s    zVideoManager.donec             C   s.   t dt| jƒ ƒ t dt| j| j ƒ ƒ d S )NzLoading Time: zLoading FPS: )ÚprintÚstrrI   rE   )r	   r
   r
   r   Úprint_load_stats~   s    zVideoManager.print_load_statsc             C   sX   |   ¡  |  ¡  d}t ¡ }x|s6|  ¡ }t d¡ qW trTtdtt ¡ | ƒ ƒ d S )NFgš™™™™™¹?zProc time: )rR   rT   ÚtimerY   ÚsleepÚDEBUGrZ   r[   )r	   rY   Ztstartr
   r
   r   Ú
do_process‚   s    zVideoManager.do_processc             C   s,   g }x"t | jƒD ]}|| j| j7 }qW |S )N)rN   rK   rH   r6   )r	   Úoutputr>   r
   r
   r   Úget_proc_framesŽ   s    zVideoManager.get_proc_framesc             C   s,   g }x"t | jƒD ]}|| j| j7 }qW |S )N)rN   rK   rH   r8   )r	   ra   r>   r
   r
   r   Úget_3dr_data”   s    zVideoManager.get_3dr_datac             C   sª   t rtdƒ g | _d| _t| j| jdd ¡ | _t	 	¡ | _
xH| j ¡ r‚| j ¡ }|d k	r<| j | j¡ | j |¡ |  jd7  _q<W | j ¡  t	 	¡ | j
 | _
|  ¡  d S )NzLoading video using FVS...r   i   )rJ   Z
queue_sizer<   )r_   rZ   r4   rE   r   rC   rJ   rS   rF   r]   rI   ÚmoreÚreadÚframes_loadedrX   r=   rU   r\   )r	   Úfr
   r
   r   Úload_FVS›   s     


zVideoManager.load_FVSc             C   s    t rtdƒ g | _d| _t | j¡| _t ¡ | _	xH| j 
¡ \}}|rt| jd k	rX|  |¡}| j |¡ |  jd7  _q2P q2W | j ¡  t ¡ | j	 | _	|  ¡  d S )NzLoading video using CV2...r   r<   )r_   rZ   r4   rE   r   ÚVideoCapturerC   rF   r]   rI   re   rJ   r=   Úreleaser\   )r	   Úokr,   r
   r
   r   Úload_CV2¯   s"    



zVideoManager.load_CV2)NrA   )r   r   r   r   ÚSignalrM   rf   rW   r   rQ   rR   rT   rV   rY   r\   r`   rb   rc   rh   rl   r
   r
   r
   r   r@   G   s   



r@   Ú__main__z6C:\Users\proberts\Desktop\151120_SC1ATK62_Batho_10.mové    )rK   r<   ZFramesé!   g      à?)Ú	threadingr   Zfilevideostreamr   Únumpyr   r   r]   r%   Úpyqtgraph.Qtr   r_   r   r   r3   rB   r@   r   rC   Úmgrrh   rQ   rN   r>   r`   rb   Zproc_framesrg   ÚimshowÚwaitKeyr^   r
   r
   r
   r   Ú<module>   s.   ~
