§
    ƒØjR<  ã                   óœ  — d dl Z d dlZd dlZd dlZd dlmZ d dlm	Z
 d dlmZmZmZmZmZ d dlmZmZmZmZ  ee¦  «        Z G d„ de j        ¦  «        Z G d„ d	¦  «        Zd
„ Zd„ Zd„ Z	 	 	 	 	 d'd„Z	 	 	 	 	 d(d„Zd„ Z d„ Z!d„ Z"	 	 	 	 	 	 	 	 d)d„Z#d„ Z$edk    r±dZ%dZ% ej&        d¦  «        Z' ej&        d ¦  «        Z( ej&        d!¦  «        Z) ej&        d"¦  «        Z* ej&        d#¦  «        Z+ ej,        e'j-        d$z   ¦  «        d%z  Z. ej/        e*e)z   d k    ¦  «        Z0d e.e0d          e0d&         f<    e#¦   «         Z1 e$e1e.¦  «        Z2dS dS )*é    N)Úlayers)ÚNoteHeadConstant)Úget_bboxÚ
get_centerÚmerge_nearby_bboxÚrm_merge_overlap_bboxÚ
to_rgb_img)Úget_unit_sizeÚfind_closest_staffsÚget_global_unit_sizeÚ
get_loggerc                   ó6   — e Zd ZdZdZdZdZdZdZdZ	dZ
d	Zd
ZdS )ÚNoteTyper   é   é   é   é   é   é   é   é   é	   N)Ú__name__Ú
__module__Ú__qualname__ÚWHOLEÚHALFÚQUARTERÚEIGHTHÚ	SIXTEENTHÚTHIRTY_SECONDÚSIXTY_FOURTHÚTRIPLETÚOTHERSÚHALF_OR_WHOLE© ó    úŽ/Users/tedpeters/Documents/Projects/Claude Projects/Misc Tools/notename-sheets/.venv/lib/python3.11/site-packages/oemer/notehead_extraction.pyr   r      sB   € € € € € Ø€EØ€DØ€GØ€FØ€IØ€MØ€LØ€GØ€Fð €M€M€Mr'   r   c                   ót   — e Zd Zd„ Zedefd„¦   «         Zej        defd„¦   «         Zdefd„Zd„ Z	d„ Z
d	„ Zd
S )ÚNoteHeadc                 óÊ   — g | _         d | _        d| _        d | _        d | _        d | _        d | _        d | _        d | _        d| _	        d | _
        d | _        d | _        d | _        d S )NF)ÚpointsÚpitchÚhas_dotÚbboxÚstem_upÚ
