From c88d3e9ddd3a1fcd323de1b86f25abf4d6f016f7 Mon Sep 17 00:00:00 2001 From: Kentaro Wada Date: Wed, 25 Apr 2018 02:29:02 +0900 Subject: [PATCH] Add labelme_draw_label_png --- examples/tutorial/.readme/draw_label_png.jpg | Bin 0 -> 44145 bytes examples/tutorial/README.md | 8 +++++ labelme/cli/__init__.py | 1 + labelme/cli/draw_label_png.py | 34 +++++++++++++++++++ labelme/utils.py | 7 ++-- setup.py | 1 + 6 files changed, 49 insertions(+), 2 deletions(-) create mode 100644 examples/tutorial/.readme/draw_label_png.jpg create mode 100644 labelme/cli/draw_label_png.py diff --git a/examples/tutorial/.readme/draw_label_png.jpg b/examples/tutorial/.readme/draw_label_png.jpg new file mode 100644 index 0000000000000000000000000000000000000000..182dfd34d54cc80931ddbc28d8dbbea0c9a9295e GIT binary patch literal 44145 zcmeFZ2UHZzw=dd5&PdLvARr(hIfH=#$->Mql7%4+8HOB9D47osB%>e$3<3g@lYyX; zBn&7~KysFxZ}a8v+ejNa7-?Fy1U2eAsu!O8{z*uR4`S6p1&K+Hh};>*^5<759f zY-MHrCr>LY`#Jzh3;`Jh(V}gZlb4@q$Mx2hUrE;FJl7jfPl)zN=+NYoFL|Lb=K4Q zJzvERt*!}TQ1=9Iw3j9v#9&S4A3W;<9NqAp&SW@~XEDIx=2`x)G@jmuXEK9hP6*g} zs-N`{q#?ZIf&tO5?Gh?Dpf%6vK^X{jyd2=SKn&I;v_M(?DjO?^9c?jp&SdyiP8(Y_ zD2Ty+5k9bWMf@&5VS>BYjWhmd^e^3=f1USdJR5ACHO}&RK-`V-f&Ec;-3y#-U_Pi5 zBEa42_L+V_*@ze&t+dYOG$;d+5TFCx1k`{FfH(MW4Y&c00J?j*dKtX>twbHL0z3hG zz!nhsJ?D=a$X`ob!6OU^09F83kOuQ-y&J!l+5$dc{_&r=ztt51?0zlv`L%`cgGd?V5Ar5rCSnIfh@`-lt`n((ZA*i>f0xz!&mRA!%ir}*ewCbnoQ3=v z`Q`s80gVui^q*YLG<5;^OBcV%W&NkNZvLsIKgRQq_WvqD12!O)_J5=#3@5B0Y$tq2 z_=&KAuo}2P*i2YM*h$!UhJSBg{nxRv|Fbp2Uq{Xf>=pV?nm^jJ0&~vVJR4oi)uO8l zSC4+@0(jZ_d4cm0xasEZ?}@f|@VamvwAQv4G+j}mS1w3g6$h>8ne9KL0f0@zUu`;s zx#zDuR2Trrt^)x1!C!eUn*i{d0yM3WS=cy;)3j_i8fyY1;@C%RxqygDLE>Hjz z1LZ(9&;Yyx+JFw=3xEekz_~I5ECK7l4sZy8Ku96f5C#Yv2r1 z5Mm6u3$cf|LcAeCkcW^cNCG4c@&Zx_DTCBP-a$S=dLiE+laK|-PsjlQApsQuBLNoy zKYJqbeyBMFlUa|lZa>%fujC;U#hOt?=(Lc~CHfk*_LueXR0L?|K; zq7b5JqBNocqAH>mqJE-DqIIGZVrpVeVqszhVol;Z#P-C##E*%SiLu0$#I4}knIYaG zAt7NV5g?HT*PbznBS|1hG)X2&Dal)sUXp2&ZBkNFHd0|yWm0`oD^f4g$E2yGuSlCo z`$%U<_sA&8&XY-ysgs$Ixsp8~OD4mSHIem^&5<3FpCjiZS0L9Xw;}f@k0XCcUPs?sjpF+PUap zqgkaTr{$x)PHRCMK$}ckLEA&Se2)Aa|GAsztj>j;OFvh8Zs^=L9Rr;>oj#olT{Inz z?i1ZSJt;juJ(S*t{t!SC?7ZHH<#OF@^4E)DaM z^U3i!@IB*e=iB8M;79U5;jiYO7ho086bKL~5*WQqeOdLg$K{;M1A-)ia)M5RnSx)0 z2!y1C9E8$^dV~ptWrWefnZmtSh_A?BalMjrWk`fd7rWMw>MN@NyfFUj7O&5#|EW0bos7cKWuo>=~de5ibb{Jw&Wf|o+M z!kVIpqLU&{ab8J4$yVv5(zG&31H!5%J-c-05eDkdup_+zTq*^zW9*TgbLC4j3)a})a)YmnnH3Bu> z-XgxGeJlRfkS3QVO0!UNT}xIgSgS>wN*kt~rah%2q~obmr%Rx#rJJZbs>i42s#mQK z=xgdH>W|$Pxb1Pf-hjm5wn4hVtf9DJkYPKF0cHuq!FJ#`;BoK~#ASpx;=K{Ak(p7U z(JoRAnSlI$N9<1UoepDmW3+LN38{&Z3D#uW6l$7eI%6hn_SkIDT)^DV{F4Q{g|kJY zC9S2EWyM|MyU4q^yGK^~RykJN)|%EC*6XO7sAs4pn`<^tZ5C{mZ4+$g?3C>i?B?y2 z?Gx=698?{W9hT8I(P`)n$6Josj=N6!PWeu!&PeA{7c!T-F14=ou1>BkZrpBuZoTfp z?vLHSdnkA$d8~VCdtxyVj5(&pixJ#pcY0s;4)dP$QSnLl+4D8>t?;AsbM@==7xItr zp9@eA$O|M2Lb1?iJjpxbJko>%r9r2@kd& zA|KX0;(B!N(R7$bSkYse$DWUeo+v)a4krpnhj&LvMx;iZMA}4tj=CC^9CZ|pivAoU z9+MJt8fzEZ9VZi)^$W=_uD=Y%tHu{3&?N*UOeg9lRz1D&H1g?Il4a7TWU1urXB5x8 zpM6i!NvTP_l=@5RQJO;T6(w)@-egoVR7O@os{E_gs~xJp*BICI)@s$h zuT!k6tQW1%Z@Acy-pJG#*F@3usOhvhpn3bP``hJr_V1?OTfQIpaOcB7i$P0wt9I+h zHubg-?bq9zKPrE0_@wZu_OsmQ>JFKXs!r+7$}Z`y%5ItNsvg;%nlJKS>Ux!WoBCAy z-u0{Xw+(0xbl~;yy@QCsuR~@--@n>?o&Vj|6sh0Pr&(0H}=tfZ+=OP?-MaoBc`wZm}UC z4Ty~(qL3wmN8lZ`hv+e}Itd|32WbkKE4dDZASEf~GF2aSHBCM(_FO4l4gGtD4#qD` zUzsOZ=2@56HrNk1j=2c9NzYSUpuR}YL(j{6iItCqpH+bKGMC^5p$o!1S1yV0iwcNc zxq4MxQbI;jK}uB`Dx)c@DW@*4uAr`XQ|Y?0l8S<=)HTuT{5QC6GOAIiokBO&XEnav z>eOt|D$q{U3DtGfyQ2@iEo~rR$N@VCCqob#L68J@h>Xci&Y7~AT{0K35VX8>_q-Lm zH4}=#hTfLJj@h2Wfd_rXQPxS_*~kU$8swJX{?g;QX9_0XE8084C(<|8FU7wgpeb-9 z7znu%YI!g9{>Vd~M{Z&7o{)s|Mo2{7h=N7i#RSC0#})kYHhwr^`zc+LNV3*5yOf8i zS!uQDeHlM8x3fu~v%L_?QOebSX`SbV4a-k1C@8GOeJ&b)wOG7gO7@zi>~gtkh4CAY z%807W>e8C#+D~;o^}Y&^;@$VW$%rYp zX~YkunM>d-+nF1ff3xsxF?7j!8MT61bzh5GuiRMMytegXhhaBmU-+Q=DD*_(^z?7z zFF`m@lt8Ra!bCDgT0s^~Zcm{`DMUp}bwoW!^Og4Nxe2--^eYUTj5|!n%!e$;tS4;8 z>^mHroNHXO+@t6FF0@{(<-zhsU2^8r;TIAh7g)UfNw82TQW$+jTSP>ZT69gU_v#z* zXA(h@C@BN!8!{5I7v<>XPUTk>MioCPRVnAFM63E7$4-dcu zCI>YH&xTUoJAYr~f$~GWN7iA!k7J%-!6F{4PHAE3*%>vNU$W-2PhK$Q2<9rkyq$-_dgnhWNCE9!XVF?QeTif#?6pT(TzOGN z%bU^4pVcHaY_&pl3iVnIcN*=QyqZJb-hcP-eb|S`El*m*+alYeKgN8D`5e;`(;3|r z)g96ET|rY} zTQOJ3KN@@Pw>R8xUby*1?EzE@I;Wndp%3mm>NP#IgtdNXXX%*e zGVAv1CFmR8X1G0QkZNcFy98T=mmva-ph#Ne@Exo%#^i=6mFb{awz-3agvFs{>)m)O zGiyQX9aM`=qOFykq&<=SpaTva>Iiqb;!Ny3;Zonaz3|@ed`f+@ z{NnuY2lxg$1=$3fhujH;-!r^#@W9}q;UjpM@niERw&6|@n8?tm@aTk?tk}Z1s$V|D z_a=-dt|k#B3qCVT`6abA?Jz?$(>g0D`}6ao9En`pmuY!D`9uXug}%7bqNQS?630^9 z>$P&3ihFN5tJtcYYg+2g*M~MtHR&`ryc2)_sztc9to_Ev;m>}Z=exf2#Pq`Z`SHNu z($^oui(|k9-=yUN(sgZX$fx-`Vtls&VpW=8BsdX2AD8J{WtMgCcVSC=t@3PKQ}Pr~t6Ou^Z?F4`y7a1|?_AQ2*o zmV!wu$efpj$bOe=kbkP+sHm(&qco~qsN$undX4N_@AZlsZ*Eqr)j^xoKWKcq)uTD6 zHLg9Uv!Q#aPj;KxfZtFKrUOSIf{ap-O?T!^7)-C5xtr%$;O|mcUAGQI)!6LX$=L@w zymO>*LO8#4*>=0-p5?KIQSyrN9`}{<`^A4F5E;}Kq8!?EU;DxIqlm}K;Xp)h)a#gx zxPMp=mm~F359?8oj_W7}N@dIRDvT=~s)K5i>dPDZns?rF zx7=#;`uO~Fcjs}BNUwQ+EdK3RhGEob@%Zv2=d|3+wK?$xn#G~z*j2H$cN@2Uwrojk zr|lf<8SLjBY#b>Zhn~Fs)qeao{`BDZ3j(rWJP8R#-a>$ z0;zy}BLD~lK`;LSK^egm=*R02J_4gLhhUuPAyFqWE3qAM6$v?s1xXd@IZ|iR4zep` zab(-%X5?)Yq7=_42`N1&C#eurpQ&$BH_<53G=g62$8!ef#z8;zl>RA$C_@*cE9iOF zFk7)uvedBJu`#o?v-@*g;h5xn#--0q#{K^My$d%kl3eWKN#?b>BzozHuaiGZz~eGh zkVEjN&}ZS?E1@E$qKaaIS6Ri$#g8P`B&Vf@q(95l%f6CJlYgS%sc5QnQ&~vmoXWQ9 z@U^Dvr8mlMR;X1&>(!ezT5f&T{Gv6aJ)twFyPm@}EifAN5;90YNuUO<{P%=pga(A! zgg=S2i1LZai9LxYNZ{aV*CWM~p~&{hlPTmWW++psu2GFr2hv=i`9$k`PUze;T{gWn zgCN5$V>?q8b0CW;>oqoEc2*8bFcNUYb-;ae0k}vC?m)RNiSjA)8w%K8z9*O}R0;as z>!RnxB(5UGLnK~G_DCJd2+A7ECCK+FGAbD>zf@VfrhGl-#)O(AG)jH)mXc<&)=!<= zy2bibx19|>!-U{bh()B<9h?cdDcY>vg5NUi?u_+K6xNo|&c^-&n&0uU)4Yq0YpFYv zho9$nFE#HHUsk^m|E0h?;5wBF&A-p~AodYaSkU92;U*Dfk*Cq{nEcp-UtsYii4;%K zNo~)BQ=(JX(vcaBS^U}YpzXKG?aWie<`>Wv2H<92!HOG7`CrGC?NnI2X{!>c{-tKU z&Y-@ek)p}2x#=DKd)p6Htwe3N+tWWze-`XOcVfFHd)U7i^oI4l>7T+=3|<{F{Ob8F zcDQil!zg}ic6?*vXc96-I!*F}WCoZym|dA0pYK|zSA0stJxpPnA(oSq)%g3iV$0K9en?YYkx@!4~x=NxCK_x1MK=^yEI1dOl} z5}c*8BO#c;VBT3GBOxIsAt$4tASWXyrvP`S6qGcSKgR&# zb7xE-XEh0l$iRx{D9I_o-2Y@ceGAZ$5wH^6BZSZa1auHWI>>1Y7+M8=CsHsD`j^y% zM8qVdWaI=83b5S%8~`B%MJJ-BB_k#yB_Rd1L+~pF9T`0X<3%ebW^t+Oa3kONgs1%j zkmZ-X9*zwaGmP z{iejSmOh@4Y0KH+g<#9imSlkYw7_)lL@cJh-+i|qg=+V)v%EUft+{~j;22(+)nw?$ zwO9I^6yi8UL`w#%CSoe&U&iZBot2J3^U0Rh%+n&;C ztCj4ylEB6vYKw(ojcx(l`U^rsu1uSkbB#tDHycHxA+ES{~I@FI!>F>-YEO{2@hmziYLsz*RHue;gwUdMM zF{mqK8~Rz{_QfKd34_Ba_?M-`Id=w@KX9|4s}hMqDCj~l2#@}*=;@(0mSl!bN*S4o z_Mi_#vI8(>L@X5HG#%h=GFvK)P@cv-AC)>xN@>OxN%aH;@GImA4*Ldk@8;zrb4oMS zP65Act%_c@5VjMA)Z+Nxz`gnCW~x(w>zbFk<>S!U=L)=HA5`0KbJ0DU%$_cw3GZ0% z*%%;Iv)!}bTO|CgPmup=H4VO8spH)5pvwwjm6PU5yTf54uQ`Tv(x{{PSf zA?WKIZF-kl8Rq1UmHjZ-(W(p=v(dKH`L;*Sr2Hy+T-T)7CkiLz4P;F>e0Q)#5Vv(8 zmD6@+Y}+C=G?4E-<@=mE1Qg_h%f;+riDT8~QHic=!?D?Mm8<3?6}mMGE{j`cE=anr zb~tMJU}3)fMYaqwuhy{7TCp>|s~Y)9n@hB5=BHYMd#PJfWL!+$DUjN!T`T4|BeQCj zU121?+-<+L>K;nX-X%R|l&GoJGFHvhWf6`;&-SaNw8G-F`A~D(LL-Ywq0hr?QA4kX z6n(vsZ+{%tK{l4NSWg78ocdz8C1esc3*HtHakY`x*$|d3Zer%GTIkZ zT3^o3X37;SZfAL`zYlLHSpCoxTl&SnJu%&oDF(y=ujG0Bkv~~vEehOzc)P3rXU0mvR=Yrz4o)uLT zL?apGdrI?1`ZicDd$BjxV;b#^bvF0=+X6O~RR)8;`6SF}I5nHwX;eLKa`fqU`WWZs z5=ypnIA7nX8``Nrd+~~SPS;XDYfd33I74cjS0LBg+wq6Uyb&>rW(GziTvuErJfo-j z2}aIi+%sTVgKG}b?*GQylh*GMR6h)5@g8aRK*I7ax$u`fM>xiY;||YN4f_D)`Qc#mSXA!N^_m*isH7 z%+U7S{=uI6Rxu|kX31fN_3>nc_$*(=_~rE#X?5nuu{jRYMbH;cFVj83iwi?(%4MJd ziVvMk*3he+U2u$3J)>7E=0kZF9qX3Y#zGHO8xL!pSSd6%lr;?%=VFFg%23mR4SkbO zYW44OScc#E-0Iot&A3~;Slsglrr_(o`oKg>z397Z-FlFaUJ1sZ&KDoZw^)W47Q`xu zs_7TCY3S!zd$29c$L2-i+R`&6+go*7PJwi$!_7D(`FucY^%X1K>!~&6t>JD7W+J|F z#ar+$Ts*p9flFU)eXb+PHv8Jlu{zYdeQ+Pq~>vqpt3#^NaiL5anN(AA8Vj6>6dpZpK7<#6QG{}oY z<5qdG5!r4k10j*Cod~ET65gVbyP{9CZ{w=iZ9=2iO&Gg*4>S;RYjXc@U7QOrX$$_0 z-`ADRBuMo8JRE)V3TEPGQ^MR8)m^t&v5)N~w}gL~Q?htfiFN7@^AyH@jW{+{X5OxK zdD_J;0`-{+u#Q~B3JgU=28Om!J9T0$GBjFi zK8&qTl$7k3Y_nb1L$Th%qt-KFX+L@m90d_9$LODRg0(vRW_AKNct5;f9_t|(U`7{S zkTKW$9eHgoFfUR|9e0v>>FQR!#gpssp}YzxgR-QqxL&YdxMgF}fFlpj_Geu9N@_M< zvTsmw)u{9{x?v%s9p;+qn2NaZr5V6TD0$!fhUTtB!SO%fv;e6}i$6Z+BKZ zd8Mp3kvph^D5%uMaB(hLdrXk;y)F@bAoGFbTtTc1|I(dL3kK|2KY6r2+Q4)SIEPW^ zK4a4y!m%kWHz&03^wgR(3t~6(@fv^P=L&x+7xJe>^EAn2*`AdlFx|OpUX{^@Nku=? z+!P4&UfGWpTR!dg|H37LQkii)!lrlMTX16A6-LfTjeC*)|C=dsenh##WRxS$QM4wI zu1aW+L)TneH`tkR+e2X6CMGdQv;c?ihhmUWygae05vIRg$*(Q6spQG$+|02!``s0D zo%ef9GL`X@LfFdi7)L&+5RX7Zc3-xgoxOw_R6IQ3FIDax@UypReoQeeRz1-b%lz+= z`F*MU7n+z<4SzYW|Be1@Yk=^M+sG}uO6q3DIqJHuFs`IMS>}$%P7ZmIFWjWPw(!L{ zuWFzQw|)`l&9uc>dFdg`nJnmVKh&r*g5ul4%Wn-X4UC%ukB2{N@E7C4U`Hip7o@GQ-dcFy{Y0=JSzllx+*XvO@dzvox)Mw86o_+fcpuSG1Y}nkL^eg%Q!I zu!o+NOg9x#4J92qy)W~gcfM-+kW!NN7@C&GfiIyLyv~D-oRu-EWyfWt<=>?d3V1Fb zc<;5krER4v^*b41CTNIk7llHt%iuhELWwcu$^E>DRg{6*N9&#VN`KaI_4$l@Xp5hl zet?^p>^+kI2D104qD=sqE;5^c+6M(rRuCC>*dsg_5 zl)A?1BB3*cTNiJI58p8vP*aO32+w{__VyoR4tPl71&@YjEQ6@Vj%NvP-1}$gzjQ^? zzsxpxsNoyd8XEbO=EQLOjiq?AJKeQ^R-UrQ!S*XZH|??2A9j*}FRA|L6LtPq$>N>Z zHOk0Sfax;VQQne66Ds68&%J-Jg0%F&^EaK6g4ZQ|cT=drN00yc#G(J%-gJd)oQ3H` z=(gg%_F!*N+wt48x5@vO2qU=*8A~3D{><^=5zg(rG7{jJhAoWf)pEoNW6@caBP_W7 zG3+*%RHu%8?xUIFG7U{B=VUpQQDebu$&_c#F9Fy(J9KIQ7GEsAI!;3I#jKWs=AHSMc@dqS4h64tnP}gPmZWy-%s|Iz(zY2~XX@+( zu;S!;&zvn84MPekCqxGPH^&E$zI|(^)R=jgH^S1&n2o#sb4(*!d9Eunef>?y9R>5U zAOp>Vm*;<_4f>7rNveC-1BXG`VRSD`dE07fm=s(n-@FiuVd`0|4opZFIp7~NaTHgM zk64S=@y$EX`k=~u3X~-7M`gkB`zP~zS3|5lL)TA%&C*>iKCA4g&>_vE51-STRmaW~ z&I$;e0<@=q!YSa6-5nc@D>a@(we0BtSs|QND z&jyig#gDbZ#~U@=*3et$(c@w*vjq`h=_k}xX)9eaxRSJbOtugGL}Gwy^z6pD#+mvo z8|hO3I&9g37$f~L9ycxDpvG-lJ9~Z0Jnsl<{v||r{zNjp<@y=n`QOOMU^5Lt=Z~3Z zSB^t>qJQ+y3*`o890$k+FiUe&&d-K!9YoB9rpW~+oC1jfJ<*dJjP)~hN}ui?vn)2# z>3e1Wp6TxzC!wEnjGPi&P5kL*ypf^86DQI;tGQ)~JAx|rZHStU#xvY6#d_}eR;Tas zB*7X@vMY5ClS}rlj`FC^ml{Ye%xNspKiOAk+`-evo&qyMKL@kRgD05caz!TAM0W9q zw4d;6RRux5r@-akiWufQd=EQX%lSPinJUYG=TW`)c+>+F5Xx?27Lf9Jgz-CcZH}m<^@-t?2$HW$0nb(Ll)b%V^DE zkz4jO$>{Q8#bN4v~^QI#MySU3}AmX>p?)e#rW z=Vg{N$1b3P<urM=$O^epG!v$Iq(=XyM?TAl?-{RfKhU-9{zzg{V`h|b2Q_uUv0 z&Ca`B4?V1!W<-c{M4>cxTPP9TuuPtXYeA!o2y|-_X+mp4g;x%B@;8NzaCN9^q@Pbk&L+N8QeKw~snkfSR4yA0=5`LTwM^6dWqtQ; z*8!f}Xke$^W6Qs6KPd!#JyFcrEua<*5wjc=$JYsj;qpF?d(*L|MC|CdMq%ES^q9jC z(xX^K9-PM-)_#0*U!mLw?;G1Qqq6U0@QwQvhy*P`?wY7?|CuF7tSV~o2?Y&7Zn^R) z09pcv!;Z|Y6VMXatl-wTvOz;oupAc(8iHY!pL4;gWg?=ceXk;4oAaR*$@Y3bXKM)s zw+{Q(O{rAUWt$T0K3GvkbPf;T8MoE?8I(7~v*!Je(xDsm%?77{_-+SgHt-b4ndo(C zZq@&B3XF#6=Io746r2Jn{;okip<60ZE+;~v0w>cyU0B*yk2Q`y{8r_~mZ{qYY+rSk z&$c6SEB+Jl`^?T0TrFqRRu0dz!tvtiC78TZso&MXRt$4#ztpz9xXRb?Y`i1>+EY9| z>}7G{L(gjef;!Rc{HG%$McF!tXxnaSA71T{dOA3wD>b^!LvDM@6#Cbl-mprs`DvpI zOQ+i?(b-pFe@k+yi%(BnJWHEMTu(M31@dn2I-_3sqpUvlO7m|sP`EznvJ}TybD5{| z)uk-TZOkb!fELO+Z&VO{Fy+DZZAT1sW9i=C`29(Ae|*SN8& zA1trxc(HVJWv@%xB33Z;qIY8Mgop;h9~)fuVS;Yimj2S#*%y8PsYLLx(3*husUDM)v||&e0gHTWYQ(CYmhlKemq}Y{EGZ@cy(Z*%y~IFf zDNUeoF_S+h(;_Pds?4OOA7smz_sf5(mmslqG|b(*Z6C(7y4tcGmL^(I?1*#P+SZJH z&}rP?&(#n(?mXi&Z8TRuUaQR5*~_|&wUb;~*eT?mrSDSvrzyHn;&)i%Lg3b#{W*qp& zg0Tx*I%Q+fB%O=mlSoX1I`MuYM(2{|kpSHj0ylSTGszRx(`!ei)I;N&{Z z!w-q=m@mHmhITIzt>{Iu3JJMq&aSw{vU6VNyfVqTh;S~6uX`UQOz$^^Y{O#=3>c|e zNEwt3v%5+Vpe39bzbkc_D)WJGUU8XvqCD=+>K&L~$s!NB^vg?quS(`hhOVWlt@9Ur zDbtR#QtHJeUH#)1!=vrL$!)6%&(=!+rK5idF?MPjeHLc2DfPr|>BZEAqDLckQ%yK9 zz6Mb7k*pt~NhY7Y6jgFoVA1_j?Ik622fN~elKvTl=pCx1;N1H6Q_Zbfq@jWV!(u5D zHDu5KY?GkB%h}f;**Gw;UCK}96o?XXxy}2%{Hw#uqLSjI9w#2b8;yG6k zYhHa?Te?4-ZhWtUMpQlP)KRo_?Km=hc=_r$d5h0srV&p?m+SXcU;1aSPa?G|~(Z}JEvA*Id@$C2nwAlh*NO)S~Dh9M) zV7j04+``xcnWt+@nXx^AvU7A=fkAsilE&Tc^{)AB>dGo-Pk7apJ~+0QIX>p>+z7`h z@-js1bfXui>DqHxzH$3p{c`~RB>+LqN(U4bioA-K(zT0k$h62sZuse*bU3Y;r)+6# zp6K12RCQ0qwLOTeQFp{CD>EJh$d5N1T(sqw;{*PWi}XwcPMvM7P?=if1fguG|Gh8I zg;~`rA|@8h>d?Y9On8=q(TGE@tG*l-vbxCJI8WHeMz@c?MUu))`m&quv2l8A@Ni}B z|5aBMGH~P>9#5Oq90Fa%*r-o|F5TUAWa#SRo>aEHPiU*@QSSzarP>^?DS{qX5}y9i zwDwcxVi$wwY{D{(E;Ti$AUu2_b+VUY<>wQ0y_sn)Os%tltg{0rDe+0 zFD0cDvh}}e9()~(w*|>qXCdUox`INwwr?6p>DODnOr3vql+`MwuW#DffE}Io9TRgb z%;=Yl3^sVLco2*c@_72?o{P%6Ot&|_erCwM!fR_YVy4hdj$H`&rS{(w4SztMYPwm` z+WqwAhPMv4xhIp>bw1^KR`%9%Mn>i2k(0J#&SGBw_C?+R&L!+ zODNf>@8+ErxbsGp8g$t)?U%r+Sv*E-<2arBm5iPA7;2tMV}tCHGImg?vmyap}%x-tBD zO5E4DVQ(b6lc77?{#4aKu(2V^Ducy{3pXKHw}s>M+of8l&|i=AL>w4Izz zyCOsM^utF#6O-AyPV9QVRxqSs6*e+-dh|S$P;yJ}Z)NcS42<5}QhI|dj`+pO(PBff z&)ga-W_h{npT*6*ka|1?(;4;*3|vb5{BoUb0#Tvmp3mIB3U?>J>Q|P+x1~--Pm7DI zq@-lAW^pprdrv7;e#fe}i=m#yPduOGe7)|C`>~=b)Tc96HY9g2u)a{lWv+yJF)#eCpIjD1|^ShA=HElc`A9Wb8te! z&vXr7^JAC6sd6j`)Gl}H{nCtKWG4=gD%u7EOa zjo{Fo-55@xIJg=jJWiurl))t9&#s&SZkzacahv#$gO$<CwRe$j@rdbXY)WdBSI^;eT!``tUWHCZ z0n6ivQyo!Kj8~9$S;;;Ha+~i*Y&m_7dw&XaPpsJn9f5oDDb-2Kl^|1mC4+@{smyfq z{he%*jDpngOc~V)w_O!P$GCorPAeE%DQ_OGUUIrroY~ii^tE)voBQ70(&yWk&HvH; zAXB6uqV&8)L9{NcJs<1A*5WZa??H3h?b+^%tw~g(xc+*-WC~W!%iE)!oAWj~FBp9$ z9jxv2RE~vXkZ}02puItUWl<#}YO58FU`@%2h*&hQ2$;>9kp-Xs!n>_eSbi2_uAfO? zWMevNg*?S75kuMWv~q4Il+{k`2h-@v=_~r|_L*uZ)eqaahzu|L;?XKgGDYt(F3DQ6 zS@T$iZO4r1y{2MGx~%S(+tRkuCi3VX6Jv`%h0v21Mur4@MfH(Tj-)0Vd}^#zw@3eu zo#9GR&=)s2-sth1ieQ@`g0)9O=Z1Km%e{Y0jbAT_BU13)CXuF&fyot5d=+pwfzc-V zo8`l?F38|m`AJnv_(a9?*znk(gIPP?t*kv`?8fJN|K{u#9jz<6waO&rRJyg1+n<;? zj063wyz%1A;(kk;ljb7@w})IdCWGUBJsbTD`*xw23v}&He-oLOzKfB1B2B%lQP-@F z%|w}|$fJJBD|xY`M%$H<4GzBc@l)B#6`EW*q{-?>vQpr!zSCk%mj8b6;s;=8VB z)cXD5Vt=4teS2qaMY-e3N(<@lLGNQ zz6zO7oWE^xC>K<`sAPoA$12mYrGmE{w$#+rB@9={Ows6S*NW|@l2ZK;@Vg(m9?*gH*)0s_9eW*f^Ow8j`jH5Oqv;Y!E|;pV21glX zbA?8wEw6Tj!4SjodX}lk43CKD1C%(Y z04`v1A(N!3Z6-e-mR}@==Z@u$XgBkIfALZ0pK|;GNZT9BDlK+-O$P7?q?+1pi(2Ot z0GxP@vn1VS9{qvxUA&oCw=Y9QS&1-=2ITo!#eg&NIA7@NXYGL02# zS#aALJOUD)4qm}e-s^TnDw!8ErQ~z^$0MY5+STyzF0<99l%>h558OB(=K5p>cbR`G zQf(K9t9iG;==2oo1imKwaG2xAUg5odKo_-yY&0D>fGwXFK?o zqqr1_QVNjFYH&|3g?(Jv)Ko)abm46t+aB;;n55j+G?`v*k)xYJvW?nu5##X441bqT zLC$!|K<75}Gk>U2(`;*<3D&7p*ONzKHZpf#>55^FW0^9YY8Ol*rst+-K~B_wP7hf) zPVVq)rGqzI4UeeH;q6r=O_UG+eE>76&3-)htk#{+sH<&WyFuDvar5hpc}*kKtYfQ9 zun32WZj}y@R93Q+ThDsboG|*T`P1<1m_c_1d=|Z&MJLIf;q4wV+3F56b6DKEh1Ffv zcU*;@0&!pbrvrXG-h6FW?2>!vUzR<14wkqF3-Z+Psir#>D4A1b!n)I zI8WgY-O$7xQ@n<*M`x_up_u?zO?0;+&z)B(N>kvj^WS>(M7U%&E6}<<*+3r2FwRxcv!71_6P?%0jkI~} zjHIqdN)j9|)s4>33P|2G)~##xC2Kh;s;dhe&e#lDN0+-E9S-KUjAryGWLIQy+NEar zVlb(x8Q64H(OvV3bjR9_s%cJve6DyS$%zc>tF;&7`&vG6apWTT>q{12%*M29yFqca z`IVlcFr6u(e7S5RYZb0U@rbPL7Xw4D`VB&6YI7W;H|^PC*G>Yh1;n{KW$yeY;~z)j zuoPdZWUR26VNTWg1wPlPkK20sUz^{=I}ggg(OrnmibI|PqT-WcK2gJwGE3g>xiJRq zVK7c*hHd-tims7o;D-rs4oSS5ddDU`ET{4a|FuZoi)#QR;VL!CzTCqGF^-MzG7p|H zU)3jP9$V>Rj}3JW)$m`(6z3bf3Cb=RgK=$kPfm>2>Y9Z7A@*NqdW27!!b`;H_laYy zr{C=~&(LS}ZSTyWOnV(6E*MEJbB2tTDRC}wu7pT8rI_K}G&{RE7RyXM-fFA@zodLt zL>8VoP$WnYr=B3NA5}Q&(@Z{^J&N1#9+JUL#s*mn$e&zJ4R1HYi*p9MYSeg=27J*_ zNaOk8ambK5IiC`dv2D#KwCMP_mUaG;hL{0U6fR*Ya24+}I#yj+E!D2m>eZ<(*KIF1 zuf8JN6R+aGhvxo1f#(`OSOu=Z~{Hd{tdZ?NQ|uRB0(UY%AmiyMeO*V&)JE&!FddK7)E2b>JH$w}`EX8@hoodL zU7M}@u#0G(g}7miF_SXR+c$K|zy8@#Q|?o#{^ujLy>|Tm{Yvti_zzvNSxR>H(du%$ zD(apxjcJ90OB=Fwyy%UyW=@` zrX?&H&6^coR1#kFG414mhxJ56wQkc#e@pMd?wR8HqU>p$eZE{o7G1WQyEe<& z!ut2TCcxa^*C^gx;H6J^;s>0kXnmJO{(a~uP6|G zNud08_sVQ#uh@Q6jvx8z(4^#34qI-~qIe&<&_T7%_QM=&du9LB#kO-}?Y}6>G&Qs7 zGPwF3N3{6r=%_2R2E2F!>s7YJ+k}cnuD-`$lKpij3B6`SQu>imJ~eh}nC*PJ9jtw{ zy(Ht72Gu5(2kAototNRLD8Sm)XLv}X7TW@Ht2z0D{aSS1`#r$^vj^bs3)Z}Ebhsi- zgNnbDO3xpxZ27HpS+Z(GMbSVnfHzX0!@SLBC2hG^4%b}7J)TuFAARWF`lxa4EcEn$ z9)@y3Op$Pr_#jV*V~~|r%|mk25wFJnI(arGYRPz(5Y5qnFeW;a67Zpefq_|gWF!&R zbZ!-9hi?m1Cu*fFE`AX6jPU_>1bJhBespCJe=SK|qwNCHAwtTucd>A#7IypL1E0uG zuUcC^J#zPvbn*UtXD&H0;4zLO@R7SbhvfVsU(D-4>Bz!{`SUyi2!HT{>;LJ65P}y^ zmik8g@^D`1@h`)_v5Z^)6pVRQIlYWf)8KU9uFgmwMLCUKSrjT_Y&Brg-?x8snCcbQ z2>wvn-xGxEvT%~Lmf$I1)cm%3x_G~LymETQzjuOGqHo~s*nZ(m46e>`R*1h@b0_^N zQVwg4fcZquF?MRvnY{ixqkrJ`Z(*LsOH)2b>&677k^mB~Nh8Pt_IWI=9wM>}I+^M*qh<2IN}%v7#thQ?*FKw|-dhW>sgk zto)mpS4Ki=3y6ZEn%G{Xnz?}#VRlNp=w_er>fIUTX5rZlWoDmx$BHaN22~A4q#Tf~pG%*RG1*Ai0QbI4Ijz|py zNN*Y>goFgCfzVWX7eeSoN+_X8@9;+FoVn+md*08vzjJ^0{p;>Oo;-QV+Iy{M?fvY% z)_1MvG877#lUmvi&j3_%lW#q?H|vtDHv`S0t|s4<@aPxfZ65{edE+oPXgl14UB@Z( z>&&+BID?N3b6+HSIvyaQ8Z&*j_uQlJ5FeM=b&%gHw?;}&uJuh-1v-tkMa%2ySmEB} zV+s&xu}i_apBnnB^p51y@!*GYg?wfuYSUT|I*J+x5%rK(?y^UgVyt5(Vga7O=&<5c zWAZwk=#$@yMt-x>vh{Okx6Zp$UzPbPtkt^6m7|j~`@ZNYS!+!4aq9<;aj^~Kq%5`& z0RGBh#2fT$Ms%j6F|J}c3zhTRB=@{&tk3p3K28=6o9KIiSl-2NfulW=^Y&Endp^{> zx~@503P;AQ7fVFP_FP_}$Ocd4-#t_bb8S%D$^`*a)j6(mgRd<|eqRIu*8FdrJ0 zdvLko6|ZjhXZW6d&MIIv$>3F4U9jbBcGUE{6}~`dY?0aMfKX)AgGP`+AT~J04I?b& zN!$yLp}=)#C1HDcQ^^Z5=XQkc*MF#cRYgs^_ml=81*xAn7y47rnQ{yeDI9gg(N3I6mgN+g665&I!Lev9K0I0CPsAOs%P!E z2?JnV4T|o*he{wuV06gr%L{Uk23WR7hR2IFb+Zc)z7ih$3*XG;bBA{RN8T1L__>g( zjvR8RXW?5t%F6N%^x)G>3-=vjzi49*VJBmLw3eq2ke9?+9gGm!IfOZWiK@^D4ut5Q zFp8*BQgGt^Q2ikT1K*bW&Ax(HO5VwMnyk$8jdAOdl;;<2_ z3F`$F)_2dwK4%-9w=FlvEf*6D-)3oZlbvv7ZBeb8tjz4zM>w};kRj^?hc{e&A8B;E z&fwcW9d_9Jzg54>SKGN+)cnn3Y+YfM?F`r)6>^{_W8Nr55%n!J%p*Y;6C#}=QnOl6 zGGeM;#P~T&Rqu=_8EQ*LM#P}Lfxql8?$&+AB)tl{zdLeNbPP#CCM!8-?C0PVY|v61 zi#qJ4Ul{fM>sJHgqJOk{GY+++20}_qXc$lWJ6*CTl5+-huoK?3;hr8MimEtf;EXDF zfz-}rVvQ=eDRPcCKRkONgRFNC{VU_%KMTi*z!TgEfz|p!i#$MrujfNGRqNJ|=*4~R znSo6pd$Cs+bcI)K)5$R#Z@_WF1lx@5HxErds74@V=f(A%a$+p$$8oEvD2xHWzTclz z8M%4e)4aVmZyc|k6=f^%E=UDKE!}Uq1|}y@cqQr=y@TVnM-aGu52>Yylvr=oQ>|QE zbU8D&(Tom_=HfI=%8rKky(e+M{tZEqSX*C{h4C3s z5|0^f0f)}x4_w6HH%0Qsv8g3`hE$2T&)r~9O&cvTj}^+Tu-T#e1U1y;K)w2pGotUt zFe709%HCne9X~{CDl^;g3cAvp>J5Uk;;J(>#ORU~Oc|8EFA|Y8D^~(_zn51C_Fd{> zl^OXcQ=b#P6=3Gzj?OE82sU%#Bs@zJ`k50z$M&Q7J-7X@Ov@9gAvBot0?yuHKvE8Y zWTO|tLgt3Q{*_795@%#!`LldqJD1C&Dko?ANsGKszKuymLdOFXmq0Xnpb=0}b+y+! z>;5RN<~s`H3no8&%UXCV)u;R14!)|ildb!_GftrAMr55ys?A6J^k4rZ%GkNFc*nUS zum?raBD=BXcs{Ym>c68t$_U&6WS*Kz`L}Y*}KUGrATSsoL$>S zihH@ueI@lTU&P<4`+E=uW9i0p+IkG!u(&|qF&w=>2#F-~&y$l14X0hHS}ro>ov;>U zd6`1DG&XCYT^fzXV9Ds;eR0;-Hh0c_`bO}NO?&F)FiSzWkq9o#sQCJqYbXoNmO1B- zfWUoz{=o5}z}vs>FAOMB)Y7Khea6?a;95#(Uj}nu&RD!}FP=0#CgFPTcABRhb zlJ%?d?ipgaEb68do46=J7ucoahTebQr^z29HFD)ke5OZnFSG_~ zvAbh|3s0-Wlku%xk-uyup*#1nsOaNri;S86T0*x|5e|=WYS`4YPffG;donGhun7>7 z`P%`4OE`f}ZEt@BG=yIF_Q`xPIYHf*RkRf056bg8s@t{tQ0dIdMO$J>_=M@KXiLx6 zsl}h=%w^Ye-`#E(f1okW)~?L9?}-O{7y@_7pkMOkXIzo?TO5=1d*s;Xfr%Y-@wu1O zi~zsG8!j2--~Xh**eUl|ZggD!@jh2#A>L;t|L9c@?5JtLv1nS-YYzSD%txUGCGld} zK7Bxy!U>a$wL{%+0Tsxi54WE@{z~QF)l;VLe{Lr?CXE52w66**9mOd?b!~>~w=8E|&oiBxa+=JG zvB##yX^!KwW)Q-?dBaY)%2^6WB7Q$g$;`{=$WTv;A|u5zA>tN2bPUWn3Ji_#of$Z6 zT}i5IAAwB~jsrr3HC;}aID3w3>KcO57y-8K)_x7m8ujy#ugu?wa?~#?4n0WZ^ZKz+AY^P6s@_Sd<_hgc1Vc`k zX01GZ=&%1Gq_00`xTg;ysqm3sCOkAdm3fzk0mq$v`_~edwu9iQm8!syxTE&pcC|+5 zV3ker*(C^dnvqcO=-^fZ;knD)H$wk*cVUh?ZPcz8Y$s#+7OCfDF%D-lWCJhE9O0bh zoeeFroELvv{IF6xo9u^aFrZd4Ja`omDcjBNw%yKxaj?HND>0XRH=W+ao?Bt+dhJk_ zq~ZJ%G(rC~oVzd3&>y(nNIn(?+WmmIG8>u)H&_KntX@klGL+fL6V-{b=A1QM0;K!TD`$P&7yrkcG3q zV@AWkpY>74!V*<6O@Pd$9N15@4=1@BdWxV}Sm1^%JaHVl@>eHJ`w-^2J*@h0wjjWZ z%1;dNZbw+K3Sk_J5s3krtAbZkIu5{w(>gOQnqo!j`g(I(ZMkXXohn@(t1bl3g8-5S z!}Fl9m}Vmq?m_GMy)2#rZUqR7ZbCr&4E(mg8v)ZnO|!S=YFA@*r@&jju34F^DI~zHh+NHc# z<#ftt3Bl~H)YJw;J$3;eFc9k5H)Oo<53fVpi#IZ#qCxiRlq;g{#> zsMaL4&JMV9W9jw05eCHSfr;?s6!xj{e3=m%k&lPLsdPZRg}&=R`C>BvQbR+7wY67P zwtLXMqFuE|f?3poEiiL>UNV%dtb%=|pS~kRexojz{kV%XtXwT2dI)*#yPixy@5LPa z`p3CH8}X0uuCFIjNJg!0#Ajr2-!}ou46LKF$R-ABT7!@rN%!jS8Ub!Cr?m&P2g~Xj z5S6A!IKph5fqG1K*+tFe{B)lwsw&WXKg;KY>54fqljKY)a&kt6J*Ga9`@Ex5*jXxkygU(F&>ZkjVf; zAx(iEtQT}(T-Nw3A$iSWEg zPHp1` zJ6D#2D@pl8VWQXgX5KB}t3@BUDq}>xC}lvKJWRB?$oLq6-qb;y&5-}Ic%X!%VB8cLJL%z-!Dleu%VV4lyx)f(36iNVHMtk=LS zdK}Tz$jTyCBO#ki8Pt!{JpX_avhKKV(CAL>5#1?EwH?q?9TwQ!moMG_F)XZ(1A{Kq zRIUgWo_Bv1)81Ac^T}d%!@tx^D&vHS+A-3t;l1I7Dwvk(#iY80{k6$V-^(^5m+>_P zQkBrs0`27SaeCo+#OBpZOveaiBX75&;_`3eA2Z!n<*-@Tr$n|lyDc#SIIkOYGfdCf zKZyL>9pY3ljrxIz!Io9>)HZ+Vg!{|GG$6AygJCTaUWSblNP1rECq0@^Y#bwdr8#7? zQX?940~DHq6|-Gu9LFC1$-?=S%VkQFNR+?R&cecgKf@~MTe_V;*%R^{UWwrEOvMPZ z8SF?%PF5u`T;r|#+l%b}WP*kUn1yo9UUAF&NknuHx3!m%(|m^QGr*UMKk0tkIr}tr zYP6~zAjNVkPY5PvKgBO?**7%X9`b%VVY-yo&C^QIOv7R9qo_|ZzF=^-o0N)x zAaM9%N4Ei&?TG511W#YIgLp#{jC59his=Oe&PNbm_z*gWr@|LAq>#g8Sx)CPJfm9z z4T@z}t%mc*pirRB)_9thHu-=~P6+e{k@>^vFO!e~k!1l?bgvF+n)V0+}Je< zt;ZcwCCB!5CF_9EVSg#39~<1O>J0?m>P+?Yf(>-wk0SB)`U$FB^@Su)NF|O2VkEpv zsxY|lIq*`uNy#(w9UGNqLQYK%*lrltJ6fy(4O>~y9xvJ2pwd)@Opsr z7LT}Km#%yIB|=^<7O8Qit0GQ8Q%f|ZS-Zgp8*3!RFhLXC$TuCaUxj+Q>Y1~dR`^fO zRP1mV`7Cq^u#U-~Gom2UmV5igDEdkjCrlv??Y{@?ep>aJD$p>G$cfF1wxIwuw8~!n zkpAiYA5Vs{wJl&|-xov)YsvpmcD_W>(9n?0TaR_qF>Qkml2c3sB+F`88_snNP%PnD&H4TnOs49Db0dxbR<`@O|K30<#! zJRq)``^qJbg(}UjsJbnm80xlAKD6w$%1A`PvUB2t@#`N%{-p+r>^{FdBn3y+U6?Y10=pecc-%4CK<2&(I8{04r=W6>-tYYYdNklqr zQGE5Z73|Z%ea)o#S!@NhpCHbu$or~v)Y{}~+Qk{fmxn7dMx^0&p{LB}Tox0I&#(!} zeDsqlg(<}6ipb;X7z`=*9x3mElG82kYZ?3p#8c7ZG|
AU|3Y5mIWcL5x`1f=RC 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 lbl.shape (907, 1210) ``` + +Also, you can see the label PNG file by: + +```python +labelme_draw_label_png apc2016_obj3_json/label.png +``` + + diff --git a/labelme/cli/__init__.py b/labelme/cli/__init__.py index 0ad173729..21bbbc375 100644 --- a/labelme/cli/__init__.py +++ b/labelme/cli/__init__.py @@ -1,5 +1,6 @@ # flake8: noqa from . import draw_json +from . import draw_label_png from . import json_to_dataset from . import on_docker diff --git a/labelme/cli/draw_label_png.py b/labelme/cli/draw_label_png.py new file mode 100644 index 000000000..252c7866a --- /dev/null +++ b/labelme/cli/draw_label_png.py @@ -0,0 +1,34 @@ +import argparse +import logging + +import matplotlib.pyplot as plt +import numpy as np +import PIL.Image + +from labelme import utils + + +def main(): + logger = logging.Logger('labelme') + logger.setLevel(logging.INFO) + + parser = argparse.ArgumentParser( + formatter_class=argparse.ArgumentDefaultsHelpFormatter) + parser.add_argument('label_png', help='label PNG file') + args = parser.parse_args() + + lbl = np.asarray(PIL.Image.open(args.label_png)) + if lbl.dtype != np.int32: + logger.warn('We recomment numpy.int32 for the label, but it has: {}' + .format(lbl.dtype)) + + logger.info('label shape: {}'.format(lbl.shape)) + logger.info('unique label values: {}'.format(np.unique(lbl))) + + lbl_viz = utils.draw_label(lbl) + plt.imshow(lbl_viz) + plt.show() + + +if __name__ == '__main__': + main() diff --git a/labelme/utils.py b/labelme/utils.py index 834ff4538..de6f0b62e 100644 --- a/labelme/utils.py +++ b/labelme/utils.py @@ -86,7 +86,7 @@ def polygons_to_mask(img_shape, polygons): return mask -def draw_label(label, img, label_names, colormap=None): +def draw_label(label, img=None, label_names=None, colormap=None): import matplotlib.pyplot as plt backend_org = plt.rcParams['backend'] plt.switch_backend('agg') @@ -97,6 +97,9 @@ def draw_label(label, img, label_names, colormap=None): plt.gca().xaxis.set_major_locator(plt.NullLocator()) plt.gca().yaxis.set_major_locator(plt.NullLocator()) + if label_names is None: + label_names = [str(l) for l in range(label.max() + 1)] + if colormap is None: colormap = label_colormap(len(label_names)) @@ -124,7 +127,7 @@ def draw_label(label, img, label_names, colormap=None): plt.switch_backend(backend_org) - out_size = (img.shape[1], img.shape[0]) + out_size = (label_viz.shape[1], label_viz.shape[0]) out = PIL.Image.open(f).resize(out_size, PIL.Image.BILINEAR).convert('RGB') out = np.asarray(out) return out diff --git a/setup.py b/setup.py index 36b25f2b5..c1b507c1e 100644 --- a/setup.py +++ b/setup.py @@ -91,6 +91,7 @@ 'console_scripts': [ 'labelme=labelme.app:main', 'labelme_draw_json=labelme.cli.draw_json:main', + 'labelme_draw_label_png=labelme.cli.draw_label_png:main', 'labelme_json_to_dataset=labelme.cli.json_to_dataset:main', 'labelme_on_docker=labelme.cli.on_docker:main', ],