From c90d0cd98866fb3419bf38b8b8f02688af8c9d4d Mon Sep 17 00:00:00 2001 From: mno <718135749@qq.com> Date: Thu, 19 Feb 2026 00:23:34 +0800 Subject: [PATCH] =?UTF-8?q?js=EF=BC=9A=E5=8F=AA=E8=A6=81=E5=A4=A7=E7=93=B6?= =?UTF-8?q?=20(#2895)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 移除了ocr 增加对大瓶数量的识别并通知大小瓶数量 增加通知分解结果 --- .../assets/RecognitionObject/已进入狗粮界面.png | Bin 15210 -> 0 bytes .../{狗粮界面.png => 狗粮界面1.png} | Bin .../assets/RecognitionObject/狗粮界面2.png | Bin 0 -> 6155 bytes .../assets/RecognitionObject/背包大瓶.png | Bin 0 -> 21944 bytes repo/js/只要大瓶/assets/背包物品数字/0.png | Bin 0 -> 478 bytes repo/js/只要大瓶/assets/背包物品数字/1.png | Bin 0 -> 227 bytes repo/js/只要大瓶/assets/背包物品数字/2.png | Bin 0 -> 528 bytes repo/js/只要大瓶/assets/背包物品数字/3.png | Bin 0 -> 545 bytes repo/js/只要大瓶/assets/背包物品数字/4.png | Bin 0 -> 463 bytes repo/js/只要大瓶/assets/背包物品数字/5.png | Bin 0 -> 457 bytes repo/js/只要大瓶/assets/背包物品数字/6.png | Bin 0 -> 441 bytes repo/js/只要大瓶/assets/背包物品数字/7.png | Bin 0 -> 380 bytes repo/js/只要大瓶/assets/背包物品数字/8.png | Bin 0 -> 502 bytes repo/js/只要大瓶/assets/背包物品数字/9.png | Bin 0 -> 515 bytes repo/js/只要大瓶/main.js | 294 +++++++++++++----- repo/js/只要大瓶/manifest.json | 2 +- repo/js/只要大瓶/settings.json | 7 +- 17 files changed, 231 insertions(+), 72 deletions(-) delete mode 100644 repo/js/只要大瓶/assets/RecognitionObject/已进入狗粮界面.png rename repo/js/只要大瓶/assets/RecognitionObject/{狗粮界面.png => 狗粮界面1.png} (100%) create mode 100644 repo/js/只要大瓶/assets/RecognitionObject/狗粮界面2.png create mode 100644 repo/js/只要大瓶/assets/RecognitionObject/背包大瓶.png create mode 100644 repo/js/只要大瓶/assets/背包物品数字/0.png create mode 100644 repo/js/只要大瓶/assets/背包物品数字/1.png create mode 100644 repo/js/只要大瓶/assets/背包物品数字/2.png create mode 100644 repo/js/只要大瓶/assets/背包物品数字/3.png create mode 100644 repo/js/只要大瓶/assets/背包物品数字/4.png create mode 100644 repo/js/只要大瓶/assets/背包物品数字/5.png create mode 100644 repo/js/只要大瓶/assets/背包物品数字/6.png create mode 100644 repo/js/只要大瓶/assets/背包物品数字/7.png create mode 100644 repo/js/只要大瓶/assets/背包物品数字/8.png create mode 100644 repo/js/只要大瓶/assets/背包物品数字/9.png diff --git a/repo/js/只要大瓶/assets/RecognitionObject/已进入狗粮界面.png b/repo/js/只要大瓶/assets/RecognitionObject/已进入狗粮界面.png deleted file mode 100644 index 66cb63bf62e97a275a028eb3dfa888c521f514d3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15210 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 F{sZEne8T_$ diff --git a/repo/js/只要大瓶/assets/RecognitionObject/狗粮界面.png b/repo/js/只要大瓶/assets/RecognitionObject/狗粮界面1.png similarity index 100% rename from repo/js/只要大瓶/assets/RecognitionObject/狗粮界面.png rename to repo/js/只要大瓶/assets/RecognitionObject/狗粮界面1.png diff --git a/repo/js/只要大瓶/assets/RecognitionObject/狗粮界面2.png b/repo/js/只要大瓶/assets/RecognitionObject/狗粮界面2.png new file mode 100644 index 0000000000000000000000000000000000000000..991b9d308253ecfb3147717a78c0a81452d1a403 GIT binary patch literal 6155 zcmV+m81(0fP)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D7obT*K~#8NwVP>h zT-SA=zkA>71-+vIG*$uxK!79&Zlbt~)Dla!Bg?7CnyJy`$5c|~i6^rt6_3YBYX0!g zRAv5UrfkJisj131&Qy(4mTbqC?8vbeo1{pQ5;ut;L6F40ccb@y-EWy6ue*V6G=Oed z`Bb+k+;`u5_uPB#x#yhwTI?M>YzZ3Y)7k?Nc3ELM%W->`^% zgNMt?CMtVbo4Oj=NGS=2o9XK6ptHN3NTiKmFhG;138zB^AfGRg&E|;56D%#QFh9G% z+}tA3XbjUds~>6e87&X7e}nKfX+YQ#d-e=)>h$A0`Q%9=kye~eCvJ}mhr@v)C731x z0Rk+`!m_{w@_GR+qmj?&nVOvC=Eq~a_s&J`-JMu}`1ZYRh|ffLRaNnNJ)AswjNg6n zd5#`Eh|}r7F!JTj>RPVc-ZV|3YbgN2As}#Aa9!7x_y_|Uwe~F7q5^? zWzcoqZoGZZcVuhf>k!)Qb}=x} Bg_{vK!(9zX`q3c+NfoT>nO$*C10Sf{444Wp= zwIu)dhwp*~zxU!(ghPI$ln7ChM<9ei2#JsiQYxrYvbeg&55E6XE?@bOi3g9+vKnA( z&!<6Y3wNBau7vG{7eH5MJ1_t1ukibS@G_r!?hHP!16|8t7W%yS_#dxe7`8E+ zoLMFu^3&ED#N~8Uyj+z3*8=PTuq=acIK;^4e$JdZPA;c0G4beA&A!ss(s6z(VXMa@ z81(bXAAgNM{KJ1kDCEU5H1t9q%djvl3u_xkIg!k8<@z{pzI}~kDqF5M4U4(OC?2;p!dUeg8JgtBFmsl+y|kRUUu*5K>Bv zLe5^(Td4O&?mn2~XYYK-)tmQ;t|e>k-IisM&1uXp##o6a2>3m;h6CFQPjQ>XGEp5) zdi%N<9v){f>9@8jpH9KHgF!5-f z%OBliX=QEGjBmuUEOJ^N%d*(r(@sxk>-NHzuq;aJp*<4j(9y%JEJvA~oUU%UiOtr2 z!yBJGcbcz%th!kl zTllh?3j`1h`1#M@`1c$?aR@!1#nkg`qp{nfNQu|$#_#iBnkH-UG;4|C-dv=sJe z0S@lpO-Ebv`koJn21h^?C#b!%jYy=GE0;ecpU)Q!Xl1dty7GPvnr58TWSO4wrp-6$QYeo08F)~?=m1u&o z`!ig+Hpctc#<(>$$>huusdN@yue2N4Y@UVXH6BhaGX7|e+4)s+S{^9{s;X4({k4Rz zpwz%ZQB{VA`dM6xGCuyG>N+Tqmi2wUudkPHeDgmL4hOMJ!wyUuz_LsdsSJ1SP4V94 zkGXPvoClKd%?!@w}DP3s*%Q52*Un3hF0tFatSFg3Hp%={{P!5|p$;BY7?iqe4a zc1W!#3VpkK_~3&Z#N&yIHcESI*LfiXZnv9%_413HIeiSv%wrU^dbaU0rfISoOY-ie z+q`}87I!CRNhC9MM%EKwl>X zU1u$xCY{v~Kq%;=$?YVk<;mnU7MItUUy9*rvhSC&q^sL61A)M@EL4X|b8|B{Zhpeb z%DM-rL|Qt}tE$SEf9DH4`Sd9aJy+X$ZGmN3tV9$1{ZB4%{o@DZivD$LI6!+_GlpR> zzZ7FNmL#3ga5`1??dc(v(P(W6;&iIaFU81YHF8=WO)H@5IzDd`;gG+q1#5{ka|=-% zib79UtDO|7LwK-fDi8{=va-glTVrJ}Qv!Is9-jZw=Ma{GWmtBpV*o76BA(3f{eSp1 zH$HhtKCk0+I_U0bp{3bRBAH=!Axb=%LDLE(QW>V_R#;1<`4?Y0!^^*Oj6yvR5UFXjDH2FfIqA#_uidtEU1D^lVZ{hQK%iE^} zIQQf!y1Lr2O38<9Msp+SY>v0yyUr)~rpXs)%zAbrvA#w-JKH#W z_Jr-hi=yx^z4QVA7VF7}oych#AK#tg%18G|XSL!Q_Y&}VNTqYc5-GI&W*@<_EDDB! z*V}|cRdBnV2w|_yjTnYWGL>aDnnVaePiIT9-r&yoG;d$LMIw=@xMwR$GY{~Umwvlk zF9-MZGrX@KQ_o^Gu(c&qIj-IqXLT)U8x>U{;BTU!8>G@%@_BueKos5GBP0DtVf$iF zpE-!n*HqmMic27w&ajq95%7EPdF=dNHkaq)yHiX|E|AUD*JsPn!7>;g9$@d@Jpjn3 zo_PXAkzg5hJ2aWB#>C`26O#+&j7-q)!Rc_2&g8Zf9Ki2w;>lB^<-d;~-h;Qv7OEEc zg27rMO*WS&9P*dz7nWmuGCoBj)xhi*C+V?chX9a=4<9He8S5pU%<%EuDdHQ{t~uz# zFbuM}JVuR}9UvI+a`Nafz1?jUb!SiPuMlh_rfHJPM6G&Q-(^;*8bqv<7+t^xO*i28Tga6|}sLt{XLH-R*KR z)ZfLKCAdsd?zf+qJQ@; zTEfjpx6@V3y~%Coz8EWz&E;8KStFjz*jBt)w0yyy@fzdjayl63ZRgZudueYCm7|bS zbQKEvICE?t`-gVnEw1a0Sb$-g#pLKZsdSFX*(DOGOu2tsvf-M`>7cu-1F1Syu*{mX zRgGm?#NsI)O)qU4ZCy9ZGr2Jg^?94vx2K0EPmOYTWH*XZ+dUoV>)`B(5%%rrsc8cQ zqU_j|DCjzi%WEW3**g1g%b+?`+B+jiheNH~(516ECLYamXMDQs$(3+8?BE3KQC1a& z)^LEw4i56$&m80Uks(~p_2{e`r$gnya4*lCImlxN2Z^+XaBPU{Ez80*t#z-hNIa2d zWi?JVx3f!bW8ritv_)D_{_MZ}$$85%>>z-Opr``FGFx;g)TvRPIz38vXA2HhEonOxos4Rv6hvA>4E1*s@O#N=c3iJ2(moRNxQHjy znCAN1wStbz>7b*nnNV=ud)pErP!yGkiAluT@|0!h8dk}8)wtI%OqN&UT)29NUtRu$ zXmM{ZA*JN8(E(b*0el`edvw6mSSXcdG0@& zCl*gtyuTyT%om@2jFU%)@ie(A&i<;gkH1uY^rN>>{`^nBe%{W%7avxmlXHtvE?m9C z(^f&xVVPU+l|TI1`~2cpH%O+} z4U1)2sER^IBt%PdfR$*1bVj2i65{bgLmb-QM{7$E^;6C~#r1r1>=7SazsJL=C4_)I zyE_R6yxe;*%kpZX>_WSo4!Sy8_}mkRcBhJ%rb^y;C4H4yPTvmIUY_elFn+FrimgYPNzzf+r^>%eVjcp!tPz|6-mkM zC=_(&7NcDL=pG;5nqV!FCZ8{$7d=Ubs?gRFq_aJYA|(Y~$DyipwTBrV?4qwHvZcR3 zmD-Ew!lY$c`E7+aO*{LdX$6*6;#|8m!R3$clFe!uriGTzSEwP_S=T1Flh$y6<41;g z`t(790dGZ{YBHG|m#&R*>Dpc97NcZ}16qx$*a4Bt>0oG}iziQv(6=js%jv-BP`5RD zLMjNM^8dd76QpkHcH?bskW%7uItchZL|TJ1hrARD2B}PrY);!GIK^d=$!g5buky=Z z-{glsd!NOnnC)!TD5+GIAN~9?Z~W6W9!@QgN@r^dPBGv~r*p)UX+$ya@AulV#dd;I z^g(o8XDyyUR%cRo!qeoUv#lAwZ)>Bn5yLcz#Zz3lKF-hI{fJb0{e-qeDxKxWZ(ZTy zwK0~X@roSZR#;fLoetXDLU=a#{5vDa7Yvq{R+0IFj+C{%u3D(7LUYJRN1J`BQZLC= zhHE$P^VWOUDU?1dDRS}Z7*}tMZ_4NIL@?l`e^)yJzo+_AO>6}h=mnj{`6XnWq2TsLbR&w8NCA_RvqYmYhCf*cy@Cs?P-l}Kkb zuHG0&Hw+BJ;NACcSA3~a4{n!};ejrO`@6SwXf`1PQo6Z)`yQrgB0s!(vpDJkvGv!e zoA7$w96LD3p^<)D?dn`JR`DEuX=RO-Sc195=q4Mm6Fr?R96vmae~a{2Z6pYZZWz4# z-UYkn?%n&`yZZoy0u2~GDFnfQmvbjZ=-<`e&`FA6nB2ZQ#l49+%%byB4<+~Y_>p1u z5B1RG-a1O$gj6ww%GmgQCMF))RRFKQ{w5S3UbodN8l646JNewX!*oQNaXNR{XN$W< zFyLi*HO}Ph5&^%bu7OjeB;fP#^yz~cMwR#hW{Gj^s#+>`MDE}4DZ@f9UZDlTR2E( zq?v0s?{n?ueL5q}w1tCqyk7&SQ>C{%!f!osh?kx}Q+;_`Hp(K9y!qxkB$MfKaHd3B zJI|Y@Nj96~=wpWnh5Xz4`P()3Zx_?|VOBX=$Z=U5T{X zr?kmrns9T7{Ubvta`OpFJxD3=G`Z;OZlkBOm4LsA=Ai8jh5}x8b+>V7e?RYCzD=QE zAcR2E3Osx62!(=y&+Dcm5~jU1#PC2j&zw2PGp7&H)!x#us#Ds(q=Ih3n{WJ*ciz5$ zVHl+)j~Lzim@TD%zP=v*;xGOyy}LTGOcTAZF)!BGVC3^U@no9$r5LGn7FAVns48xk zga7{O56Z!il!9;m(MxFg0)>K3zM$jvxao*A6ZCr;G;CBDY}MgHNXgXnJb(VD|BcDX znTnQ5q^-03`Dr|!AeYN?`phw;l%HDt0Te}&O6RyUKF!se_qjJQ$ISdHtFa^xrxwfY zEX!8$Pwq`IHZjZGVidQ_Nl!-$%|TzqGwZ_^MhJmaR1DMPJFosNAAE4Vy5YLom$-lb zAuTOohKBo#RFw>ZM^Gr0T2SXk;B=^j0$%*S zrtRTvrW<*8Gn z?AhH}@%2?B2q91$PK1!$xii7Hzx_AN%`H?nE2Bi(x;D)`Ks36>@=A<@2lwIkdCRAq z(3tQPh4Xova5@xb=2tfbGM$ky&z?KX{yn=IoAC_@ArOlFtBm>iW&Y|r-{a=ZPfAy7 z7A4ZweZIP~B;DNHA`6Qvj2sxo@AFbh1AUrp(CM%b9dcTM`;X?=9SueD)aip9KQh#C zglHp>icpI?DMV3`&R%WF)}*`C(X(E*Mf9K_S)ZYZH*YoSC+71Ol1 z^!`V@`d5F;jT@hAGHhFwEoa{D$NCUNqibCG;5uHPkG;c#6?wl#`YfeHRU}ugk0XTO z#V?+sr>hmUuCFWY0W1lvC=M)3@Z+ES6aV9X{%_{y*8PWiP$H4;vb7f*ie0xsen8Xm zT)A?cg~b(i^>*X+`EWQK2n?jOZ?UMnry4~Hq?BB`I)>As^1^c`2$pk!RgE{iUrM_O zDUhm*f?+W|v&eV;*WdBIzk7{rHrKF6QZ#s#RQF*cmSr)1{~?zyU89gM5C{eFheAlH zR^3_qDMHxm<=%r?`;(O8Be;rN+h*Zy$xFYl6N&>vC`?Yx^Ttnq$+y1sH+=NbZ7j=9 zOg3CbM~>GXuv(bwV!kK>UADInnu&=J(I7E7(H;jjxTYx zM^O~KUN2{#IKfLVJ&E8y5UUkR*2C9Cu+}p4YnGj>IV!C^l|dUQ67K%5WTxPak*SL z9S&60fvPB2!XQ`te$M4^AcVv)Ep)v=zED8ZG^VEJxq9s;m#=)p#KdIP8>*=8K%I!u z(fWliQ|BF0O2W+{di%O*ZE2>pt%YE~kEh9v!{Gp+P$-be=7`6WtgNiEvJzuza+YXp zZIc`PStCYAPu3~QHvHyKXpGP3eU0UXwqlbRtt#76-MEfY?XXl|ud~SNihq`}ZD&6N dsvlWr`Tq|;l^QPx#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>DRZU4mK~#8NoxNwU zB}sPQ_sh(xx^?aIuD$Q+ndvb-W@mS2X0gCvu~=ZS3$p=%pn{?Z7ZUZ2Uqpq-kqLbf zgCUCiASq->f*`1%0Ywld00LY9yNkuljyFBi-P88<>*wFQzHYhHhs><1_hzshFmKeo zWzwGiIVVq^%&aT^%Fq5!T5FBg8Yu+TptVK=Xh1;qsX!FhCXTK=w9kZjsNJ)J*;jHf zkHn$!&9y)Xb4Y2frIZK+QV4{U<~f=iQ=SkYghT-Ku#V?zy1i9K(GI@WwCnRUT1V(d z8F`+QYmG*O7ACE0yREy{IU3Npp@+_M(_F0)2y(4$+jNn(Y}Ln_Z9;`cE|x2=jALn3 z(634{Lmxvj_v_kk=~dh)B3sxhc(?{147Q;Ly+e--v*_IXLRr!3$K19bAzf()58>)% zo=YhaLZYNXD1{UXDJ4=Wl#m4jXsv0ro9y>*v$69%KKFEspa0TXo<1cJgEzVH=Ko8m z1_VLPmLXBnh8`yF=%a=s`xz^x4_~11g#xI z9;B%Y>WN2w@MX{iuqHu)EmQ$0fGDf&uB(Ru;Ltr`rR-3AX@QeMA}qm*JfuKLRXmeI zf)E&5ijrGxO|+9{A!xVj++KZ?#iNp6`Q@+i^s|=Mt59#l%U41+2{P?YJONog3-)cIh0-NDD&?--*ZWbP=yc5LHXY-k`Xz>cB7 zNUf1vo5HE*QmK5rQe|O|N!@(|kQ4@3BTeN|s84A?uHKib1W!tdQbrn;@Cqp@@^$sH zb*$E32m^4t-Qc6UuXE-^hrjx>Kg`J^3wS{d<$Fkx;mM4r&o1-)!zb9EQ;dYyPnEETFP_E8as+DV#Fl}#$&!S)-$UmaN@+wMacQZ^ix*ee*?N~G>k{~Z zVKQmzW>mf@OR8$QMuQl@4TGwx)+y-saSitUj-uV}9v_b*4&`s+Ixa7SAGDKP_rP*V z!8JCsl7%cs7xAhUsKj^A4Nm)p@ z$)l_*?z#eq6qc6%fujV#rp2WzKQ4Chaa!gOjj`ne$Z7`FNYyMqIoM2!xK3f(LS3u_ zs-`U5NTrP@4T$o9M2HepD@{(FSB)KG0C@y~Pp*d~gZKF26LYkh9zlDGJejb4?J5u6 zdz;?oHffxaS!>txJ6UF6hs!o9V(sn=^o-)Jjoj3?V^RHemO=a@J+ zX)fDhNMX)CX-HVm;vjWR8I^XMG7Vi_7Uq7Lp?zd&D^X88`a>@p1y~{8!K#@;D-ALQ zJ7}wMT>+*drqafmbVCQj@fLWOuPw*a)iHppWU0Z#Q#{43n$#X?}`8e}u&k;^dGuexXyAhMokR+b4aPADJt~^dq4{58MKl|WArlwc$ zR2{8t3w5P^wvm<$2ZoFYJGOLfs?f}}Q(!?U+HODgyrB01+LrWocZzRQP;p-5C4`Y& zSJ1(5F!O_jR0^_Gads3-IRoV@x6kyxFQ%B@_pO>D$ zM7+1nVC^1R6wx_yg82&%Aw0!oI3ylK2(jg_6MvbFm;|dG088I2c-$?UV?F^Dh+7zt3?X*UGuZ4g!G#Oz6NZ z?j0zqB(!~A65rh~<2q2Wl4_#b#=E}Cv;CzK);KBqEm6%EVaJe;qpfO`CQn(YdPx`t z+_?QFkDTtXJ7nETEaN)h4*=(`t%FE^0=uAu#)GzOx9^31S?19n3`!8 z(opuP&i1lKiET(B5w>}TkjDQK_&&Gpy~CxmQ!LE}+PTN>jn_%W zJ?b+prj9NUc0x8jyus$R8{}z>@&sCFvMgoX-RIO&o4vsU#__IovO4K>0F>v>6C{MQ zjIAMNyBsO4MN^Q?F{cBb(kOFK+Pn`D7%Jr(jp2;9f-6dP(6;|CQXUGGx_knZ?$>>6 zh1@+?2`LfE4)i_6++v6JRHFd3B$gXb9_+&mvzX_uQRW(y66|-^xqNP(JkPBGl~{l^ z$+$-}*dpp}(!2j5K|P_f(qjAWEqa?<_^r0_Pb)Ki)jB5`N3>+dqsM3I_BL(HOyeAI z!l;$<+Nx~ljugUDL|9A10bZr?VNef9UrE)HmgU{59pHq?J+oOOtWZ{qJdioAl7|vi zD^U!X1h!u^YE%k|P$fW82$Yi4>pq>S2Fgkt!x8?Id`=YBphGzc=EGX z2&U()Upzj*7y)tCtcj{*ax!_lSD;NhkXze|+lmC#g*>Fy7mPBqmQ2kl-~!5D+vQ z%wIUqv8SJ+H9t=v1-;1*%ELN6+-!=SV5lC}IC4Ol#yEvuPMZo-@lqgM5bn#-qWrBM z)eg#hZ1+V;<085pp&W?djjE0)_u}3-e zg`eWo=YN>FbB{86;xx0%^E5(*j)r(1%$+;U(JNQztSqs2`xa|&zr%QckKN%W>%%>Q zP7^<@lk1$^a-6^b<}i14E~oG`I?u`Tvi>e@wM|YRXg70e521~Quq*uz?jAcgK4A0e zTWnwZfbE+%5klYv9_WnLkz>Sh%KE$SvUhKlC{4ION?E%29LG+d<^Jv#oBbYhGqaFn z9|I?MAQ!+JjuuAF&9Buq4opM1gH*Me-#&5>St8j`;$iMNP=$>q90mf!FZ|s9T%}(T zvAizBfr!;$0d+B)57qM(&1T5#LWfo>q~5G^^2`!hnz6Of1-pu2JRGyV*<)*CpLi16 zM!E`HZGuEjHHm`(KlH-mT)F%ZlS#@4uf0oyJtk2PnUAP>V*-`)@C%>E4}1m>))?;X zk&FjS`dxNz+@iO>2}r!4hUfc;_AL9|jNSViq^iN#4;j@0PJi}iICu6K)6)Te`ubJ= z&F_4Vr;lA^+#Q&fS~QB)99kDR$O3rd$1bQUG&;9*tEg-agKL8*{02_GeirnPw8j zMB@qjy8~A5Y%?5;3#mm2V?EnRf^kjo<*!`k2fy$H@g$?yi)eZo(sHM zv7@b{x9cWN5XK6&+R*`Y7-u0s{Nm639j)y})w(JoYqvJZaapCnO8@Nc8L2e@OFN@d zYt-<4Nvl=oiD%9+97eqM-D|{gN}6P3X=>D5!O@00k;2U3Di2?I?8u0p{@T+#^YkSq zlZ;j?!1p9s5~0%w@*II6%X6Y=LcgET>y8+X#!Mzd;%*hq`;FovIXfRAsAPYDfBsbD8#Njnn78mQBPg|(#t{^ zyX#}XVsa})+X852dn#Ev=R+~rch;Lkqe+vDNtBRgIVVpqGVG7Jb8~|vNy)MtomWdR zxk_P{*m%lJ>3NV8J6 zmM|U0%!CtW+9Az)fUg8zKEU^L7H2zLxOADbk3P=X%U3x5@D=8doTAmL(d~^HM=`Bd z$U9eWG3n-n9*FT>#`pe!Z2gaEMsIU$cArZZI-EW^MI(USt|o7sw##?S_+8*8Obo)x zda8t*pr9&==DYy20;F&tJBB#~t&1n!ZCiA4RfSk!aw~q_c_o;NSAjKNA1aoh&T{e` z(loQ68f(O81e>E>4`k+TjW61Hc>?8gb9I9}%L(f~+uaGf-3jAZuzKxnu72mYxb^OL z$#YFOHA81%k7xob0h z`wqk5fHOxIneNmPzC`*y{oXE7Z;)dB>9@!mSyAAW~u=Puj#ZgA)QciFjj zi!>P{Y92K|#mk2HjajHoqq7LFImdVcy}^(S&Gp->{La7q9qzySTP%%l@Wfe<#~xqe zsULcdl~YF;Z{J1ejK=f~&6yd5&WL&w_68ZEal)uttD2qE3VV8h>h7kt&nn(JmsAvf z^%9c;J$G#xNj-h}M_vXi_LZZ`Z3iT^PzR-iI^J^Ue$D5~v*%g6w?mp{W#!SV9Ghj> zkJxyyXZrDqMmA0lY1D9K!I_kH0bQXInI8mkC>QbQYHB z%*^9SNXLEBai3(k4^omQFc?h8k_@CIY=m^$HG2CK24jI&Z*uSUI&Zui^ZM&+MDc{} zy&Zo058tGF^-s7IZ1Td3r#N=9L3^r!QXU&0yh)x-XfG_9ac!EBOhzQ5hVS5|E}M~E>;TvzTdFuv~;Skc4 zm?nRCb&Gf~;8ge9oIRG(p6!s0a~eTH*bMMOA5l181i6MhhpnxcSKb~_zw|4N#UhDhTGAIu$-Q2V_*t|nb4537)J|7cZZ}+Z|GNIXz&8{%wu1Exscq7q&hAtxTcaH zl|}3>ZQy$xJ-NsukDcP!iFxXc8trySy;-BXKV%XmprKx`k;EDO?x@ILy4C(l;dv#n zWf^vDvu%VQ`0T}fPMlo83!3CnN`Rs_^iX-k%<^fDoP3C5XCLPDnX?=}dW6%bFL3VM zc@}4yc;j8BJ2e)kTb#N0I8Xe@j}ZnQOUI6I>XC;z{m>a!j)th=EqXWJBHvzR)=%;E zfXQe=KHMiAjYx(Q(kKPY3{{?M@=TMYntS&qtnET$gkN@b)PUH^9S_*O{ypOE1JdC(c{--vtg)~-izgK4p8WxiT)2qP z#x@XIpuB*v-DY8BikWc4WNVjfGC`*!@*FZXL)JLTL@h8(+H`x8;Si#cCQSto9!&V? z?wI!ZuMz7hL%*U6GAG7>bbWE@urRY}b{#Ya9T}qNDh;sizSE+jB8Wl=)H9F$=*ypg zt7Wf(N6N${<5^Cra2T2_)ud@gqZP9GV2??ZR039M3pCtWhN^OF%u( zLp5sL>TR+et@He6FY=AA{vbz=EHW4*=p?7+E4rfultSb~T8$dbhN9+c#`|~CA|Xjr zy4^98iDo!R5F+HtkAIy;Lm^P6VLAtqg7DBxm|gHmqdxbpZQ?hYoOk|3265?c*JN0o8t#G|R9uQP>#f*NhLfwTh`QzrffZ zHp)R@KjGuBGI^9&23&X7F17mjr%WJ(D5joF!5FnErLBzFEvU6-G@6iS=Gv(XlbgxQ zf#|t@)-}SaW#uV?MxFJj%kAzeXV1;?mw);t9)IK<&8D$dJ*8;Y1L~pAUOyt&0zpp0 zPiWSCJe3pe-ACwzEY66Av2h(H84Jfx^T-#TM+1u%p z*v1_WLRcfo4tv~|kU|X$K@bL{HNhKe?-5MJ{KC)wF#qY#{0Pg7^9ZSoss>OJ<#~)o z6O_;>eEj+n!*PlxM~aNlm()CkuM}Y|pyn$SIn#?vcp?IwLe_=657`Lv0om>=5O0u; zH)v1SxcvFYxbVaU7;h2n-ylmPLlX@`gdjt7HeoUu5lo#X*AmZDBxv>-|}_clko`B9J6^#Oz7 zgeXo?QZU>fA~900vMvo7A@h`4qm7hxg!F-&EJ>K2o#*)3d4!UnGYf2lj`tX^zeexg z2Y6lzqDd0hsMS1@$p%@L6Hc8#2nDq%bbT3+WLd_wZ-0lqafk?JE3~owraiE9bVN1h zhGs5$ZXNB?jce_S&l1=Y(2wP9Gm<8=Dmn+!RPL3XxdF_Mx1_M^kE$qZ<4!Er(b~#e zPIcQrTz~8OSEW3>W}P=4e8AH2kYD=CU*U&ee3Dua0D|!ZuHGH?}G9xO;Pl-s%VFNslb*68E-F?)e{EmR!j$;vsq{mdpXEInt z77GKN)4@rvTN+~kGmu)ERf521NY4!kjjy9Pw9?Pd`nP|sYpLm?- zT)#i$z1w}p!wDy+6es5bW*Qz+r^KU(@gQdH&K}*pi2L{U`0)L8?ynE=(^VR3Kpszs z$7AAXV*0RJKz9Js?H033(?}gbx<@j&N7P*>9*xL@V{B}X*x%V_H0Uzw@6v3~Ftd0B zAvMxBT0jVe0P^t;!|iq6di`x?j$9$n+(N);%p(rkXK^R?EYBi!ymhe7qQKpJ2U z;bVTwaqcIAYcsOHWy$ub%TSms4Z~P(l6zK6CX{`Qv=*?Zl$kM6inQkO-uj39#FwAp z$A0j$1fGvTaO=UCw{P~@+lx3kB{??jQS%|qG#hKXeDvW4H$K>+UJsc}GG6(UTim+7 z&1jI&8)gj00~R`c>Vc_8p5{pDA?i(br=H^8oqg1B3#kNt(8LR7$@L8J*aPaMamJkw zuCnvs0kwLK`ITA7H_>_sB1Pv3BApKeI_i6$u zBw5Ypz0K?V)Q^9bAN>3kB!Vc;_}=v%w;v2yn)11Px=klA{hCr{*Frpr$+ZF$yW2xn z@9Z%gPK*_gQH#R~1o;;89f9Xb{6L~4M7775)Gn}*wz+fj0XN^d&i!lm*xDE}i88W8 zk?V{!ov^ifmv}s8W?_lxg=NC#Jk6Q&gq>q3zk^aC$#_8b!2_vWbcAQB6h zH9B2~YU=m#ATZN_g>h+xrI4w^((69OTB}N2El^Ki{_@Ml^cGmpUIAVe+yhU9&Cr?X zj=QQusY4ZU!1|swq?Csgg0$xI?#BE4?AJce7oL3_5bX97zV+@NlS#tU=R2G^(#G=y z!{G$aQye)l$MLiCoI1b6LysNh@|EMv&Nq4Qjr&C7#7Y8qN}@%L{l3p^eV2A!;wiY> zU1B@G#KLqFgk(of(W@=d?+sa=3t3*7rXJ=9F(Ha$$Ws=N9_Q%UN6B=Zt<^n1QEN2G zla#^UE_dJikoUgzHus}Bx^t(wzqQ8V%uz&U{O!3NO%xzk4xgTo?FP~Oqf z;b1^?=Lcc}l;E0#_Gy(5>^+x(Da2ODs^B7?QxPr)QA)2fFg!apl~R(`J>Ix`m7n{m z7kKfxD`*YtdlUZT-90>^`P{=(%uUshN--J7#FLaGCuf;iXxSQ>@;qNM989?O{u;io z3G0%2L(yz1W~Xc9UW0KWA&=M_gluIOk$#8ic1S0zA*CcAt?}IDHqU?VH0|aDvQ@NB z*je9UercY?BOMx@qr_3d8-MVpTz~Bi)^FV6?)%qx_gk;>!7Fbt)YCN1JjLR%v#js# zu)4d?^2`ERoLW!RA-ky%3S*}jV9RlCp=}+g1r`Ogg{C|h&kSS4ul%L|MLVn4q%XlK zDp0*sDL`1_x_ho$$#m{I;Bt;vnn?lQ^USPIE9B2^y~B^a^clYPBcDMdSlb!%>IeJe z8eVvGmWAoC=(7gBG4)2k%JCVbG=_>}Dy`woS8wsgpM8X@PnT{LammOCIgU)2RE*wQOwLpvUrX9^ur{P;*bC3?{ojd z_fRsm!<`9AKrfAV>bPah{5M5Jj>mf6*lg#;VKrS+ey%D!l= z-Ah=?2^+B1aP@|{Tig_wh4kv_%U^z(VglHKR!X9aY=A8}rU1NhuTarc2JUVSQV6rl zPk985kazCi;?akX^OIkGo-p*;=_h>e!#$LeJbQ7PrKx~ulG7a~>~>>@KyT^X_?0(M2f zAdWcNj5vGoB(k-PH+2RXOrwaIJM$#U&+!6D*sP=T8r%1G*k8Ycr-mq{2x>Kgnnx|r zH2j>FikX&O=F?qz4?ZN40aLTbNt3K%RM{mocF5y)J~{~mBN$Z#WVLUtba_tt3+znx zsAn$!=*wXCtvE28M3(q|@;$IVP=%FliMMHUyP=tdcD z-qBTnf={i9cvHjpa zBdzF6A2%wxkT64c=W;B;EW0-sucZ9Jqxe|iw6FjNzy)KUSv_CuB67TNP)dt2AB}nS=9stFVjheI zalKA`rpd!++Dx^4Cb=Ze1&KY&RNmcm`C%G7h7zvOq7Ye8&1TcIRFbe(<5q8jC!adSm%jKk zQu(}hyT`BnyZgL*cf#((qqERq;n)<*$EH|ZZZkJmXMVQEk-3meNG3T3TrJ2n>`ydn zLrvgI!az~;C84hfeMK!$#;+VmLeKoxd`aL-0$&mM=GqT@;-JaS+plxx%o1V4f+-XT z&-kAEH%a<^Zol^t@4tQ>o%CtcbBDr$`cDb4$wkVwx*dz$Aza|J&L*&QVO!5iD`4s&Mb8!R7fF}Kj7(W+6e`_$_m zjk=;yQ^Xp^nP8#?lUy*#V3Y~=CW1zwXxBYjp`umuXx0>sP|^&QIckb#=-I>FlO}$s zXw?;s#T9Od?LvCHY&wYK2-C+~0L;N6sJVomqAth-v zAR6qW&C*V~TWf@M$@Hv;j&_Sh2iOUIDMW!r71U2U46WT!QNnbqd~0={8%MrEZMcQsU87d_n3|u)uQkXfL;72H z&}l-RrFcPr3Id`*kMSsDz2Bxea}jcF_aWPNgj66jAUYu_ATzWtuZnXHJ4CDlM<7to zKK7NDO$vjU`6<2137Z|lc8B30=ia7AYyJ}0^;=H8I@pYvQqi22v`&~@OhE<2lKgh~ zS;67I{P};NofvB<9n}^L!lDfyqG021gtk3d^EbxfAK3nMWf!} zH@|t8|LtE~#}5PQQ!QGZCR0-(Q_}&hwr|G8zN8*{w3~{s=B7OaX@(s)+qqpwB-?uB zv<${Lbo*>z5NNJC}k3*q?42+1B67@JZg2Huhb<+i{*!ZmMl)nk*gUf7bB$7O=;?; zb6wKd*1Nd08W+2T)U`(mVHVl_^`HL-rRi2I>8K8C9KV=21(!LWa)qnR)SUqxJCMc_ zS4l-!54ka1=P&)-7dd_M2oJW#{JmfMkk_vdnVN6Ynr_nSgiKBQOi%j+fsx2CkhJQG zdQFh$FiCT^dnr+@ExVeZJU1YHzhDSx2~{RFbg>Q*VQ0B??#9#FE-oDurCyX}n(=onC@k!_eBj!7jJcDTO8m)Sp3zxo1634|9sVheSXtx;7R7_(k zYx&jOtG2INe@AOOlZ4i#T6Uf!=M@pQ{}mQ=gazKhD=S;|aq8Jl?HNfoP6iiOS@sJX zbslurdE$}twA&%RuXye1kSv#k?FOFj5d@NE!(+Pb69$TAT`|@4m}#2fO(RgGnE}~X zX6)?7(7tE-=vttt)vVQQt>=2+nc+~NXoQMZ-J=njqumJTG<;eOk5hhU(y~)+pJIv0tSXr9q_)?SoVa~g^hSWljT0NjvQ?y$?3$rzvbww-mSef#Z0HlyOOAX+Xf*h$;Ux?Sf7 zyAOmA#KRGfES~4zee(_0*LU%x;HxhzaQ0Y>Q9mY4GLl4-W@aH`&6D`bG$K%fc1;m_ zl2#yTc#67`)Rm&CBrQ+UEDk|S3EB!eo}leXn#w$DRN}Ripy>%3N}9YplW$W=no7`6 zf~FKSm87l&b#9rn-}Cdts?7bm`(Pgv}XfVAbydfXk(oCW@_!{nA<^?EF9x+{zkZ@-qt% zN`nC_$zGfxM?Sy(``;xVC!ATS^JAZzGyUl}B}pKTVKULwl%S@J7U+&LqSU-+q8SJ} zz5$@A1P#xC+wvssLx%&^JQuV)n?@Q?8%olU(p*aea&g~+-jI^IRD@DclhPjG3-Azl zLXr-8h&bYzOLIJOcAi{E48}vAI{g^gXkzK=Bv&BZ_|~c4LsD5twTolq$pmfo^ilxs z7T}fkQsHED01JnHk&Bf`?6Wd^6AoK2_EKY)au$qJh9pinHND7tS8wu1-+dFUH9!2+ zG*6yyF&ZY;V1dy%M+zgoN(y>WMv@xtuKR*cU?r;}T`lFLP!vZ^LMWlGAe4f-l5}c{ zhLVKR9?IOWOLLg}!X5_9x{!og5+d=1z|#Vy1qwkvnGg?p99^jM*~?2b8$Rz|yTPMJ zj^V{=*?r_Us9n=;l;b?3G#^GWNTo=!{gUu~rBA38cB)C}NSc2#( zRJ>!!W>{1dGq!MfA7mC&>2wrv<@m#V^E+>F>-H+0y5g(P%~4m7OmdPG#*rpXG@cOn zLXf2pCpi)bq@-1I(qyD7RD#d}ChXw=5|WxQAa!br%o6&U zSs#_bV3?z`QrD-cF|?Er#e_g0RUu_TfRrdLs3~dVO7pA=sy)mzNr1#h z;$zgX(ip2bhrwQtP$s>4eFGWr*ZdrCD5O zC~D|vZ&|ulrfHo$R2=3bafnyMxf-=x1K>c0%ob8)WU+J{Q>>&a;<(fmmbI2)K8|_v z^d-LY>ig{O^?3ADgUhFy4EqsDk`qN{*PJOF(o~b>Mjd$yYMvkv7yyMCzIamN31j4V z(%uu+rz~weA@S^QAS8iMMIKd<18L$oiB*+Z7&PQ*LNplina3A->d|FBxPFgoH`h2j zcZ4iW9V`cFtDQY!XoWavB_CKlWpTEzwnW%{hFiTUDKw_zvu{SQ9ix zJ=;~ArN9>_6(}9*+T>#~wZkOmoynQ6w^)17<(;cH2|f6sM?2JVO%kQVv1T+fZ;umT zRwLMVFDhx=lb!|2v)eQbux5BtJfl3616r6x-zL5T-JCns>khM3%=BY2H)CCq!>Bu; zCMW#BXO7Tl_`LS+bsjl-9yLiSRC6>arM9F|brp;OyDDCWURE7jnpTHB6arO}-eD<= zh;Cli>TmNx^2#KWR4W2n45=SX%lrkPdV)i%}((lNkJmaL72$Z&OGe;t|0ahXrTG9v= za|<3*(~9XCMW7T?D;L{*ER!f<@+noY>0hOL51?)Lpf^IsV?Ouf0)eM^?e!a6Ts(%3 zCPoe{iba(jtt-C;N`_D-qRrp6(+HdWhZGy%kh+u>3tIs$x|n6M1v!#gNi|aKV%tXA zC77ZDaQPywYVM_E>dFhX49=BEwol38gfmOW`1b4XF&M-=bUdU}7etecNeqL5V;s{2 z$FV|M_am%#3LbknI$Qx*kUZ=hY#>847B z6lNkoxfhaGB)1@`>&Km{F2~H$T$=m^rS3MlJE?Xgs~mQmg>_ODMpnsACR8L!Ko-RunO@+ncdnDADUY5A(0N9h<&4If{=hWeN!?0G2IzhAhj9dnC`|fY@S1wnRcd`W_NGM;!MEB({1jpZt~uHH&~fHiq6gQ zRZ*#8L451D5SVvQJ5rag@U>ED?F(VoV!5ucsIh~|($Y!4Yqv>lY$khQ)DZc>2HVG# zUf<;6XqQ2%<JW!5ln988; z`P{s9mqtx+V$mZ`GI9;$v1T-M-m+4H1%T~O1?796T?Mqxx$~`GE+)65ukX{PD*BLo=_pX(5f$9(YN2b@284xQ#EM}eWKa4OQ$ z$9~t_A#*Do$gS7U8Bb2@6dKc{E9mBqYB%X5+G$>EHwf1iRD(F!&SF`Iv)Ek!Tg0ad zaOw1LZb~C1wwl5`DZdL$&6j{I%{exIgjc@zXXI(bL&rUY%t>v3G%Ub%-GEK%=LJ!V zvIJyF#P#3(d+7eRdG^O1=J7AAknjE$cfRwFiF?~cQ(ZoVnU zH9N=jkrsQm-(ct70~+&Z@xn%li}k=|nI=h%FFTr;{Y2gUb-J7HGTgaJ)7vB)e84NO ze2bR9%zR_f8j}Vn;WEQ$G|(U=wPwKl$`tixz;FLRo9nLT$BX!`}1k6VFg(%XtztFfrCv;!D> zu7qO0dkZyw1=)Rrh2R>^=p7im&v^e1NJ+CZXI^|_8-f6lO2|!F@ubJ?KmNa&YOeG2 zS6`q#-$AO7EEjaQAFz1l2&3&AY~Nd_);@w4wu`SD)2&|l{0f3KeNEpT#H&gpwX_;nyQ0< zQFnsY+N?vX(5LVpTN*kHT`;=>tb|nE}flc_QYxYT9YIdtZ(daZ*`wh zGR6F<&oY1FF}pKPAR`Ykk)-jEo8S6}tSs&F@QY7SZ`a9mMwY;+w@)-4pb_}K&&^k_ zvbC|u(v$xQ^_gX|SQBTO(In@=+8wrT{wqRplP8~hgbSB0kc_&F$6fL)Ch2bS-S2JD zAHP6dw~IgFz>WLu;ySlbPz#MxlBJV#v}fzwczcyJ&P`u!`(Cply_}ydh09Xhb{kel zmQsshB<&X4A)Mq|P^{8*lIpn60c-l&D&LgBrKK>s%(dG$f|}h9bI6sd4tufw+Uy@q5KAW{V^YX`0wf7{YP9npYf%y z{RHP8d5jKjO{zU~b`QGeRibvgU;-=GUm?+zxT_EGGzk8todp zYdtgL<*a0@9gV8B^SKyl5ja)sf}^jcqZLH=M3idTMKzE(Nd-P`*4t1@YefYW7Fty@ z&8q+kwfhN&ja&e&wWiga;>O+gI5!=kMqSd$7~%V5=>+Bb96x)3l_QIE@4dk%l2BzW_*e1_9?Q|8b)@( zTro7%M#79I4TO~Vp+|eV!QOhGJgWd}=>|5gqe*pnYjs>((6AhxSOgJ5pg#Y^Pnb8z zIbpV$8?LcLuiSURscd(*D7^CR3MshI9#S}OjX(%V*bKlM<0*Lis z71VdYS_W{zjsY!s4Y&r6GJ{geireN{J0CFKzeSde zN%u#jqlCdw^I%)?e*Xxw3r~{AIk}bA^3}O!4Y6`AMAv4F8XgbKs}l_~9qF%W2wc?e$I2~T3FlQB8smP&HJl7zillau?QWgjdmH#!pKz*0KI)SWhD>(18Eo#+ zSvk(h%O~k=t}z~r5JJ+Lp2e>G=DDXYvoZBWt`8Q-{6*$!=060T8ZE%I@3t_KYZfH<|41GwR#rE?&%}KR_yvMth3p%p5vPm<;zBcX#l7jCABV*|l0pmbCy4O@FH)6&XU$db zyR_E(Sulvuht#s`XN@NtokN;rbY`0DZuW_zjLA45Pjg#&K`&2OJUYwiQ!6ByU^l8U zX`Nwrf1i4Ei`m%*$zXsMb+oLJP71(845%mqjW?~n%5n=x8gZjbF{1WXKp={Sv+9l72YJv@OHau71#pEkAYe_ zD!>-HL4&OJ167HYcD(6CA6I#84)es#B-tt2yjoDe9#5Cl_uC#H6q#IE(K9>OxW%*|U>ofdPvV8~L6cvZkk!E=)X zRddT=BCN(V;Qo2R7F@C+73nM>FEA3e-fEShYYRAb0$}ad9_b`2z^)Fn zIwGL^V4d&1`X+gva&pn*FsG>pj76d?su^G$Z|?=W-v45y!Y zilEtc;}M!u0kx*b&RUOgZ^FroD};?YX*8j?w#m2~5sQF4XhNQ_JQwqo=Oq_U2!_KU zuYB)ymYd6n)a?j!6}NPAW6lcs41Fxs9CpQiW+z0>!{zAjAgf5ZyXPd;3Y{<+7S90G z3$D*~sM`uySc;PZ=;~7^fi`2KR!RnNg<$&>Ww&^mtn9BA#8G053sF|wlnG=xi!*b) z`qu00boW`DpJsWk&fuf(ay)p8m7`6OdVZj?&MKc7BsW|Iu{=~$Q@@Te4QfHP{wWM;s%yWq`6H_N%E zT&zLiz%Tn9qqJlwxqkmDnHX~BL%Aq zV5E7E~$MEam$3CrLHn}gwiq#hP!s~yw}SHAwTTMK0*uR{2b zL0X2AYfC9}oOZyKgbYTvb1=T2g8J0_cj=h zCIs5N#vq9@;$dX|fzuC2qcNlHb+RNzN{_+%F5|r+XhA%PiN_hWl^HT2So`n}8`tl% zzqv;|o-mG6ZtM)%9>XJ#{S-$Q9!4i_K|oRcA{2zi0$WANUOJ{QZ7Zkt932c`mR?Rh zS2U`lZvm|9-YVyg+5&<2oB#Pg(y|&E$4Qk|90+!b&v{s!q2LUtLxmLa?bM*M+c6JU z)c9TPKbc?~UUh!BG*+{yK(V^<4tL-G|9JXHlRVBDk7L5RN24ClYMZ{;_pD_50qG=R zGK|R5oGi)6$We8V(f)u*6p>~*agvjzIa^TzQgP|IUqN}xmYFdfQf?;+s>_A6lT=HT z15#^N5$3j!Hh&0pP~rr}XmSEm*dUd*7jer|L+3(BDj^5)-~6?IT!LHWK+B@0j)si{ z4kT@|bsSs)io$d^&rEwufTfjQXwx%{25>V%qdPEpGSsurcWHBF*`$^YsTF%8@KLr|N3nv;|Y^-Oq!Zq{H0z! z=_p7v1XEKy{Dr5PKe>Vz1ds^^yFK>qY>-S6BRN?{GM+Hn?=#rkCmKY=lb9?w|Js#g zW`C$A!}A4k64Q$l29p?7>#%b2C7P{^B#C8a3!nqi+^rJJ@_?0Gp`2|~g67h@Zm!x7 z7kOK)X(ZS}dPsm=!A8EUw)@+^_)nZ7v745Jc~?V$vMHl05Bk|ZI`Qd2K9HP547^XargX6M^1i}sp?Sh&D_&hf&?z9H!Rg6g!&Ctx*FV1i8CU-0S zxe%pwZD{H!TjqrW*D=H2{zW6X4qPkm_Kx`yc39*7r3$RGLY7vpsf1HcHnFzAR)8|A z>&>eGi_J||a*fe$n8w&mwlNX{f55$~|A6N&&(LhPY0S;jUS6R&zeKIw0X*U;p}#+* zyVGTVV~4%1J(46R&vN34`BUUH%^}Iqae@%wE6?om)8KguKk)H=Nn@(X)Y2ko829$r zzI~PZTRk?#5)VE0OXP|DuV70Nfo(r_jES!7Ah6&{YY-OFV(FF}RcpU+-u)9}roDykqL=uFXCT%x(KLVacqzu7@5k1R<@CNV;q zzg$ZvIfI=p{jCAxy%EV^LN+n~>qoB9X-=M{BymI%4am~S{99Qbq2!pLCfFXpjr}GU zF8?xFn%UR$IfSef8gvbCRvkNl9HTmUE6J&?1}lNZy-m)cqsxBUfh&YfU$JQ%?m|?+ zbsD@#Tm+MYb}FQD*Ga8O9EaF^h3h}9`gI(q-As?Glz=?5f3zf0%NPMt)$HHCsiNX$2xJ>9&ELo%_F2FE zP1f$eMG#7+JBr1QqEYjiY6UbyMa}n6o+5MGOSM8H$h9Qbkmkzl{Yf>+IAJnK$g_+% zNl4<9EKi9NjS`wcqS+mrdtR-@`G>y5?A+sIiC55}VEBUZ?XV|_N%IMa%xwRb0YZCr z4(K4D?l1(ke(F+=3ITE#hUe|IrL{1q7V!iE@$xVJn&k^yS(~mH=C}uy=ePnZF-)Ph zPpJk=08^+&rxEBLo#qB40sUkSp*kp4FaBl~X{W)YQ)AAM(D=SYiUH%{Dm%M3nT+lr z^)@XpCQg0)AfOfcgrOn~J+sN$Zn(;F&~}H?B`+yK{CB_fPc68na&DYf1=l@4%uR=bEBHW#9k?2DouIQG zE%AW=>X&~9fWQBL{1_vaQQj2FtD!8o0y`{nul*GVbqOK|h6H+@mp=PPoIJ6{Kl$|+ z*c|yxCSxY!9%(uzNyg|rB~8X;d5)A4UwKIB;rju~tK<7kYV{dfb&n^`Kj68~zR$n? zw?D#mbQ-)lgbtDRKX6_7h89*eJ4Ccbrx{r`CeL2ab-Q?>({}urM@}FGc_TUt$I)djl4@hsp-4#x^xsl}&BHQGM ze}kX=*>3^x<}0Up?b_31wNrS03n{(QpKA2eOw zpTSc#vvXgVac*gdmD;up7F_#fN%OH72c*^$JodF?mC1VhuxbH+nqWz9IMLp56}4CP zA_G05;SKoFpLwrH|Ks0yhq@e~^C3EqF@FtQaS&K=N+M+FJb`S4pZB=@*!3c>$DX-O zTkVpieUc<5OEU5l@=TJ(f+Q9s6G56tvQ$_fb3&So5$QfF3-|Fo^YV?E>3tT$4aj=r z*@QgL?5YC;tXWY})n*!)oodpY3k|3 z2Pn4_9#CG+@z#Aj-6P9K?>&h2y(2<*v_sR1JoyFvNYIowB(SrlA z2o?lG+sb+6vH5lAnvLDdm!?p@M1Aq8pD};bXjOtqd@ut+MeGaRE(%YQ$=d)68JZNW zW6&|^G2|mWz00z{%2&Vf4nbhv8v!7t=ET`OZeMLP$&~eUW#%A(JVBF^>Dc@$bv{I7 z`^<<3JoDK5%&iQ|x(Zl0GGOh42IIsx7PC&!d2E<0kIC~1c^*SPA@zB$22lDc~oMcC{ z+ijBM#*vffnblO*$x+bRdgw~AInX_U1KOOpIMNfWJUqqXLme}2{vUqn*R`|`6DP5z z3o(vxr!pLX*e=-KGQR=@hLGq8p(7My8uU;yAyg4F%{^ZF@sDV>BAe=9=yvP;(eIq4 zH=ZKO8YJ3hLP#zI9-6v}kU|ow5mU8&9)IE{$1m(3&IW)a_4wBBUSPjJ$0%=;=o%9p zlIskia{`&;i=04?Y5RMeJaLytKC^x}nqGZj!ler>bwwrW;$>4+9K2T2JuU=G@YUJaloLm81J~+9R8{ zFh1+=6Y^XlWlomE_Fl-n+YLs$f<`;w%%vXF?J-j3pDr)=-bFO~{eZQ#Hrsa}=YNxC^OGg?(}XOCNt`q2rF2?8VWVWBzi7y{d5!O& zpFyUXUknaM`P4ycNK(ykm=TXtmR7>UQU0UD8?Qgi+wXq?rDjmFX56k$^;(tef|=fN zK~V2_oPBm7>aFJCD4#mGdP*hu=I@>7^>57|j`9}@LYNI+Z~W;Q{@`C7J^c7TDqMSW zg{$v9WZ&j2q1xvj0M-CdW%YW;=k#;)%$@!?jnof4^^KQ>FiT90v1EyhqfCX`_P(GR zx55I#a8;BE?tTz*^3)FXdTBiUMM4@&e(N_L<-uf;)!Wmw!x3|flf%*egTYn(4}S9! ztAitK?M$P4IY&b(nb2bUev?oSnO_TaQ+9Ds89Qc zBOVCWi|b%?F0~Tq;v6TfWmGB>?czz{A*GK}O)@pdR=mXey@MV7_Y0d38f+)Cq+%XV zwee&PU$zi(hJH57t#@V)C;4;3B=*=E%`y=Sc&bgH>I7a3siugSVPkdnaFXvEHg{$i zv4E0O1geFvT6nTU$}IiKr*9*`wbzd_5Q`{p246Lh(*JWM5J35Y#d9q#d~uOe&&?Aw z?aKb|6U^EN*T+^u36`6FD`PkbKAg(kktme#QKE(>Kn0&pY5{6NPDTSELi6HzZC+^w}v({*xIRCg2^8G@pYal{1eTQcmIY7z=8I8lyzi-G@ z2%?Tsp`A#uw5*Uy2=IK#!r2y&f9)9OzqrKg$tKD_jMgWIq8lzGxB%K+mwjphszvdW z7)?|qA5c=$o-(iE`!u26PN|EiaM0t{SJ}!gp0G<*KSdBirPNSZ*}Z-B~GIg(3lEnv?W13 zWvaHvW0$X^+{-ur13{^rTer?3rj}_VzGipsDd{BW7w_oVsxD zaFRbacphx*U!XQUM{}x4W2#1bA!Pn^lVeZLaQbue%%5!$SZ~vRO!)r+lwNjU!lTLk P00000NkvXXu0mjfkTxtO literal 0 HcmV?d00001 diff --git a/repo/js/只要大瓶/assets/背包物品数字/0.png b/repo/js/只要大瓶/assets/背包物品数字/0.png new file mode 100644 index 0000000000000000000000000000000000000000..6dad5ef07934a779ec6bdf481db94c48df1cf6cb GIT binary patch literal 478 zcmV<40U`d0P)3qb z>rdKH7zXh3?;RKB^e~tm(&^+BSPOEopxm4gv~p2)0nM_^7`$|{`Dt@nqM$*I zj&4d=)&3XDBq4s-=l7TQc^;s&FZX|Zi!Ee^O%wVT4zoQ#QXZYr&iZFdCH_i21C6>A zjlF%Ww-PU1$v4ZQD6XyNXxDU~ma;lRf*^pcd{IY^KYD5o%*2}~hpHmCf1R&pHwOq> zqqju36yTC+h%hqPmOiZ9{b{L+tSa*E?pMm@hX`B7gTU#HK!iz(&E<>Tv#Q9ogT1NH zJVclnbpjLZg9w`#A73u_#BseAnM*;02M8LFlm{Ygwg&`J?1|>d;avP3L|CJ@JQTwJ z1!n#=GSNPsf0!bL?^6b!Gr&C+g$Nt*#AdG0`yuUr_XatLuwl#%;)|L4wM=^X(@p1R z7wzm+y9;R7G$?F;em3Ih(^8W`u5l!(iu}8E`f(-ugrNI}UU7-{;J99!Uq~YZGc@9i zFJ>y0%4&AQ>Ii9c7CRfRR=Qy;Q#;t07*qoM6N<$f~-d0UH||9 literal 0 HcmV?d00001 diff --git a/repo/js/只要大瓶/assets/背包物品数字/1.png b/repo/js/只要大瓶/assets/背包物品数字/1.png new file mode 100644 index 0000000000000000000000000000000000000000..d10d92194bf41c615ab9098f06209826d55d9d1f GIT binary patch literal 227 zcmeAS@N?(olHy`uVBq!ia0vp^>_9BY!2~4d?N3px zZBN=@7=@p|MN1`x#Y!=-nPR|Z!>k)|NFWjo6HwTjbB-k~kfy@2x7aa( z3P=?Yy3l{IAj{$h?_A%`opX{4=$hI)Kgs1jhr%1n>=WIBuCG-82X z-)g-ogCG|%+sGS}bH!poyJ+c}dfu+jxt0+WnlVz6MBrQuASlFUX!+>7uBl@dJggCg z28*5Nc@T>yR)TBc=w|EW_c*Q{AK9JEWryQS`4A{oxg!6lS7og?n&_%ZB({Z4Q3i{h z32;j77x>?-YigrjiEkzEK3p_fA?0C3u{h{9|9uPx?L$cnauE!tt@o&>+`1?h`<=$f zhpwqwueJAK-~ITB8FLVnFSV0BuKfISaXPLC!$JG)`#m_%m?mc7Jah0V*F96NPJ?nu zB5A*Af$XKZ)@dAJC33;KTDt`fUq)SmL SSrL^000002GJ zaZeI)0ET~GkGx7c4+Nti)^WfI0s}h%Q3gYS0R^Fm5MXFy&|x#UV2ojsS_le)op(`@ zSKYU0j4l6upLcuT2k;zA56;QrzCX0-a0P5mzta;6M-$a*WyoCe919q_n|SqFsUfDN z_?*(DP(OPxH!qapTB9RhAcxE)D3{Ba-hNl4cDMp$@g4PniYIrJ8bSc0IRF)o`-xBGaJ#4`)mKz`uCVqqV?stR4S3h{ZJ(S2(<{MxZdn6 zQ)Te&y4SmCv2=HGgy-0={f@^UnU-j$W>nrl6lC{u)>U6BvpeXu|8GiVc4rj^0gPH~ zYrq?fP9d0S$=y6UoDhF+nAmn2k?936YF+h#WI8LB8)g;8*mk#eq>wTAE>DEV00000NkvXXu0mjfO9A;2 literal 0 HcmV?d00001 diff --git a/repo/js/只要大瓶/assets/背包物品数字/4.png b/repo/js/只要大瓶/assets/背包物品数字/4.png new file mode 100644 index 0000000000000000000000000000000000000000..8d2eb411f2f0d5e646c47ec24b093697847cdff9 GIT binary patch literal 463 zcmV;=0WkiFP)A0004&Nkl4Ft zYfHjl6bJBqy%_~ElL&Q2`8-+Lh;qx&E`~;{jI@mC3L)JvQo%P_dCL?lr`2q0Nh??Q zEh4SOB7*;$!}&euzB4Ww0TMltYDa7ZG)!206ynjAOn!*o^@ z1DMV_HZ{MvytcU=MEFXHV;MQg3Rp z{ZBz*6vv-`@3u;MLg`h_B<+m~wI6381dj;~l}R6ZJ&Kj{|DHts!E`wn=xPbP0~ zSf=nB^6njRgi5~#hQ?GFM4|BcZ^GsAafHrD0NK~6tHgG#N^=m)6mYGDBX;-w;5ZoW z7b$te%E);%lfF+sraZfc7(_i#Hh~rj`3$I4X_Lhvp4JSE%npsK21jw;uu?cVFH@W2 zakBgMT9v-IydpL|IwPSqSS{8qe=y9@dCv3`i}N&bmJm4N00000NkvXXu0mjf0=v~` literal 0 HcmV?d00001 diff --git a/repo/js/只要大瓶/assets/背包物品数字/6.png b/repo/js/只要大瓶/assets/背包物品数字/6.png new file mode 100644 index 0000000000000000000000000000000000000000..657f58790d4e74a5d277fc40e8dcd4f9232888d2 GIT binary patch literal 441 zcmV;q0Y?6bP)2f4 zX-mRj0Kjp--c$;kR!l9?d|Y0M*UZwwl2QhWhJ^&Bd6dv8$?$+k(a4BpdE}N_YU#I# z2O)a<|GoKh#zS^AVBQ<_`NgHfMFQQLFBoQ8FXJIQ9H(0kgK)=ovsuqAX8at&ZDxOT?1_uuoODu85xk;yOj@?BSfys>uja{;2 jmMG08yZbnr=rC`;j|KlM?yMVb00000NkvXXu0mjfo*%@! literal 0 HcmV?d00001 diff --git a/repo/js/只要大瓶/assets/背包物品数字/7.png b/repo/js/只要大瓶/assets/背包物品数字/7.png new file mode 100644 index 0000000000000000000000000000000000000000..9225bd42c72844727ea6e0d695dc7feb08ebb610 GIT binary patch literal 380 zcmV-?0fYXDP)3pw zT}#4X7>4)v-pT`cZGj|qps$-Pmw_6l5*kd9pid#PL@Wdo>(ma?C^E9C?MrKGX=>%a zh?vY)!gY3W-_QMEB3~DI_CEsm*b-RGK?NO)lktZb3_vsyvz1~Jd)VP|_B5B*$z*e} z`1bTHLC|5gR>f3V=)8&=sw`Yr$_^@s+m}=6laJmDHXJBAEwK@0woG#*L5Bs79S)SS z?yAyRp=h>J78{*BNPqTZgMMl}xV;eo(E<^u-rZ=GqjXo5@`a)aCueZdA7c8Qwn2-0 zJ-D6#5NV_IH9zUEzI39DPI}%`&+AcelcZn0f?MSYjT@2XyuvPO&$S= zOgI?`$FnwMI{zzZ9GR00001@A zYfsu>0EOSb*NzeJtw5oIBEE&TC?G-vOVy&H76yjljmQjPVKEa7e85X$h{nqRftZY? zq90H;`4$Qk^ocVG}vHt%q`hGa2_)?=x=o2ypy$Hm3D z7)dC5&BzBZh;$ZLwR-uxCo9M5wOjiP|AC-!NDnb(^FGw?6gKF0-`}3*f@><>uma!& zts&XtLb3PKQ5=nbX`G-TG&*t*!Om<$_&>A_lo{{3);M>u6UW{6q s`LU_Fal7A)d=}d84XmaQvaN^vzf-UAR&x*PLI3~&07*qoM6N<$f`^gjwg3PC literal 0 HcmV?d00001 diff --git a/repo/js/只要大瓶/assets/背包物品数字/9.png b/repo/js/只要大瓶/assets/背包物品数字/9.png new file mode 100644 index 0000000000000000000000000000000000000000..172ab8a99f2317c16e30d28348f2bc99633ac36a GIT binary patch literal 515 zcmV+e0{s1nP)2#v zZBN=z7`=b*l4T~|Zqs1h$mDhfd6j}GhzPz8G0w;a5j$9Q4NMr|XyMy7-IlQlI27$x znayY-|6(sCGbYcs=RD^;=N!=2l+H;bUns7wKMT&s{BzOJ!rJ=gmMDsf-0o`%Xf^5^ zPg5p(de~^QxMl<4RkO`ckPgZoNb@hxPn&>C?~a<>5Meg-SgJ~2>K`kj==4Sm1ohyN zue|>T_(M?xK@A&iLUylrdEVC)O_dW{={w^N13|4lNdkvA3=tkPdqh#}Yl=SkLeWG| zLxg>SW#IHiAi~CnQ`<{g~Gqfw{V8XgPh^Tmi z16Muew0$H=Qid0jsZ53!QXEg&1Nw8NQW@yNS3Tv|&$I526Sdpf6>=nI3xl{002ovPDHLk FV1jZ8?kE5N literal 0 HcmV?d00001 diff --git a/repo/js/只要大瓶/main.js b/repo/js/只要大瓶/main.js index 2d66689be..7b0e6e218 100644 --- a/repo/js/只要大瓶/main.js +++ b/repo/js/只要大瓶/main.js @@ -44,52 +44,86 @@ let rg; keyPress("B"); //切换到圣遗物界面 - await clickPNG("狗粮界面"); + await findAndClick(["assets/RecognitionObject/狗粮界面1.png", "assets/RecognitionObject/狗粮界面2.png"]); if (settings.autoSwitchCount) { log.info(`填写了临界小瓶数量为${(+settings.autoSwitchCount)},开始识别`); - await clickPNG("筛选"); + await findAndClick("assets/RecognitionObject/筛选.png"); await sleep(200); click(30, 30); await sleep(100); - await clickPNG("重置"); + await findAndClick("assets/RecognitionObject/重置.png"); await sleep(200); - await clickPNG("祝圣之霜定义"); + await findAndClick("assets/RecognitionObject/祝圣之霜定义.png"); await sleep(200); - await clickPNG("未装备"); + await findAndClick("assets/RecognitionObject/未装备.png"); await sleep(200); - await clickPNG("未锁定"); + await findAndClick("assets/RecognitionObject/未锁定.png"); await sleep(200); - await clickPNG("确认"); + await findAndClick("assets/RecognitionObject/确认.png"); await sleep(200); click(30, 30); await sleep(100); { const smallBottleRo = RecognitionObject.TemplateMatch(file.ReadImageMatSync(`assets/RecognitionObject/背包小瓶.png`)); + const bigBottleRo = RecognitionObject.TemplateMatch(file.ReadImageMatSync(`assets/RecognitionObject/背包大瓶.png`)); smallBottleRo.InitTemplate(); + let digitsSmall = -1; + let digitsBig = -1; for (let i = 0; i < 5; i++) { + if (digitsSmall >= 0) { + break; + } const rg = captureGameRegion(); try { const res = rg.find(smallBottleRo); - if (res.isExist()) { - const regionToCheck = { x: res.x, y: res.y + 110, width: 122, height: 30 }; - const raw = await recognizeTextInRegion(regionToCheck); - // 只保留数字 - const digits = (raw || '').replace(/\D/g, ''); - log.info(`识别到小瓶数量为${digits}`); - if ((+digits) > settings.autoSwitchCount) { - settings.bottleType = "只要大瓶"; - } else { - settings.bottleType = "只要小瓶"; - } - log.info(`当前分解模式为${settings.bottleType}`); - break; + if (res.isExist()) { + digitsSmall = await numberTemplateMatch("assets/背包物品数字", res.x, res.y + 110, 122, 30); + log.info(`识别到小瓶数量为${digitsSmall}`); } + } finally { rg.dispose(); } if (i < 5 - 1) await sleep(50); } + if (digitsSmall < 0) { + log.info(`未识别到小瓶数量,视为0`); + digitsSmall = 0; + } + if (digitsSmall >= settings.autoSwitchCount) { + settings.bottleType = "只要大瓶"; + } else { + settings.bottleType = "只要小瓶"; + } + log.info(`当前分解模式为${settings.bottleType}`); + if (settings.recognizeBig) { + //点击小瓶防止大瓶图标闪烁 + await findAndClick("assets/RecognitionObject/背包小瓶.png"); + await sleep(300); + + for (let i = 0; i < 5; i++) { + if (digitsBig >= 0) { + break; + } + const rg = captureGameRegion(); + try { + const res = rg.find(bigBottleRo); + + if (res.isExist()) { + digitsBig = await numberTemplateMatch("assets/背包物品数字", res.x, res.y + 110, 122, 30); + log.info(`识别到大瓶,数量为${digitsBig}`); + } + + } finally { rg.dispose(); } + if (i < 5 - 1) await sleep(50); + } + if (digitsBig < 0) { + log.info(`未识别到大瓶数量,视为0`); + digitsBig = 0; + } + notification.send(`当前背包大瓶数量为${digitsBig},小瓶数量为${digitsSmall}`); + } } } @@ -116,14 +150,14 @@ let rg; } //点击分解 - await clickPNG("分解"); + await findAndClick("assets/RecognitionObject/分解.png"); await sleep(500); - await clickPNG("分解筛选"); + await findAndClick("assets/RecognitionObject/分解筛选.png"); await sleep(200); - await clickPNG("分解未锁定"); - await clickPNG("分解确认"); + await findAndClick("assets/RecognitionObject/分解未锁定.png"); + await findAndClick("assets/RecognitionObject/分解确认.png"); //点击倒序 - await clickPNG("倒序"); + await findAndClick("assets/RecognitionObject/倒序.png"); rg = captureGameRegion(); while (true) { let foundBigBottle = false; @@ -137,7 +171,6 @@ let rg; rg.dispose(); rg = captureGameRegion(); try { - const bigRes = rg.find(pngRo1); if (bigRes.isExist()) { foundBigBottle = true; @@ -162,12 +195,10 @@ let rg; } } finally { } - let time1 = new Date(); if (!await selectOneAritfact()) { log.info("所有指定星级选择后不足以分解出目标"); break; } - //log.info(`调试-用时${new Date() - time1}`); } if (foundBigBottle) { log.info("成功选出分解所需狗粮"); @@ -184,8 +215,8 @@ let rg; fourStarCount += tempfourStarCount; tempfourStarCount = 0; - await clickPNG("执行分解"); - await clickPNG("进行分解"); + await findAndClick("assets/RecognitionObject/执行分解.png"); + await findAndClick("assets/RecognitionObject/进行分解.png"); await sleep(700); click(30, 30); await sleep(300); @@ -208,8 +239,10 @@ let rg; if (parts.length > 2) { log.info(parts.join('')); + notification.send(parts.join('')); } else { log.info('没有分解任何物品。'); + notification.send('没有分解任何物品。'); } @@ -275,25 +308,72 @@ async function selectOneAritfact() { return false; } -async function clickPNG(png, maxAttempts = 40, Threshold = 0.9) { - const pngRo = RecognitionObject.TemplateMatch(file.ReadImageMatSync(`assets/RecognitionObject/${png}.png`)); - pngRo.Threshold = Threshold; - pngRo.InitTemplate(); - return await findAndClick(pngRo, maxAttempts); -} +/** + * 通用找图/找RO并可选点击(支持单图片文件路径、单RO、图片文件路径数组、RO数组) + * @param {string|string[]|RecognitionObject|RecognitionObject[]} target + * @param {boolean} [doClick=true] 是否点击 + * @param {number} [timeout=3000] 识别时间上限(ms) + * @param {number} [interval=50] 识别间隔(ms) + * @param {number} [retType=0] 0-返回布尔;1-返回 Region 结果 + * @param {number} [preClickDelay=50] 点击前等待 + * @param {number} [postClickDelay=50] 点击后等待 + * @returns {boolean|Region} 根据 retType 返回是否成功或最终 Region + */ +async function findAndClick(target, + doClick = true, + timeout = 3000, + interval = 50, + retType = 0, + preClickDelay = 16, + postClickDelay = 16) { + try { + // 1. 统一转成 RecognitionObject 数组 + let ros = []; + if (Array.isArray(target)) { + ros = target.map(t => + (typeof t === 'string') + ? RecognitionObject.TemplateMatch(file.ReadImageMatSync(t)) + : t + ); + } else { + ros = [(typeof target === 'string') + ? RecognitionObject.TemplateMatch(file.ReadImageMatSync(target)) + : target]; + } -async function findAndClick(target, maxAttempts = 20) { - //log.info("调试-开始检查"); - for (let i = 0; i < maxAttempts; i++) { - //log.info("调试-检查一次"); - const rg = captureGameRegion(); - try { - const res = rg.find(target); - if (res.isExist()) { await sleep(16); res.click(); await sleep(50); return true; } - } finally { rg.dispose(); } - if (i < maxAttempts - 1) await sleep(50); + const start = Date.now(); + let found = null; + + while (Date.now() - start <= timeout) { + const gameRegion = captureGameRegion(); + try { + // 依次尝试每一个 ro + for (const ro of ros) { + const res = gameRegion.find(ro); + if (!res.isEmpty()) { // 找到 + found = res; + if (doClick) { + await sleep(preClickDelay); + res.click(); + await sleep(postClickDelay); + } + break; // 成功即跳出 for + } + } + if (found) break; // 成功即跳出 while + } finally { + gameRegion.dispose(); + } + await sleep(interval); // 没找到时等待 + } + + // 3. 按需返回 + return retType === 0 ? !!found : (found || null); + + } catch (error) { + log.error(`执行通用识图时出现错误:${error.message}`); + return retType === 0 ? false : null; } - return false; } async function findPNG(png, maxAttempts = 20) { @@ -315,28 +395,102 @@ async function findWithoutClick(target, maxAttempts = 20) { return false; } -async function recognizeTextInRegion(ocrRegion, timeout = 5000) { - let startTime = Date.now(); - let retryCount = 0; // 重试计数 - while (Date.now() - startTime < timeout) { - try { - // 在指定区域进行 OCR 识别 - const gameRegion = captureGameRegion(); - let ocrResult = gameRegion.find(RecognitionObject.ocr(ocrRegion.x, ocrRegion.y, ocrRegion.width, ocrRegion.height)); - gameRegion.dispose(); - if (ocrResult) { - let correctedText = ocrResult.text; - return correctedText; // 返回识别到的内容 - } else { - log.warn(`OCR 识别区域未找到内容`); - return null; // 如果 OCR 未识别到内容,返回 null - } - } catch (error) { - retryCount++; // 增加重试计数 - log.warn(`OCR 识别失败,正在进行第 ${retryCount} 次重试...`); - } - await sleep(200); +/** + * 在指定区域内,用 0-9 的 PNG 模板做「多阈值 + 非极大抑制」数字识别, + * 最终把检测到的数字按左右顺序拼成一个整数返回。 + * + * @param {string} numberPngFilePath - 存放 0.png ~ 9.png 的文件夹路径(不含文件名) + * @param {number} x - 待识别区域的左上角 x 坐标,默认 0 + * @param {number} y - 待识别区域的左上角 y 坐标,默认 0 + * @param {number} w - 待识别区域的宽度,默认 1920 + * @param {number} h - 待识别区域的高度,默认 1080 + * @param {number} maxThreshold - 模板匹配起始阈值,默认 0.95(最高可信度) + * @param {number} minThreshold - 模板匹配最低阈值,默认 0.8(最低可信度) + * @param {number} splitCount - 在 maxThreshold 与 minThreshold 之间做几次等间隔阈值递减,默认 3 + * @param {number} maxOverlap - 非极大抑制时允许的最大重叠像素,默认 2;只要 x 或 y 方向重叠大于该值即视为重复框 + * + * @returns {number} 识别出的整数;若没有任何有效数字框则返回 -1 + * + * @example + * const mora = await numberTemplateMatch('摩拉数字', 860, 70, 200, 40); + * if (mora >= 0) console.log(`当前摩拉:${mora}`); + */ +async function numberTemplateMatch( + numberPngFilePath, + x = 0, y = 0, w = 1920, h = 1080, + maxThreshold = 0.95, + minThreshold = 0.87, + splitCount = 10, + maxOverlap = 2 +) { + let ros = []; + for (let i = 0; i <= 9; i++) { + ros[i] = RecognitionObject.TemplateMatch( + file.ReadImageMatSync(`${numberPngFilePath}/${i}.png`), x, y, w, h); } - log.warn(`经过多次尝试,仍然无法在指定区域识别到文字`); - return null; // 如果未识别到文字,返回 null + + function setThreshold(roArr, newThreshold) { + for (let i = 0; i < roArr.length; i++) { + roArr[i].Threshold = newThreshold; + roArr[i].InitTemplate(); + } + } + + const gameRegion = captureGameRegion(); + const allCandidates = []; + + /* 1. splitCount 次等间隔阈值递减 */ + for (let k = 0; k < splitCount; k++) { + const curThr = maxThreshold - (maxThreshold - minThreshold) * k / Math.max(splitCount - 1, 1); + setThreshold(ros, curThr); + + /* 2. 0-9 每个模板跑一遍,所有框都收 */ + for (let digit = 0; digit <= 9; digit++) { + const res = gameRegion.findMulti(ros[digit]); + if (res.count === 0) continue; + + for (let i = 0; i < res.count; i++) { + const box = res[i]; + allCandidates.push({ + digit: digit, + x: box.x, + y: box.y, + w: box.width, + h: box.height, + thr: curThr + }); + } + } + + } + gameRegion.dispose(); + + /* 3. 无结果提前返回 -1 */ + if (allCandidates.length === 0) { + return -1; + } + + /* 4. 非极大抑制(必须 x、y 两个方向重叠都 > maxOverlap 才视为重复) */ + const adopted = []; + for (const c of allCandidates) { + let overlap = false; + for (const a of adopted) { + const xOverlap = Math.max(0, Math.min(c.x + c.w, a.x + a.w) - Math.max(c.x, a.x)); + const yOverlap = Math.max(0, Math.min(c.y + c.h, a.y + a.h) - Math.max(c.y, a.y)); + if (xOverlap > maxOverlap && yOverlap > maxOverlap) { + overlap = true; + break; + } + } + if (!overlap) { + adopted.push(c); + //log.info(`在 [${c.x},${c.y},${c.w},${c.h}] 找到数字 ${c.digit},匹配阈值=${c.thr}`); + } + } + + /* 5. 按 x 排序,拼整数;仍无有效框时返回 -1 */ + if (adopted.length === 0) return -1; + adopted.sort((a, b) => a.x - b.x); + + return adopted.reduce((num, item) => num * 10 + item.digit, 0); } \ No newline at end of file diff --git a/repo/js/只要大瓶/manifest.json b/repo/js/只要大瓶/manifest.json index d5126e1bf..e2c0abdc7 100644 --- a/repo/js/只要大瓶/manifest.json +++ b/repo/js/只要大瓶/manifest.json @@ -1,7 +1,7 @@ { "manifest_version": 1, "name": "只要大瓶", - "version": "1.4", + "version": "1.5", "description": "分解狗粮尽量只要大瓶", "authors": [ { diff --git a/repo/js/只要大瓶/settings.json b/repo/js/只要大瓶/settings.json index 51a226606..5aa74636d 100644 --- a/repo/js/只要大瓶/settings.json +++ b/repo/js/只要大瓶/settings.json @@ -24,7 +24,12 @@ { "name": "autoSwitchCount", "type": "input-text", - "label": "临界小瓶数量,填写后将会在每次开始时识别小瓶数量\n数量大于所填数值时将会自动切换为只要大瓶,否则切换为只要小瓶\n不填时不识别,保持自定义配置中的选项" + "label": "临界小瓶数量,填写后将会在每次开始时识别小瓶数量\n数量大于所填数值时将会自动切换为只要大瓶,否则切换为只要小瓶\n不填时不识别,保持自定义配置中的选项\n填0即可保证分解为大瓶同时识别" + }, + { + "name": "recognizeBig", + "type": "checkbox", + "label": "仅在上一项填写时生效,同时也识别并输出大瓶数量\n并通知大小瓶的数量" }, { "name": "Threshold1",