stem_rightÚtrackÚgroupÚstaff_line_posÚinvalidÚidÚnote_group_idÚsfnÚ_label©Úselfs    r(   Ú__init__zNoteHead.__init__    sl   € Ø#%ˆŒØˆŒ
Ø"ˆŒØ!%ˆŒ	Ø!ˆŒØ $ˆŒØˆŒ
ØˆŒ
Ø#'ˆÔØ"ˆŒØˆŒØ"&ˆÔØˆŒð !%ˆŒˆˆr'   Úreturnc                 óh   — | j         r%t                               d| j        › d�¦  «         d S | j        S )NzNote z is not a valid note.)r5   ÚloggerÚwarningr6   r9   r:   s    r(   ÚlabelzNoteHead.label2   s9   € àŒ<ð 	Ý�NŠNÐA 4¤7ÐAÐAÐAÑBÔBÐBØ�4ØŒ{Ðr'   rA   c                 ól   — | j         �%t                               d| j         › d�¦  «         d S || _         d S )NzThe label has been set to: zG. Use 'force_set_label' instead if you really want to modify the label.)r9   r?   Údebug©r;   rA   s     r(   rA   zNoteHead.label9   sO   € àŒ;Ð"Ý�LŠLð c°t´{ð cð cð cñ dô dð dàˆFØˆŒˆˆr'   c                 óŒ   — t                                d| j        › d|› �¦  «         t          |t          ¦  «        sJ ‚|| _        d S )NzForce set label from z to )r?   rC   rA   Ú
isinstancer   r9   rD   s     r(   Úforce_set_labelzNoteHead.force_set_labelA   sH   € Ý�ŠÐD¨T¬ZÐDÐD¸UÐDÐDÑEÔEÐEÝ˜%¥Ñ*Ô*Ð*Ð*Ð*ØˆŒˆˆr'   c                 ó>   — | j                              ||f¦  «         d S ©N)r,   Úappend)r;   ÚxÚys      r(   Ú	add_pointzNoteHead.add_pointF   s"   € ØŒ×Ò˜A˜q˜6Ñ"Ô"Ð"Ð"Ð"r'   c                 ó"   — | j         |j         k     S rI   )r4   )r;   Únts     r(   Ú__lt__zNoteHead.__lt__I   s   € àÔ" RÔ%6Ò6Ð6r'   c                 óô   — d| j         › dt          | j        ¦  «        › d| j        › d| j        › d| j        › d| j        › d| j        › d| j        › d	| j	        › d
| j
        › d| j         › d| j        › d| j        › d�S )Nz	Notehead z(
	Points: z
	Bounding box: z
	Stem up: z	
	Track: z	
	Group: z	
	Pitch: z
	Dot: z	
	Label: z
	Staff line pos: z
	Is valid: z
	Note group ID: z
	Sharp/Flat/Natural: z
)
)r6   Úlenr,   r/   r0   r2   r3   r-   r.   rA   r4   r5   r7   r8   r:   s    r(   Ú__repr__zNoteHead.__repr__M   sô   € ð˜4œ7ð ð Ý˜Tœ[Ñ)Ô)ðð à#œyðð ð œ,ðð ð œ
ð	ð ð
 œ
ðð ð œ
ðð ð ”lðð ð œ
ðð ð "&Ô!4ðð ð  $œ|Ð+ðð ð !%Ô 2ðð ð &*¤Xðð ð ð 	r'   N)r   r   r   r<   Úpropertyr   rA   ÚsetterrG   rM   rP   rS   r&   r'   r(   r*   r*      s»   € € € € € ð%ð %ð %ð$ ð�xð ð ð ñ „Xðð „\ð˜8ð ð ð ñ „\ðð Xð ð ð ð ð
#ð #ð #ð7ð 7ð 7ðð ð ð ð r'   r*   c                 óâ  — t          t          |dz  ¦  «        ¦  «        }t          j        t          j        ||f¦  «        }t          j        t          j        |                      t          j	        ¦  «        |¦  «        |¦  «        } t          t          |t          j        z  ¦  «        ¦  «        t          t          |t          j        z  ¦  «        ¦  «        f}t          j        t          j        |¦  «        }t          j        |                      t          j	        ¦  «        |¦  «        }t          j        t          j        |d         dz   |d         dz   f¦  «        }t          j        ||¦  «        S )Nr   r   r   )ÚintÚroundÚcv2ÚgetStructuringElementÚMORPH_ELLIPSEÚerodeÚdilateÚastypeÚnpÚuint8ÚnhcÚNOTEHEAD_MORPH_WIDTH_FACTORÚNOTEHEAD_MORPH_HEIGHT_FACTOR)ÚpredÚ	unit_sizeÚ
small_sizeÚ	small_kerÚsizeÚkernelÚimgs          r(   Úmorph_noteheadrk   ^   s  € Ý•U˜9 q™=Ñ)Ô)Ñ*Ô*€JÝÔ)­#Ô*;¸jÈ*Ð=UÑVÔV€IÝŒ9•S”Z §¢­B¬HÑ 5Ô 5°yÑAÔAÀ9ÑMÔM€Då�E�)�CÔ;Ñ;Ñ<Ô<Ñ=Ô=Ý�E�)�CÔ<Ñ<Ñ=Ô=Ñ>Ô>ð€Dõ Ô&¥sÔ'8¸$Ñ?Ô?€FÝ
Œ)�D—K’K¥¤Ñ)Ô)¨6Ñ
2Ô
2€CÝÔ&¥sÔ'8¸4À¼7À1¹9ÀdÈ1ÄgÈaÁiÐ:PÑQÔQ€FÝŒ:�c˜6Ñ"Ô"Ð"r'   c                 óR  — || d         | d         …| d         | d         …f         }t          j        |dk    ¦  «        \  }}t          |¦  «        dk    rd S t          j        |¦  «        | d         z   dz
  }t          j        |¦  «        | d         z   dz   }| d         || d         |fS )Nr   r   r   r   )r_   ÚwhererR   ÚminÚmax)r/   Ú	noteheadsÚregionÚysÚ_ÚtopÚbottoms          r(   Úadjust_bboxrv   l   s¡   € Ø�t˜A”w˜t Aœw�¨¨Q¬°°Q´¨Ð7Ô8€FÝŒH�V˜A’XÑÔ�E€BˆÝ
ˆ2�w„w�!‚|€|àˆtÝ
Œ&�‰*Œ*�t˜A”wÑ
 Ñ
"€CÝŒV�B‰ZŒZ˜$˜qœ'Ñ! AÑ%€FØ�ŒG�S˜$˜qœ' 6Ð*Ð*r'   c           	      óÐ  — | d         | d         z
  }| d         | d         z
  }t          | ¦  «        \  }}t          j        |z  }|}g }	t          ||z
  ¦  «        t          ||dz  z
  ¦  «        k    rœ| d         | d         || d         f}
