§
    ƒØjó&  ã                   óx  — 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e j	        d<   d dl
Z
d dlZd dlmZ d dlmZ d dlmZ d d	lmZ d d
lmZmZ d dlmZ d dlmZ d dlmZ d dlmZ d dl mZ! d dl"m#Z# d dl$m%Z%  ee&¦  «        Z'dddddœZ(d„ Z)dd„Z*d d„Z+d„ Z,d„ Z-d„ Zd„ Z.d„ Z/d„ Z0e&dk    r e0¦   «          dS dS )!é    N)ÚPath)ÚImageÚ3ÚTF_CPP_MIN_LOG_LEVEL)ÚMODULE_PATH)Úlayers)Ú	inference)Ú
get_logger)Úestimate_coordsÚdewarp)Úextract)ÚMusicXMLBuilder)ÚteaserzQhttps://github.com/BreezeWhite/oemer/releases/download/checkpoints/1st_model.onnxzQhttps://github.com/BreezeWhite/oemer/releases/download/checkpoints/1st_weights.h5zQhttps://github.com/BreezeWhite/oemer/releases/download/checkpoints/2nd_model.onnxzQhttps://github.com/BreezeWhite/oemer/releases/download/checkpoints/2nd_weights.h5)z1st_model.onnxz1st_weights.h5z2nd_model.onnxz2nd_weights.h5c                  ó^   — t          j        ¦   «         } | D ]}t          j        |¦  «         Œd S )N)r   Úlist_layersÚdelete_layer)ÚllsÚls     ú~/Users/tedpeters/Documents/Projects/Claude Projects/Misc Tools/notename-sheets/.venv/lib/python3.11/site-packages/oemer/ete.pyÚ
clear_datar   '   s=   € Ý
Ô
Ñ
Ô
€CØð ð ˆÝÔ˜AÑÔÐÐðð ó    Fc                 óf  — t                                d¦  «         t          t          j                             t          d¦  «        | |¬¦  «        \  }}t          j        |dk    dd¦  «        }t          j        |dk    dd¦  «        }t                                d¦  «         g d¢}t          t          j                             t          d	¦  «        | d |¬
¦  «        \  }}t          j        |dk    dd¦  «        }t          j        |dk    dd¦  «        }	t          j        |dk    dd¦  «        }
||||	|
fS )Nz Extracting staffline and symbolszcheckpoints/unet_big©Úuse_tfé   r   é   z&Extracting layers of different symbols)g      à?çš™™™™™Ù?r   zcheckpoints/seg_net)Ú	manual_thr   é   )	ÚloggerÚinfor	   ÚosÚpathÚjoinr   ÚnpÚwhere)Úimg_pathr   Ústaff_symbols_mapÚ_ÚstaffÚsymbolsÚsymbol_thresholdsÚsepÚstems_restsÚnoteheadÚ
clefs_keyss              r   Úgenerate_predr1   -   s)  € Ý
‡K‚KÐ2Ñ3Ô3Ð3Ý$Ý
Œ�Š•[Ð"8Ñ9Ô9ØØðñ ô ÑÐ�qõ
 ŒHÐ&¨Ò)¨1¨aÑ0Ô0€EÝŒhÐ(¨!Ò+¨Q°Ñ2Ô2€Gå
‡K‚KÐ8Ñ9Ô9Ð9Ø'˜˜ÐÝÝ
Œ�Š•[Ð"7Ñ8Ô8ØØØð	ñ ô �F€Cˆõ ”(˜3 š6 1 aÑ(Ô(€KÝŒx˜˜Qš  1Ñ%Ô%€HÝ”˜#˜qš& ! QÑ'Ô'€Jð
 �'˜;¨°*Ð<Ð<r   é,  c                 óZ  — t          j        d¦  «        }t          j        d¦  «        }t          j        |¦  «                             |j        d         |j        d         f¦  «        }t          j        t          j        |¦  «        d¬¦  «        }t          j	        || k     dd¦  «        }t          j        t          j        d¦  «        }t          j        t          j        |                     t          j        ¦  «        |¦  «        |¦  «        }t          j	        ||z   dk    dd¦  «        }|S )NÚoriginal_imageÚsymbols_predr   r   éÿÿÿÿ)Úaxis)r   r   )r   Ú	get_layerr   Ú	fromarrayÚresizeÚshaper%   ÚsumÚarrayr&   Úcv2ÚgetStructuringElementÚ
MORPH_RECTÚdilateÚerodeÚastypeÚuint8)Úrgb_black_thÚimgÚsym_predÚarrÚkerÚmixs         r   Úpolish_symbolsrK   I   sæ   € Ý
Ô
Ð+Ñ
,Ô
,€CÝÔ Ñ/Ô/€Hå
Œ/˜#Ñ
Ô
×
%Ò
% x¤~°aÔ'8¸(¼.ÈÔ:KÐ&LÑ
MÔ
M€CÝ
Œ&•”˜#‘” RÐ
(Ñ
(Ô
(€CÝ
Œ(�3˜Ò% q¨!Ñ
,Ô
,€CÝ
Ô
#¥C¤N°FÑ
;Ô
;€CÝ
Œ*•S”Y˜sŸzšz­"¬(Ñ3Ô3°SÑ9Ô9¸3Ñ
?Ô
?€CÝ
Œ(�8˜C‘< ’> 1 aÑ
(Ô
(€CØ€Jr   c                 ó  — t          j        d¦  «        }t          j        d¦  «        }| D ]U\  }}}}t          j        |||…||…f         dk    ¦  «        \  }}||z  }||z  }t          j        ||||g¦  «        |||f<   ŒV|S )Nr5   Úbboxesr   )r   r8   r%   r&   r=   )	rM   r+   ÚlayerÚx1Úy1Úx2Úy2ÚyiÚxis	            r   Úregister_notehead_bboxrU   V   sœ   € ÝÔ˜~Ñ.Ô.€GÝÔ˜XÑ&Ô&€EØ"ð 3ð 3ÑˆˆR��RÝ”˜' " R %¨¨B¨ ,Ô/°Ò1Ñ2Ô2‰ˆˆBØ
ˆb‰ˆØ
ˆb‰ˆÝœ " b¨"¨bÐ!1Ñ2Ô2ˆˆb�"ˆf‰ˆØ€Lr   c                  óJ  — t          j        d¦  «        } t          j        d¦  «        }t          j        d¦  «        }t          |¦  «        D ]V\  }}|j        \  }}}}t	          j        | ||…||…f         dk    ¦  «        \  }	}
|	|z  }	|
|z  }
|||	|
f<   |||         _        ŒWd S )Nr5   Únote_idÚnotesr   )r   r8   Ú	enumerateÚbboxr%   r&   Úid)r+   rN   rX   ÚidxÚnoterO   rP   rQ   rR   rS   rT   s              r   Úregister_note_idr^   a   s»   € ÝÔ˜~Ñ.Ô.€GÝÔ˜YÑ'Ô'€EÝÔ˜WÑ%Ô%€EÝ˜uÑ%Ô%ð ð ‰	ˆˆTØœ‰ˆˆB��BÝ”˜' " R %¨¨B¨ ,Ô/°Ò1Ñ2Ô2‰ˆˆBØ
ˆb‰ˆØ
ˆb‰ˆØˆˆb�"ˆf‰ØˆˆcŒ
Œˆðð r   c                 ó¶  — t          | j        ¦  «        }t          j                             |j        ¦  «        d         }|j        |› d�z  }|                     ¦   «         rKt          j	        t          |d¦  «        ¦  «        }|d         }|d         }|d         }|d         }|d         }	n§| j        r/t          j                             d	d ¦  «        }
d
t          j        d	<   t          t          |¦  «        | j        ¬¦  «        \  }}}	}}| j        r|
t          j        d	<   | j        r+||||	|dœ}t          j        |t          |d¦  «        ¦  «         t%          j        t          |¦  «        ¦  «        }t%          j        ||j        d         |j        d         f¦  «        }| j        s¼t.                               d¦  «         t3          |¦  «        \  }}t5          |||¦  «        }t5          |||¦  «        }t5          |	||¦  «        }	t5          |||¦  «        }t5          |||¦  «        }t7          |j        d         ¦  «        D ] }t5          |d|f         ||¦  «        |d|f<   Œ!||z   |	z   }d||dk    <   t9          j        d|	¦  «         t9          j        d|¦  «         t9          j        d|¦  «         t9          j        d|¦  «         t9          j        d|¦  «         t9          j        d|¦  «         t.                               d¦  «         t=          ¦   «         \  }}t9          j        d|¦  «         t9          j        d|¦  «         t.                               d¦  «         t?          ¦   «         }t9          j        dtA          j!        |¦  «        ¦  «         t9          j        dtA          j"        |j        tF          ¬¦  «        dz
  ¦  «         tI          ¦   «          t.                               d¦  «         tK          ¦   «         \  }}t9          j        d tA          j!        |¦  «        ¦  «         t9          j        d!|¦  «         t.                               d"¦  «         tM          ¦   «         \  }}}}t9          j        d#tA          j!        |¦  «        ¦  «         t9          j        d$tA          j!        |¦  «        ¦  «         t9          j        d%tA          j!        |¦  «        ¦  «         t9          j        d&tA          j!        |¦  «        ¦  «         t.                               d'¦  «         tO          ¦   «          t.                               d(¦  «         t          j         (                    |¦  «         )                    d)d*¦  «         )                    d+d*¦  «        }tU          | +                    ¦   «         ¬,¦  «        }| ,                    ¦   «          | -                    ¦   «         }| j.        }| /                    d-¦  «        s#t          j         0                    ||d-z   ¦  «        }t          |d¦  «        5 }| 1                    |¦  «         d d d ¦  «         n# 1 swxY w Y   |S ).Nr   z.pklÚrbr]   r+   r*   r0   r.   ÚINFERENCE_WITH_TFÚtruer   )r*   r]   r+   r.   r0   Úwbr   Ú	Dewarpingr   .Ústems_rests_predÚclefs_keys_predÚnotehead_predr5   Ú
