
    if                     B    d dl Z d dlZd dlmZ d dlmZ d ZddZd Z	dS )	    N)PipelineInputError)
dump_imagec                 ^   | j         dk    rd S t          j        |           }|j         dk     r*t          |d                   t          |d                   fS t          |t          |j         dz                               }t          |t          |j         dz                               }||fS )Nr      皙?gffffff?)sizenpsortint)indicesidxlohis       !/code/app/lib/handwriting/grid.py_percentile_boundsr      s    |qt
''

C
x"}}3q6{{CBLL((	SSX_%%&	'	'B	SSX_%%&	'	'Br6M    Tc                 *   t          j        | dk    |rdnd          }|j        dk    rd|dz
  fS |                                dk    r!t	          |                                          nd}t          d|dz            }t          j        ||k              d         }|j        dk    rt          j        |dk              d         }|j        dk    rd|dz
  fS t          |          }|*t          |d                   t          |d                   fS |S )Nr      axis              $@g?r   )r
   sumr	   maxfloatwherer   r   )	line_mask	axis_sizeis_rowssumsmax_sumthreshr   boundss           r   _bounds_from_projectionr%      s   6)a-7&9aa:::DyA~~)a-#'88::>>eDHHJJsGw~&&F
(4&=
!
!!
$C
x1}}htax  #
x1}})a-$$F~3q6{{CBLL((Mr   c           	      J   | j         d d         \  }}t          j        | dt          j        t          j        dd          }t          j        t          j        t          d|dz            df          }t          j        t          j        dt          d|dz            f          }t          j        t          j	        ||d          |d          }t          j        t          j	        ||d          |d          }t          j
        ||          }	t          |d|	           t          j        t          j        t          d|d	z            t          d|d	z            f          }
t          j        |	t          j        |
          }t          j        |t          j        t          j                  \  }}|rt#          ||z            }g }|D ]?}t          j        |          }||d
z  k     r ||dz  k    r*|                    |           @|r5t          |t          j                  }t          j        |          \  }}}}ng }|sYt+          ||d          \  }}t+          ||d          \  }}||k    s||k    rt-          d          ||}}||z
  dz   ||z
  dz   }}t/          j        |dk    d          }|j        dk    r|                                dk    r!t#          |                                          nd}t          d|dz            }t/          j        ||k              d         }|j        dk    rht7          |d                   }t7          |d                   }|dz   ||z   k     rt          |dz
  d          }|dz
  |k    rt          |dz   |z
  d          }d} t          || z
  d          }t          || z
  d          }t9          |d| z  z   ||z
            }t9          |d| z  z   ||z
            }| |||z   |||z   f         }!t          |d|!           |!||||ffS )N               r   r   za6_grid_mask.jpgP   r   g\(\?)keyT)r    FzyCould not detect the grid. Please upload a clear photo of the full template with visible grid lines and all four markers.r   r   r   r   gffffff?r         za7_grid_cropped.jpg)shapecv2adaptiveThresholdADAPTIVE_THRESH_MEAN_CTHRESH_BINARY_INVgetStructuringElement
MORPH_RECTr   dilateerode
bitwise_orr   morphologyExMORPH_CLOSEfindContoursRETR_EXTERNALCHAIN_APPROX_SIMPLEr   contourAreaappendboundingRectr%   r   r
   r   r	   r   r   min)"rectified_grayout_dirhwthrhoriz_kernelvert_kernelhorizvert	grid_maskclose_kernelgrid_mask_closedcontours_	page_areafilteredcareagxgygwghtopbottomleftright	horiz_sumr"   line_threshrows
first_line	last_linepad	grid_crops"                                     r   detect_grid_roird   $   sH   #DAq

"

 C ,S^c"a2g>N>NPQ=RSSL+CNQBR@P@P<QRRKJsylA66aHHE:ci[!44k1EEDud++Iw*I666 ,	Rb		3r17++, L '	3?LQQ"#+S-D KHa  !a%LL	 	 	A?1%%Di$&&&i$&&&OOA 	H#/222A -a00NBBH  	4-eQEEEV-dAuEEEeS==ETMM$@   sB!6C<!#3B uqyq)))I~,5MMOOa,?,?%	(((S$$//x	K/0039q==T!WJDHIA~R''a++1}r!!)a-2-q11
C	R#Xq		B	R#Xq		B	R!c'\1r6	"	"B	R!c'\1r6	"	"BrBG|R"r'\9:Iw-y999r2r2&&&r   )T)
r1   numpyr
   app.lib.handwriting.errorsr   app.lib.handwriting.io_utilsr   r   r%   rd    r   r   <module>ri      s    



     9 9 9 9 9 9 3 3 3 3 3 3     "R' R' R' R' R'r   