|| d         | d         | d         f}t	          |
|¦  «        }
t	          ||¦  «        }|
�$|	                     t          |
||¦  «        ¦  «         |�$|	                     t          |||¦  «        ¦  «         t          |	¦  «        dk    r.g }|	D ]&}|                     t          |||¦  «        ¦  «         Œ'|}	n˜t          t          ||z  ¦  «        ¦  «        }|dk    rs||z  }t          |¦  «        D ]^}| d         t          | d         ||z  z   ¦  «        | d         t          | d         |dz   |z  z   ¦  «        f}|	                     |¦  «         Œ_|	S )Nr   r   r   r   )r   ra   ÚNOTEHEAD_SIZE_RATIOÚabsrv   ÚextendÚcheck_bbox_sizerR   rW   rX   ÚrangerJ   )r/   rp   re   ÚwÚhÚcen_xrs   Únote_wÚnote_hÚnew_bboxÚleft_boxÚ	right_boxÚtmp_newÚboxÚ	num_notesÚsub_hÚiÚsub_boxs                     r(   r{   r{   w   s	  € ØˆQŒ�$�q”'Ñ€AØˆQŒ�$�q”'Ñ€AÝ˜$ÑÔ�H€Eˆ1ÝÔ$ yÑ0€FØ€Fà€HÝ
ˆ1ˆv‰:�„�˜Q ¨¡™\Ñ*Ô*Ò*Ð*à˜”G˜T !œW e¨T°!¬WÐ5ˆØ˜D œG T¨!¤W¨d°1¬gÐ6ˆ	õ ˜x¨Ñ3Ô3ˆÝ 	¨9Ñ5Ô5ˆ	ð ÐØ�OŠO�O¨H°iÀÑKÔKÑLÔLÐLØÐ Ø�OŠO�O¨I°yÀ)ÑLÔLÑMÔMÐMõ ˆ8�}„}�qÒÐØˆØð 	Gð 	GˆCØ�NŠN�?¨3°	¸9ÑEÔEÑFÔFÐFÐFØˆˆå�˜a &™jÑ)Ô)Ñ*Ô*ˆ	Ø�qŠ=ˆ=Ø˜‘NˆEÝ˜9Ñ%Ô%ð )ð )�à˜”GÝ˜$˜qœ' A e¡GÑ+Ñ,Ô,Ø˜”GÝ˜$˜qœ' Q q¡S¨%¡KÑ/Ñ0Ô0ð	�ð —’ Ñ(Ô(Ð(Ð(à€Or'   çš™™™™™Ù?r   ç333333Ó?r   ç      à?c                 ól  — t          j        d¦  «        }|d         d         }|d         d         }	g }
| D ]þ}t          |¦  «        \  }}t          ||¦  «        }||t          j        |z  z   k     s||	k    rŒA|d         |d         z
  }|d         |d         z
  }|||z  k     s	|||z  k    rŒv|||z  t          j        z  k     s|||z  t          j        z  k    rŒ£||d         |d         …|d         |d         …f         }||z  |z  }||dk             j        }||k     rŒé|
                     |¦  «         Œÿ|