staff_predr4   zExtracting stafflinesÚstaffsÚzoneszExtracting noteheadsrX   rW   )ÚdtypezGrouping noteheadsÚnote_groupsÚ	group_mapzExtracting symbolsÚbarlinesÚclefsÚsfnsÚrestszExtracting rhythm typeszBuilding MusicXML documentz.jpgÚ z.png)Útitleú	.musicxml)2r   r'   r"   r#   ÚsplitextÚnameÚparentÚexistsÚpickleÚloadÚopenr   ÚenvironÚgetr1   ÚstrÚ
save_cacheÚdumpr>   Úimreadr:   r;   Úwithout_deskewr    r!   r   r   Úranger   Úregister_layerÚstaff_extractÚnote_extractr%   r=   ÚzerosÚintr^   Úgroup_extractÚsymbol_extractÚrhythm_extractÚbasenameÚreplacer   Ú
capitalizeÚbuildÚto_musicxmlÚoutput_pathÚendswithr$   Úwrite)Úargsr'   Úf_nameÚpkl_pathÚpredr/   r+   r*   r0   r.   Úori_inf_typeÚdataÚimageÚcoords_xÚcoords_yÚiri   rj   rX   Úgroupsrm   rn   ro   rp   rq   rŒ   ÚbuilderÚxmlÚout_pathÚffs                                 r   r   r   n   sÛ  € Ý�D”MÑ"Ô"€HÝŒW×Ò˜hœmÑ,Ô,¨QÔ/€FØŒ F   Ñ0€HØ‡‚ÑÔð 4åŒ{�4 ¨$Ñ/Ô/Ñ0Ô0ˆØ˜”<ˆØ�y”/ˆØ�W”ˆØ˜,Ô'ˆ
Ø˜=Ô)ˆˆð Œ;ð 	5Ýœ:Ÿ>š>Ð*=¸tÑDÔDˆLØ.4�BŒJÐ*Ñ+Ý<IÍ#ÈhÉ-Ì-Ð`dÔ`kÐ<lÑ<lÔ<lÑ9ˆˆw˜ X¨zØŒ;ð 	;Ø.:�BŒJÐ*Ñ+ØŒ?ð 	4àØ Ø"Ø*Ø(ðð ˆDõ ŒK˜�d 8¨TÑ2Ô2Ñ3Ô3Ð3õ ŒJ•s˜8‘}”}Ñ%Ô%€EÝŒJ�u˜uœ{¨1œ~¨u¬{¸1¬~Ð>Ñ?Ô?€EàÔð 	FÝ�Š�KÑ Ô Ð Ý,¨UÑ3Ô3Ñˆ�(Ý�u˜h¨Ñ1Ô1ˆÝ˜ (¨HÑ5Ô5ˆÝ˜[¨(°HÑ=Ô=ˆÝ˜J¨°(Ñ;Ô;ˆ
Ý˜( H¨hÑ7Ô7ˆÝ�u”{ 1”~Ñ&Ô&ð 	Fð 	FˆAÝ" 5¨¨a¨¤=°(¸HÑEÔEˆE�#�q�&‰MˆMð ˜
Ñ" [Ñ0€GØ€GˆG�AŠIÑÝ
ÔÐ,¨kÑ:Ô:Ð:Ý
ÔÐ+¨ZÑ8Ô8Ð8Ý
Ô˜/¨8Ñ4Ô4Ð4Ý
Ô˜.¨'Ñ2Ô2Ð2Ý
Ô˜,¨Ñ.Ô.Ð.Ý
ÔÐ*¨EÑ2Ô2Ð2õ ‡K‚KÐ'Ñ(Ô(Ð(Ý!‘O”O�M€FˆEÝ
Ô˜( FÑ+Ô+Ð+Ý
Ô˜' 5Ñ)Ô)Ð)õ ‡K‚KÐ&Ñ'Ô'Ð'Ý‰NŒN€Eõ Ô˜'¥2¤8¨E¡?¤?Ñ3Ô3Ð3õ Ô˜)¥R¤X¨g¬mÅ3Ð%GÑ%GÔ%GÈÑ%IÑJÔJÐJÝÑÔÐõ ‡K‚KÐ$Ñ%Ô%Ð%Ý%™œÑ€FˆIÝ
Ô˜-­¬°&Ñ)9Ô)9Ñ:Ô:Ð:Ý
Ô˜+ yÑ1Ô1Ð1õ ‡K‚KÐ$Ñ%Ô%Ð%Ý#1Ñ#3Ô#3Ñ €Hˆe�T˜5Ý
Ô˜*¥b¤h¨xÑ&8Ô&8Ñ9Ô9Ð9Ý
Ô˜'¥2¤8¨E¡?¤?Ñ3Ô3Ð3Ý
Ô˜&¥"¤(¨4¡.¤.Ñ1Ô1Ð1Ý
Ô˜'¥2¤8¨E¡?¤?Ñ3Ô3Ð3õ ‡K‚KÐ)Ñ*Ô*Ð*ÝÑÔÐõ ‡K‚KÐ,Ñ-Ô-Ð-ÝŒw×Ò Ñ)Ô)×1Ò1°&¸"Ñ=Ô=×EÒEÀfÈbÑQÔQ€HÝ H×$7Ò$7Ñ$9Ô$9Ð:Ñ:Ô:€GØ‡M‚M�O„O€OØ
×
Ò
Ñ
Ô
€Cð Ô€HØ×Ò˜[Ñ)Ô)ð @å”7—<’< ¨(°;Ñ*>Ñ?Ô?ˆå	ˆh˜Ñ	Ô	ð  Ø
�Š�‰Œˆðð ð ñ ô ð ð ð ð ð ð øøøð ð ð ð ð €Os   Ø,YÙYÙYc                  óR  — t          j        ddt           j        ¬¦  «        } |                      ddt          ¬¦  «         |                      ddd	t          d
¬¦  «         |                      ddd¬¦  «         |                      ddd¬¦  «         |                      dddd¬¦  «         | S )NÚOemerzXEnd-to-end OMR command line tool. Receives an image as input, and outputs MusicXML file.)ÚdescriptionÚformatter_classr'   zPath to the image.)ÚhelpÚtypez-oz--output-pathzPath to output the result file.z./)r§   r¨   Údefaultz--use-tfzBUse Tensorflow for model inference. Default is to use Onnxruntime.Ú
store_true)r§   Úactionz--save-cachezISave the model predictions and the next time won't need to predict again.z-dz--without-deskewzADisable the deskewing step if you are sure the image has no skew.)ÚargparseÚArgumentParserÚArgumentDefaultsHelpFormatterÚadd_argumentr~   )Úparsers    r   Ú
get_parserr±   Û   sô   € ÝÔ$ØØnÝ Ô>ð@ñ @ô @€Fð ×Ò˜
Ð)=ÅCÐÑHÔHÐHØ
×ÒØˆoÐ$EÍCÐY]ð ñ _ô _ð _à
×ÒØÐ]Ðfrð ñ tô tð tà
×ÒØØXØð ñ ô ð ð ×ÒØØØPØð	 ñ ô ð ð
 €Mr   c           
      óÂ  — t           j                             |¦  «        }t          |                     dd¦  «        ¦  «        }d}d}t          |d¦  «        5 }	 t          | › d|dz  |z  d	›d