S )NÚzonesr   éÿÿÿÿr   r   r   )	r   Ú	get_layerr   r
   ra   ÚCLEF_ZONE_WIDTH_UNIT_RATIOrx   rh   rJ   )ÚbboxesÚnoteheadÚmin_h_ratioÚmax_h_ratioÚmin_w_ratioÚmax_w_ratioÚmin_area_ratior�   Úmin_xÚmax_xÚvalid_bboxesr/   r   Úcen_yre   r~   r}   rq   Ú	min_countÚcounts                       r(   Úfilter_notehead_bboxr    ¤   sx  € õ Ô˜WÑ%Ô%€Eð �!ŒH�QŒK€EØ�"ŒI�bŒM€Eà€LØð "ð "ˆÝ! $Ñ'Ô'‰ˆˆuÝ! %¨Ñ/Ô/ˆ	ð �E�CÔ:¸9ÑDÑDÒDÐDÈ%ÐRWÊ-È-Øð �ŒG�d˜1”gÑˆØ�ŒG�d˜1”gÑˆØ�	˜+Ñ%Ò%Ð%¨1¨y¸Ñ/DÒ+DÐ+DØØ�	˜+Ñ%¥cÔ&=Ñ=Ò=Ð=Ø˜	 +Ñ-­cÔ.EÑEÒEÐEØð ˜$˜qœ' $ q¤'˜/¨4°¬7°4¸´7¨?Ð:Ô;ˆØ˜‘E˜NÑ*ˆ	Ø�v˜a’xÔ Ô%ˆØ�9ÒÐØà×Ò˜DÑ!Ô!Ð!Ð!ØÐr'   ç333333ã?c           	      ó  — t                                d¦  «         t          | |¬¦  «        }t          |¦  «        }t	          |¦  «        }g }	|D ]>}
t          t          |
¦  «        Ž }t          |
| |¦  «        }
|	                     |
¦  «         Œ?t                                dt          |	¦  «        ¦  «         t                                d¦  «         t          |	||||||¬¦  «        }t                                dt          |¦  «        ¦  «         |S )NzMorph noteheads)re   zDetected noteheads: %dzFiltering noteheads©r•   r–   r—   r˜   r™   z&Detected noteheads after filtering: %d)r?   rC   rk   r   r   r
   r   r{   rz   rR   r    )rd   Úglobal_unit_sizer•   r–   r—   r˜   r™   Únoter“   Úresult_bboxesr†   re   s               r(   Úget_notehead_bboxr§   Ò   s	  € õ ‡L‚LÐ"Ñ#Ô#Ð#Ý˜$Ð*:Ð;Ñ;Ô;€DÝ�d‰^Œ^€FÝ" 6Ñ*Ô*€FØ€MØð "ð "ˆÝ!¥:¨c¡?¤?Ð3ˆ	Ý˜c 4¨Ñ3Ô3ˆØ×Ò˜SÑ!Ô!Ð!Ð!Ý
‡L‚LÐ)­3¨}Ñ+=Ô+=Ñ>Ô>Ð>å
‡L‚LÐ&Ñ'Ô'Ð'Ý!ØØØØØØØ%ðñ ô €Fõ ‡L‚LÐ9½3¸v¹;¼;ÑGÔGÐGØ€Mr'   c                 ó¢  — t          j        | ¦  «        }|j        \  }}t          |¦  «        D �]Ÿ}d}g }g }||k     r|||f         dk    rn|dz  }||k     °||k     r|||f         dk    rn|dz  }||k     °||k     rD|||f         dk    rn5|                     |¦  «         |                     |¦  «         |dz  }||k     °D||k     r/t          j        |¦  «        }t          j        |¦  «        }d|||f<   t          |¦  «        D ]Ç}d}g }g }||k     r|||f         dk    rn|dz  }||k     °||k     r|||f         dk    rn|dz  }||k     °||k     rD|||f         dk    rn5|                     |¦  «         |                     |¦  «         |dz  }||k     °D||k     r/t          j        |¦  «        }t          j        |¦  «        }d|||f<   ŒÈ�Œ¡|S )Nr   r   )r_   ÚcopyÚshaper|   rJ   Úarray)	rq   Útarr~   r}   ÚyiÚcurÚcand_yÚcand_xÚxis	            r(   Ú	fill_holer²   ô   sc  € Ý
Œ'�&‰/Œ/€CàŒ9�D€A€qõ �A‰hŒhð -(ñ -(ˆØˆØˆØˆØ�AŠgˆgØ�2�s�7Œ|˜aÒÐØØ�1‰HˆCð �AŠgˆgð �AŠgˆgØ�2�s�7Œ|˜qÒ Ð ØØ�1‰HˆCð �AŠgˆgð �AŠgˆgØ�2�s�7Œ|˜aÒÐØØ�MŠM˜"ÑÔÐØ�MŠM˜#ÑÔÐØ�1‰HˆCð �AŠgˆgð �Š7ˆ7Ý”X˜fÑ%Ô%ˆFÝ”X˜fÑ%Ô%ˆFØ"#ˆC�˜�Ñõ ˜‘(”(ð 	(ð 	(ˆBØˆCØˆFØˆFØ˜’'�'Ø�s˜B�w”< !Ò#Ð#ØØ�q‘�ð ˜’'�'ð ˜’'�'Ø�s˜B�w”< 1Ò$Ð$ØØ�q‘�ð ˜’'�'ð ˜’'�'Ø�s˜B�w”< !Ò#Ð#ØØ—’˜cÑ"Ô"Ð"Ø—’˜bÑ!Ô!Ð!Ø�q‘�ð ˜’'�'ð �QŠwˆwÝœ &Ñ)Ô)�Ýœ &Ñ)Ô)�Ø&'��F˜F�NÑ#øñ+	(ð, €Jr'   c                 ó   ‡— g }| D �]ö}t          ¦   «         Š|‰_        ||d         |d         …|d         |d         …f         }t          j        |dk    ¦  «        \  }}||d         z  }||d         z  }t	          ||¦  «        D ]\  }}‰                     ||¦  «         Œˆfd„}	t          |¦  «        \  }
}t          |
|¦  «        \  }}|j        |j        k    s|j	        |cxk    r|j
        k    rn n |	|¦  «         |}nN|j        |j        k     r||fn||f\  }}|j        |j        z   dz  }||k     r |	|¦  «         |}n |	|¦  «         |}|j        dz  }d„ |j        d d d…         D ¦   «         }g }t          |d d…         ¦  «        D ]+\  }}|||dz            z   dz  }|                     |¦  «         Œ,t          |¦  «        D ]!\  }}|                     |dz  dz   |¦  «         Œ"|d         |z   g|z   |d         |z
  gz   }t          j        t          j        t          j        |¦  «        |z
  ¦  «        ¦  «        }d|cxk     rt'          |¦  «        dz
  k     rn n|‰_        n}|dk    r3t#          |d         |z
  ¦  «        }t+          ||z  ¦  «        }| ‰_        nDt#          |d         |z
  ¦  «        }t+          ||z  ¦  «        t'          |¦  «        z   dz
  }|‰_        |                     ‰¦  «         �Œø|S )Nr   r   r   r   c                 ó8   •— | j         ‰_         | j        ‰_        d S rI   )r3   r2   )ÚstÚnns    €r(   Úassign_group_trackz%gen_notes.<locals>.assign_group_track;  s   ø€ Ø”xˆBŒHØ”xˆBŒHˆHˆHr'   c                 ó   — g | ]	}|j         ‘Œ
S r&   )Úy_center)Ú.0Úls     r(   ú
<listcomp>zgen_notes.<locals>.<listcomp>U  s   € Ð=Ð=Ð= !�1”:Ð=Ð=Ð=r'   r�   )r*   r/   r_   rm   ÚziprM   r   r   r¹   Úy_upperÚy_lowerre   ÚlinesÚ	enumeraterJ   ÚinsertÚargminry   r«   rR   r4   rX   )r“   ÚsymbolsÚnotesr/   rq   rr   ÚxsrL   rK   r·   r   r�   Úst1Úst2Ú	st_masterÚup_stÚlo_stÚsts_cenÚstepÚpos_cenÚ	tmp_interÚidxÚcenÚinterpÚpos_idxÚdiffÚposr¶   s                              @r(   Ú	gen_notesrÖ   +  s‰  ø€ Ø€EØð >ñ >ˆå‰ZŒZˆØˆŒð ˜˜aœ  a¤˜¨$¨q¬'°$°q´'¨/Ð9Ô:ˆÝ”˜& 1š*Ñ%Ô%‰ˆˆBØ
ˆd�1Œg‰ˆØ
ˆd�1Œg‰ˆÝ˜˜B‘K”Kð 	ð 	‰DˆAˆqØ�LŠL˜˜AÑÔÐÐð	 ð 	 ð 	 ð 	 ð 	 õ " $Ñ'Ô'‰ˆˆuÝ& u¨eÑ4Ô4‰ˆˆSØŒL˜CœLÒ(Ð(Ø”K 5Ð7Ð7Ò7Ð7¨C¬KÒ7Ð7Ð7Ð7Ð7ØÐ˜sÑ#Ô#Ð#ØˆIˆIà),¬¸¼Ò)DÐ)D˜C ˜:˜:È3ÐPSÈ*‰LˆE�5Ø”~¨¬Ñ6¸!Ñ;ˆGØ�wŠˆØ"Ð" 5Ñ)Ô)Ð)Ø!�	�	à"Ð" 5Ñ)Ô)Ð)Ø!�	ð Ô" QÑ&ˆØ=Ð= y¤°t°t¸°tÔ'<Ð=Ñ=Ô=ˆØˆ	Ý! '¨#¨2¨#¤,Ñ/Ô/ð 	%ð 	%‰HˆC�Ø˜G C¨¡EœNÑ*¨aÑ/ˆFØ×Ò˜VÑ$Ô$Ð$Ð$Ý$ YÑ/Ô/ð 	,ð 	,‰KˆC�Ø�NŠN˜3˜q™5 ™7 FÑ+Ô+Ð+Ð+Ø˜1”:˜d‘?Ð# gÑ-°¸´¸TÑ1AÐ0BÑBˆõ ”)�BœF¥2¤8¨GÑ#4Ô#4°UÑ#:Ñ;Ô;Ñ<Ô<ˆØˆwÐ'Ð'Ò'Ð'�˜W™œ a™Ò'Ð'Ð'Ð'Ð'Ø 'ˆBÔÐØ˜Š\ˆ\Ý�w˜q”z EÑ)Ñ*Ô*ˆDÝ˜˜t™Ñ$Ô$ˆCØ!$ ˆBÔÐå�w˜r”{ UÑ*Ñ+Ô+ˆDÝ˜˜t™Ñ$Ô$¥s¨7¡|¤|Ñ3°aÑ7ˆCØ #ˆBÔà�Š�RÑÔÐÑØ€Lr'   c                 óÞ  — t          j        d¦  «        }t          j        dt          j        ¬¦  «        }t          j        |                     t          j        ¦  «        |¦  «        }t          j	         
                    |¦  «        \  }}| D ]á}|j        }||d         |d         …|d         |d         …f         }t          t          j        |¦  «        ¦  «        }	d|	v r|	                     d¦  «         t          |	¦  «        dk    rŒ}|	                     ¦   «         }