|› d|› �d¬¦  «         |                     |¦  «        }|sn||                     |¦  «        z  }ŒTt          | › d|› d|› �dz   ¦  «         d d d ¦  «         d S # 1 swxY w Y   d S )NzContent-Lengthr6   i   r   rc   Tz: éd   z.1fz% ú/ú)Úendz: 100% z                    )	ÚurllibÚrequestÚurlopenrˆ   Ú	getheaderr{   ÚprintÚreadr“   )	rs   ÚurlÚ	save_pathÚrespÚlengthÚ
chunk_sizeÚtotalÚoutr™   s	            r   Údownload_filerÄ   ñ   sP  € ÝŒ>×!Ò! #Ñ&Ô&€DÝ�—’Ð 0°"Ñ5Ô5Ñ6Ô6€Fà€JØ€EÝ	ˆi˜Ñ	Ô	ð 9 #ð	%Ý�UÐFÐF˜e C™i¨Ñ.ÐFÐFÐF°eÐFÐF¸fÐFÐFÈDÐQÑQÔQÐQØ—9’9˜ZÑ(Ô(ˆDØð ØØ�S—Y’Y˜t‘_”_Ñ$ˆEð	%õ 	�Ð0Ð0˜vÐ0Ð0¨Ð0Ð0°Ñ7Ñ8Ô8Ð8ð9ð 9ð 9ñ 9ô 9ð 9ð 9ð 9ð 9ð 9ð 9ð 9øøøð 9ð 9ð 9ð 9ð 9ð 9s   ÁA0CÃCÃCc            	      ó  — t          ¦   «         } |                      ¦   «         }t          j                             |j        ¦  «        st          d|j        › �¦  «        ‚t          j                             t          d¦  «        }t          j                             |¦  «        �s	t           
                    d|¦  «         t          t                               ¦   «         ¦  «        D ]Ç\  }\  }}t                               d|dz   › dt          t          ¦  «        › d�¦  «         |                     d¦  «        rd	nd
}t          j                             t          d|¦  «        }t          j                             ||                     d¦  «        d         ¦  «        }t%          |||¦  «         ŒÈt'          ¦   «          t)          |¦  «        }t+          ¦   «         }	|	                     |                     dd¦  «        ¦  «         d S )Nz%The given image path doesn't exists: zcheckpoints/unet_big/model.onnxzNo checkpoint found in %szDownloading checkpoints (r   r´   ú)Ú1stÚunet_bigÚseg_netÚcheckpointsr)   rt   z_teaser.png)r±   Ú
parse_argsr"   r#   rx   r'   ÚFileNotFoundErrorr$   r   r    ÚwarnrY   ÚCHECKPOINTS_URLÚitemsr!   ÚlenÚ
startswithÚsplitrÄ   r   r   r   Úsaver�   )
r°   r”   Úchk_pathr\   rs   r½   Úsave_dirr¾   Úmxl_pathrF   s
             r   Úmainr×     s¢  € Ý‰\Œ\€FØ×ÒÑÔ€DåŒ7�>Š>˜$œ-Ñ(Ô(ð YÝÐ WÈÌÐ WÐ WÑXÔXÐXõ Œw�|Š|�KÐ)JÑKÔK€HÝŒ7�>Š>˜(Ñ#Ô#ñ 1Ý�ŠÐ/°Ñ:Ô:Ð:Ý!*­?×+@Ò+@Ñ+BÔ+BÑ!CÔ!Cð 	1ð 	1ÑˆC‘�%˜Ý�KŠKÐS°C¸±EÐSÐS½CÅÑ<PÔ<PÐSÐSÐSÑTÔTÐTØ%*×%5Ò%5°eÑ%<Ô%<ÐK�z�zÀ)ˆHÝ”w—|’|¥K°ÀÑIÔIˆHÝœŸš X¨u¯{ª{¸3Ñ/?Ô/?ÀÔ/BÑCÔCˆIÝ˜%  iÑ0Ô0Ð0Ð0å�L„L€LÝ�t‰}Œ}€HÝ
‰(Œ(€CØ‡H‚HˆX×Ò˜k¨=Ñ9Ô9Ñ:Ô:Ð:Ð:Ð:r   Ú__main__)F)r2   )1r"   ry   r¬   Úurllib.requestr·   Úpathlibr   ÚPILr   r|   r>   Únumpyr%   Úoemerr   r   Úoemer.inferencer	   Úoemer.utilsr
   Úoemer.dewarpr   r   Úoemer.staffline_extractionr   r…   Úoemer.notehead_extractionr†   Úoemer.note_group_extractionr‰   Úoemer.symbol_extractionrŠ   Úoemer.rhythm_extractionr‹   Úoemer.build_systemr   Úoemer.draw_teaserr   Ú__name__r    rÎ   r   r1   rK   rU   r^   r±   rÄ   r×   © r   r   ú<module>rê      s5  ðØ 	€	€	€	Ø €€€Ø €€€Ø Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð à%(€„
Ð!Ñ "à 
€
€
€
Ø Ð Ð Ð à Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø %Ð %Ð %Ð %Ð %Ð %Ø "Ð "Ð "Ð "Ð "Ð "Ø 0Ð 0Ð 0Ð 0Ð 0Ð 0Ð 0Ð 0Ø ?Ð ?Ð ?Ð ?Ð ?Ð ?Ø =Ð =Ð =Ð =Ð =Ð =Ø @Ð @Ð @Ð @Ð @Ð @Ø =Ð =Ð =Ð =Ð =Ð =Ø =Ð =Ð =Ð =Ð =Ð =Ø .Ð .Ð .Ð .Ð .Ð .Ø $Ð $Ð $Ð $Ð $Ð $ð 
ˆ�HÑ	Ô	€ð jØiØiØið	ð €ðð ð ð=ð =ð =ð =ð8
ð 
ð 
ð 
ðð ð ð
ð 
ð 
ðjð jð jðZð ð ð,9ð 9ð 9ð ;ð ;ð ;ð0 ˆzÒÐØ€D�F„F€F€F€Fð Ðr   