t          j        ||
k    ¦  «        \  }}t          j        |¦  «        }|d         |d         z   dz  }||k    }||_        Œâd S )NÚstems_rests_pred)r   r   )Údtyper   r   r   r   )r   r‘   r_   Úonesr`   rY   r]   r^   ÚscipyÚndimagerA   r/   ÚsetÚuniqueÚremoverR   Úpoprm   Úmeanr1   )rÅ   ÚstemsÚkerÚenhanced_stemsÚst_maprs   r¥   r†   rq   ÚllsrA   r±   Úst_cen_xr   Úon_rights                  r(   Úparse_stem_inforé   o  sC  € åÔÐ/Ñ0Ô0€Eå
Œ'�&¥¤Ð
)Ñ
)Ô
)€CÝ”Z §¢­R¬XÑ 6Ô 6¸Ñ<Ô<€NÝ”×#Ò# NÑ3Ô3�I€FˆAàð #ð #ˆØŒiˆØ˜˜Aœ˜s 1œv˜ s¨1¤v¨c°!¬f }Ð4Ô5ˆÝ•"”)˜FÑ#Ô#Ñ$Ô$ˆØ�ˆ8ˆ8Ø�JŠJ�q‰MŒMˆMÝˆs‰8Œ8�qŠ=ˆ=Øà—’‘	”	ˆÝ”˜ šÑ'Ô'‰ˆˆ2Ý”7˜2‘;”;ˆØ�Q”˜#˜aœ&‘ AÑ%ˆØ˜eÒ#ˆØ"ˆŒˆð#ð #r'   ç      ø?çÍÌÌÌÌÌô?c           
      óâ  — t          j        d¦  «        }t          j        d¦  «        }	t          ¦   «         }
t                               d¦  «         t          ||
| ||||¬¦  «        }t          |¦  «        at          ||
|z  |¬¦  «        }g }g }|D �]$}t          j
        |¦  «        dz
  }|	|d         |d         …|d         |d	         …f         }||dk             j        }|dk    rŒXt          |¦  «        }||dk             j        }||z  }t          j        t          |d         |d         f|d	         |d         fd
d	¦  «         t          j        t          |d›|d	         d	z   |d         ft          j        ddd¦  «         ||k    r|                     |¦  «         �Œ|                     |¦  «         �Œ&t                               d¦  «         t%          ||	¦  «        }t%          ||	¦  «        }t                               d¦  «         t)          t+          |¦  «        ¦  «        D ]}t,          j        ||         _        Œt                               d¦  «         ||z   }t3          |¦  «         |S )NÚnotehead_predÚsymbols_predzAnalyzing notehead bboxesr£   )ÚdistanceÚy_factorr   r   r   r   ©r   éÿ   r   z.2fr¡   ©rò   r   r   zInstanitiating noteszSetting temporary note typez$Parsing whether stem is on the right)r   r‘   r   r?   Úinfor§   r	   Únn_imgr   r_   r«   rh   r²   rY   Ú	rectangleÚputTextÚFONT_HERSHEY_SIMPLEXrJ   rÖ   rC   r|   rR   r   r%   rA   ré   )r•   r–   r—   r˜   r™   Úmax_whole_note_width_factorÚy_dist_factorÚhollow_filled_ratio_thrd   rÄ   re   r“   Ú
merged_boxÚ	solid_boxÚ
hollow_boxr†   rq   rŸ   ÚfilledÚf_countÚratioÚsolid_notesÚhollow_notesrÐ   rÅ   s                            r(   Úextractr  ’  sx  € õ Ô˜OÑ,Ô,€DÝÔ˜~Ñ.Ô.€Gå$Ñ&Ô&€IÝ
‡K‚KÐ+Ñ,Ô,Ð,ÝØØØØØØØ%ðñ ô €Fõ ˜ÑÔ€Fõ # 6°IÐ>YÑ4YÐdqÐrÑrÔr€JØ€IØ€JØð "ñ "ˆÝŒh�s‰mŒm˜aÑˆØ˜˜Qœ  A¤˜¨¨A¬¨s°1¬v¨Ð5Ô6ˆØ�v˜a’xÔ Ô%ˆØ�AŠ:ˆ:Øå˜6Ñ"Ô"ˆØ˜ šÔ"Ô'ˆØ˜%‘ˆåŒ•f˜s 1œv s¨1¤vÐ.°°Q´¸¸Q¼Ð0@À+ÈqÑQÔQÐQÝŒ•F˜u˜N˜N¨S°¬V°A©X°s¸1´vÐ,>ÅÔ@XÐZ]Ð_jÐlmÑnÔnÐnàÐ)Ò)Ð)Ø×Ò˜cÑ"Ô"Ð"Ñ"à×Ò˜SÑ!Ô!Ð!Ñ!õ ‡K‚KÐ&Ñ'Ô'Ð'Ý˜I wÑ/Ô/€KÝ˜Z¨Ñ1Ô1€Lå
‡L‚LÐ.Ñ/Ô/Ð/Ý•S˜Ñ&Ô&Ñ'Ô'ð 9ð 9ˆÝ"*Ô"8ˆ�SÔÔÐå
‡L‚LÐ7Ñ8Ô8Ð8Ø˜,Ñ&€EÝ�EÑÔÐà€Lr'   c           
      óP  — |                      ¦   «         }t          j        |¦  «        }| D ]z}|j        \  }}}}d}d}	t	          j        |||z   ||	z   f||z   ||	z   fdd¦  «         |j        r9t	          j        ||j        j        d         |dz   |ft          j	        ddd¦  «         Œ{|S )Nr   rñ   r   gš™™™™™é?ró   r   )
r©   r_   r«   r/   rY   rö   rA   r÷   Únamerø   )
rÅ   Úori_imgrj   r¥   Úx1Úy1Úx2Úy2Úx_offsetÚy_offsets
             r(   Ú
draw_notesr  ×  s¾   € Ø
�,Š,‰.Œ.€CÝ
Œ(�3‰-Œ-€CØð lð lˆØœ‰ˆˆB��BØˆØˆÝŒ�c˜B˜x™K¨¨H©Ð5¸¸8¹ÀRÈÁ[Ð7QÐS^Ð`aÑbÔbÐbØŒ:ð 	lÝŒK˜˜TœZœ_¨QÔ/°"°Q±$¸°½SÔ=UÐWZÐ\gÐijÑkÔkÐkøØ€Jr'   Ú__main__Úwind2ÚlastÚ
staff_predrî   rØ   rí   Úoriginal_image)r   rò   r   )r‹   r   rŒ   r   r�   )r‹   r   rŒ   r   r¡   )r‹   r   rŒ   r   r�   rê   r   rë   )3ÚenumrY   Únumpyr_   Úscipy.ndimagerÛ   Úoemerr   Úoemer.constantr   ra   Ú
oemer.bboxr   r   r   r   r	   Úoemer.utilsr
   r   r   r   r   r?   ÚEnumr   r*   rk   rv   r{   r    r§   r²   rÖ   ré   r  r  Úf_namer‘   ÚstaffrÄ   râ   r”   r  rÚ   rª   Úaarm   rÐ   rÅ   Úrrr&   r'   r(   ú<module>r      sà  ðØ €€€à 
€
€
€
Ø Ð Ð Ð Ø Ð Ð Ð à Ð Ð Ð Ð Ð Ø 2Ð 2Ð 2Ð 2Ð 2Ð 2Ø aÐ aÐ aÐ aÐ aÐ aÐ aÐ aÐ aÐ aÐ aÐ aÐ aÐ aØ \Ð \Ð \Ð \Ð \Ð \Ð \Ð \Ð \Ð \Ð \Ð \ð 
ˆ�HÑ	Ô	€ðð ð ð ð ˆtŒyñ ô ð ð<ð <ð <ð <ð <ñ <ô <ð <ð~#ð #ð #ð+ð +ð +ð*ð *ð *ð` ØØØØð+ð +ð +ð +ðb ØØØØðð ð ð ðD4ð 4ð 4ðnAð Að AðH#ð #ð #ðH ØØØØØ #ØØðBð Bð Bð BðJ
ð 
ð 
ð ˆzÒÐØ€FØ€Fð ˆFÔ˜\Ñ*Ô*€EØˆfÔ˜~Ñ.Ô.€GØˆFÔÐ/Ñ0Ô0€EØˆvÔ Ñ0Ô0€HØˆfÔÐ/Ñ0Ô0€Gà	ˆŒ�”˜tÑ#Ñ	$Ô	$ sÑ	*€BØ
ˆ"Œ(�8˜E‘> AÒ%Ñ
&Ô
&€CØ€B€sˆ1„vˆs�1Œv€~ÑàˆG‰IŒI€EØ	ˆ�E˜2Ñ	Ô	€B€B€Bð- Ðr'   