From 2b29dc7fa3a614e12c3ca0c27e6e95b23204cb74 Mon Sep 17 00:00:00 2001 From: MistEO Date: Sat, 29 Apr 2023 21:24:33 +0800 Subject: [PATCH] =?UTF-8?q?perf:=20=E4=BC=98=E5=8C=96=E5=B9=B2=E5=91=98?= =?UTF-8?q?=E8=AF=86=E5=88=AB=20flag=20=E6=A3=80=E6=B5=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- resource/tasks.json | 83 ++++++++---------- resource/template/OperBoxFlagLV.png | Bin 343 -> 0 bytes resource/template/OperBoxFlagRole1.png | Bin 0 -> 1557 bytes resource/template/OperBoxFlagRole2.png | Bin 0 -> 1964 bytes resource/template/OperBoxFlagRole3.png | Bin 0 -> 1938 bytes resource/template/OperBoxFlagRole4.png | Bin 0 -> 2022 bytes resource/template/OperBoxFlagRole5.png | Bin 0 -> 1474 bytes resource/template/OperBoxFlagRole6.png | Bin 0 -> 1750 bytes resource/template/OperBoxFlagRole7.png | Bin 0 -> 1697 bytes resource/template/OperBoxFlagRole8.png | Bin 0 -> 1549 bytes resource/template/OperBoxFlagRole9.png | Bin 0 -> 1538 bytes .../Vision/Battle/BattlefieldDetector.cpp | 26 +----- .../Miscellaneous/OperBoxImageAnalyzer.cpp | 40 +++++++-- .../Miscellaneous/OperBoxImageAnalyzer.h | 1 + src/MaaCore/Vision/VisionHelper.h | 27 ++++++ 15 files changed, 97 insertions(+), 80 deletions(-) delete mode 100644 resource/template/OperBoxFlagLV.png create mode 100644 resource/template/OperBoxFlagRole1.png create mode 100644 resource/template/OperBoxFlagRole2.png create mode 100644 resource/template/OperBoxFlagRole3.png create mode 100644 resource/template/OperBoxFlagRole4.png create mode 100644 resource/template/OperBoxFlagRole5.png create mode 100644 resource/template/OperBoxFlagRole6.png create mode 100644 resource/template/OperBoxFlagRole7.png create mode 100644 resource/template/OperBoxFlagRole8.png create mode 100644 resource/template/OperBoxFlagRole9.png diff --git a/resource/tasks.json b/resource/tasks.json index 5259a3088a..b9c0047137 100644 --- a/resource/tasks.json +++ b/resource/tasks.json @@ -2323,30 +2323,6 @@ "[Uu]-[O0o]f{1,2}icial", "U-Official" ], - [ - "^4", - "" - ], - [ - "^α", - "" - ], - [ - "^-", - "" - ], - [ - "—", - "" - ], - [ - ".*12F", - "12F" - ], - [ - "^_", - "" - ], [ ".*威龙陈", "假日威龙陈" @@ -9862,15 +9838,33 @@ 20 ] }, - "OperBoxFlagLV": { - "templThreshold": 0.6, + "OperBoxFlagRoleTopROI": { + "template": "empty.png", "roi": [ - 40, - 310, - 1128, - 327 + 0, + 78, + 1145, + 50 ] }, + "OperBoxFlagRoleBottomROI": { + "template": "empty.png", + "roi": [ + 0, + 394, + 1145, + 50 + ] + }, + "OperBoxFlagRole1": {}, + "OperBoxFlagRole2": {}, + "OperBoxFlagRole3": {}, + "OperBoxFlagRole4": {}, + "OperBoxFlagRole5": {}, + "OperBoxFlagRole6": {}, + "OperBoxFlagRole7": {}, + "OperBoxFlagRole8": {}, + "OperBoxFlagRole9": {}, "OperBoxFlagElite1": { "doc": "精英一 模板" }, @@ -9882,8 +9876,8 @@ "template": "empty.png", "templThreshold": 0.9, "roi": [ - -7, - -52, + 11, + 171, 24, 35 ] @@ -9893,8 +9887,8 @@ "template": "empty.png", "templThreshold": 0.85, "roi": [ - 81, - -29, + 99, + 194, 24, 24 ] @@ -9905,16 +9899,14 @@ "OperBoxPotential4": {}, "OperBoxPotential5": {}, "OperBoxNameOCR": { - "algorithm": "OcrDetect", - "fullMatch": true, + "baseTask": "CharsNameOcrReplace", "text": [], "roi": [ - 5, - 42, - 105, - 20 - ], - "postDelay": 100 + 4, + 269, + 122, + 14 + ] }, "OperBoxLevelOCR": { "algorithm": "OcrDetect", @@ -9922,12 +9914,11 @@ "isAscii": true, "text": [], "roi": [ - -13, - 7, + 5, + 230, 37, 23 - ], - "postDelay": 100 + ] }, "RoguelikeRecruitSwipeMaxTime": { "algorithm": "JustReturn", diff --git a/resource/template/OperBoxFlagLV.png b/resource/template/OperBoxFlagLV.png deleted file mode 100644 index 3baa29f9d2cec25db9b15bbbffd8ef80f8412829..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 343 zcmV-d0jU0oP)$=qIbv)0*7=ws#zu$3Pm$EEz9EV!1#_RP$7ezs*(_uE7Q4|HoE6J1pm&1RD@46)Xd=Q+FGj=^AnwU%D5N4wqTa5x|$Xr&at z-;c-R!RPbA^E|fOEtkuM@pw!WMI=eWe!s_Y9JI9-tu?;yBO>^|Pg$01HX9a;1^s@X z^?FTJRpfd8U&^wKAP874m#kJRMxzmN9P@s^IiJs*PA5c!G)+-}HOA2Gc4@U*D5bbw puVh(9qtW2|{gS3BBEoPuJr5C;zR0(DD8gbEJa92*a|rKeI#OKE$4X9lNn$<0z?_W9tM^TqwW zGW-Sb%z0yfFT8+=03Zm0TCElYL6&8Y$FmX&QCS868P)+?&K2Lh4$mNBQc{vir81dJ z7KFE0{_{O9w}NAKKO35O{nB?JAml8q=frMdmtMPv~2mlCzP*PG-TU%RPT&z?o0f18K^?GeKoBgY=ylyuj z0wItvY&v5cyh#8cGc&WbwRQLI-GU$hKp+s9nVFfMo*oz&a1IRxo;<-dkT7g&Hr^g! z)M~Y*qN1&>ZNr8Q05Cs0J2E_ccVuMF?Vg*P^LxGVSWKoAD20S!^J$}VkSQ=4YwPOD z%gcG54~N57?e;5|FVD=)rKYDVRVqrUD2f45j7K7nFl_puXxPE-silUAz|3~e$mKx>^s%f|NP_=p66q+SZ8Nv zx6PK4oc#CNT9etVR4QY!*u=zy?b4-hy1OA^_-;etn3FqXwf^hVPZ2R1jb6BLp~r4F z78bU)wFxQ}A_Bn5%1TFj`@cW?3=)P7r}D=~*ou9XXFvQ zoOhkUU=RRgSze7qD3#$Qc%m+M%EdA~ugl1&s;WM6 z3Wg9l9*;&M!G#5uA-*NCr?;oCw=WWjP?@f-L@1^360EPweR!WkM3(3Edi~qgR_l?Y zn>J;@{}T!ZytC87Yp?Mf8z++Z#OJu}uwAyrqOtH&n8qo*fQTpRa;EO{u!iILjBVSp za|}5-x!Kv-Sy|h(+D(YKNNbM61_D}!vOHp3lzP;sc_Y9tEE^*yn zh4o_?hA<34WLZ`al!p#klQ*abhlZx6el!`2_UtiZOXKzj&KSG`LvQ9*@DRK}3$@5mBSj zn9XKmQBmKuUVN{<=F#{=cr}Q~aXca_6bhYAS5#17$}jj09Oj-@H~3YS00000NkvXX Hu0mjfwk+`u literal 0 HcmV?d00001 diff --git a/resource/template/OperBoxFlagRole2.png b/resource/template/OperBoxFlagRole2.png new file mode 100644 index 0000000000000000000000000000000000000000..fd0dcab34547d8da426cda787e1b500d5079528f GIT binary patch literal 1964 zcmV;d2UGZoP)%L20)f&A`(IXsHv$5g+dJt4VtFGme1!inM^8`DwRs8U}gZ4 zBoPra1E6p?j0$EJLJ*OnC;-^j($aGN{Q1__R)@nuL;$w8x0A`_)vH%`c6Lx9gdieW zmSJONibNu)5H=!G6a@g=Iy*Z@M@RjBzouzK1R$5oB@&5Cmo9B@Z^I^RL?p{HDku_( zph8tukH=G6Tbs}4x3{-a%X4f=;)~5?^jh7wrn<=NF>I_#!S-$;BvV<9*@iA z%4V~ho15iw88!+>qW}m*z>yd1V%?k1A&05s<0V` zF*!LoHa1o+mz_>$C=?nR8uI)7$z<}=Pd_ybgKg9mivdufsj__8rfEb3U~6mZ)~#EYFJBG@gVAWTudgo{3~HK|N~PX^|NZ6V z<$OM0EEcIN76V9y7W4;4MqV8mIa^&_4Pb9?&os^Z_wTQ+t~NI}`+Po!!vUMF>oYSm z$z*b5WW?w5x!rE3)2XVeX_^xg6IZTW`Qe8j_V@RxD;5Jth4%LEFTC-_`NqZu{14MK z*Vor|U4NmeNpUzp1i&zi2dPx4P>9Fl9*+kA5lNCHgxK2J`uO9IzZf51U0b8BSPUQ) z+HYQa?cBMuKA-o%fdfPY8#C*=zPPw}#Osx-s+b5sHk*Bz$+$Ev5)QlFZrGT)P$-s~bg;iI6!IN8qAH588HSP0WV~Ll>~MgHnX}pK z%JQ;PQF?oO-EKF4-QB{ICmZRd^!WAhZ|~gM(DkBaQDk6%@e?AdcDoy!n+N;*&zw5t zYiiPD8O&MJeE9gW*Xvajg_!{uhLKrX(un%|`dluTX_^lnq;K6y%qC|SR~Gk*du*e~ zzyRYZhtuiycr;C`^?1&mJJ;9Q`Mk%oyTAYN@nf&ot0)RH127CDv$UiUMZ)2HK0iG@ z{pFWmegA!Gzqntp3W5ayW~S)iAmb?sP>2A?vV7>!p@E}EfA!*vP0h_~o10#*S5XvZ z24EP*!%Rj491h3Ln>Xj@=QlTv&CMKxODG8l*eE(U$aqQ;f-Fl>l)AdQ`uciJ(`ssJ zS^|NdSgg6ZSy2>b24EP*+;`v2PEGCa?UhO;%d)n%a+%B{2A5D05U^3~_;FN7LL8{B z4hDn${rxR1E#~g-gN23tVsSVg4~5!P)d7$YY#93N?CmeFkNbR0o$c+Og9kG!k0!pF zez>}lE93-=vSkS&sDF4EHn-b-`1$ACT3d&PhN97EU0q$#vKG?mrA(&w(4jyesH!f2 zgb=!}&(Gg`^eBC7aIh^9a51_y1G(RQ{52^I;*Pz5MY(ctB;-}W)c&L z$#il>le)sx`!9GpXWLZW9GwZqB%Gz2(W1}oP0TM#!y1ufKakQs!$U_ESw@8rVy95}QP*>( z+1S{q$WDNS5W1nK7Z*yU-GPClwH}W|Boit4$$qi;&(A*}zkV~7TBOMENsx5#U`;%J z^4!b6?(gnKMLM0HO(r*Ux%OzZwbidV90X!!!!W+RbLaNdWF#C8_w+P*y)`Zu0hVR0 zZ*2VOgAWojw{tsripJv%kRyLZoBTl?ypZ??6y zRXH568HREDn{Tdt_SpfqyP=_>Jrs&XA|bzjC!hb~-~Yb)$tMe$OwqC^8jmwTlH_zc zPaQu#^2#ehh#NO zUgdDWW*A0dGVzy7ADY`HY;|?D;c!QNef^CaH*(qRo+TA6P&9s;K_n3XB9bJDnakxe zGdqM(!NK*-8wnv9a;Y zOE2|CB9J6Y2msk^cJ_Ai`t@6dLIFRIdQYEW5T1$3M53yy>hR&i&pr1X5iv7>VzIcj yr9WQREz82squ$eJ7=&jb$pS1q8?jLFi~a*boV|8uFwGr#5-#Ru19kxW*vIELV#!*kDiSaIe9&UC z!2btYEEYH%M1(X#2z(F1e-U^CD=RDE?GO<%L?RI)@;omH0ss&~AcG==CIm84hyo&3 zR#w7WAR=TSqD&@hY;0UvSqTIJ06++V44M#H5Fmr6C;<_xt1I9w2%!KF03;HLUazmK zt8+S?U0q#w@7@IEP?_L*Lt!BtT z1WaQXQC61B>1;cF`i#kBlFQ``!|d(t1_D!^oqro19!8{ST8fBbu~;gVvMhV?!bM|A zi9(@BrBYX}{IBi zMn-(TiEucCR;wA(v|6pTrmmsRUT!iK6&KSC6OBe+ym&D+_4x7QhvVZDv6w&z94IU- zWLef~t*NhP)oLw8G12JG?Cgx&?e==z^Yil@#{mG^Y$k?bii%3=>gwCt+AAw-0D$ND zU~p-2@~Ou&IypHJ3M~V{RFYOI)yMUE)^2ZUY1Qiu6h(3SyK8H!{(%4C(7@o}AkXsv zfCvDHEL)~fC_en~mkx(3FE5XxaDRVqd3m|Nzvsb&`@!H6MNtgH&=iv^*IBK$j`Qa$ zs;Vf8B7(599iE?=el#@T_Ih6hgMuJH8bwh6h%8&CQmL<9`>WY(5rowCcG%~8a_iQu za5%KJwHA->(KIcQNb)rK@BQe5`bOswosMQ0j*D-uuMZFYyZ2xBR#sN_6C9Tk000r? za(N<=Jb)})rdF#z`Q(d|lJd#PiQeA(KHo$*98RTDJRc*3XBbAK(b(;dpS<_8qlL#2 zaeF)T`;leKa&mGmUHa(t>wT|x zcy=}ri9`q?03ZmQLXlNoUhZ@@S5>iky-_TdOi%lUhWaNSk1Z}NqSchEb^1 z)zvjEE$t?g`SZ{J(%09Ec6+%uYOmB_*Y~xjIA) zhu6OO=Bw`R`&*kK5l;buR7wCK#|;Lysj0TsX0cR>#geO6KkDxOCpI>kAp_q4hG8@s zjb5*JI9gfORakfofFzTNg@xxnpQpFCI}ixagq8_18fl$Q_fAofwV{D^xwKj>07N2@ z>(_rbFwlc18_keG(X>>SrPJx^>e!Z+QzuTmE0ZaBJ`s)XynMOP({tPF9Swy-f*^<} zv0AD*lCO0-ov!xwW5vY)!1KxV_0{R=>63EuFQ}|&Xl_1bHk)%)DgYrC+h1N@?CSb@baZ5M zbCc(JY_XdVkr9cEMq}HV3k}XTg(6!flc!Sr>gtlm<954;=I5U6L?Vbt(=+4HycmJI`cS50!y}dmlB>(`nILtDsto6(f?TwDo@`_wd0RY6~ zu`%!9&_Lg}0srRaW-PV`0EA(TB_&Nw?KYdepx~%dnF|2Xt(Ea7UeBo8@1F_=gMuIc z03sZ~R);x9srvb^KCY>?$z+OTl3!k47#eywGc!5spWfNpB7^{dEGw(dak9bgs;;ir zY6}5?7@cRqEW|fBNUrGSkM!#>~vKr%yeP9zBZ1 zV#)n|!t;=($;-d=i(gmQ*t4<}@%aAQ>hiR2-0$;_jd>%H9RMH%zJmY&wmQs8mFhQ_ zuW9m*cs#>>ecf|&bA%88pap><1k$v+!asca#qpxzNMvVz{`u(0;Dhcv92ZX{I6)BL zdk7)edh%U)mi*$6-(Ok|`lp|6ZEvPhDM+IQ0SSS$Bie$Gul`A;*0@I>4Gi?nemg^w zdq7AsnIMF~|009{0Jgg%cnfTIS>O;DMx@mq+1}oX#r6pya0uA$vcTaWQt$>j0Ed9>E(;tEA_Z@d18@lc Y0k2?Lj$GZszyJUM07*qoM6N<$g2UpQd;kCd literal 0 HcmV?d00001 diff --git a/resource/template/OperBoxFlagRole4.png b/resource/template/OperBoxFlagRole4.png new file mode 100644 index 0000000000000000000000000000000000000000..31412ff24ab9675b07117a6323ab47f014b37c8d GIT binary patch literal 2022 zcmVW>6mIw#yTO!3%1_U={V_| zPkm`0(l`@G$0Ux^FbWE~L^dEGay8ry%S}OqU07Lm_gwz}BIrXp?X>app-(>fq_ngY zfX!yh&(Bv?wW_LWcz7595eb5TS3MdHJ&E?%j#0DP7kELBOk`)2C0Dl#~ESOiV0%`|Wjk zdAh3JsjhZcRSgdh6A@lwbMSwo)2B~gzkVG+R8-W;6)UnAFJ6Oi zG!1heKYrZZ-Hn$7&WUsU7djE0I(4e7tPFrG%V}w8WMGhiHS)_NQjS*kF&)ELqWIOU0+|{+uIWi1i|<$oiT7O0E8Dfz=-JN@#F6DasWo7 z(dl%?$H({e_4#~007PUk7#t4A(yXkXE?>TQ$zpr5T~UN#)7AAb5SUR_H5d%4 zswy!?oZ}^$^~Yn!?%ci&KorIJc)QEx@_M~K-vpi`;W<&3WtYpfZo}Gjo7P8LqZ!i` zMX9d2*V)zM_xt<$`g}g0plQT8UZPolIC|7mSqVT8gxJ`aWy>;qdb*!Hd4lH%FanSy z$!IhtB_*v{lec^K?&#=fB6{NU_YDj*G&EFHRD?ny17n0Apks#))p$Grh{$S<%3Zmv zr>A>lbOg@{fDwQsNkpV5O0?CwYuB!~cI}FZjeQmlPX&W*ZEY7WTo@l87d4IW19YUQ zsJ6Nq01;U%=A4`*{r!DoV`Bg~z(@ih8)Q+CG)+lKN!qt>-_O^twOFF2rlw|sGml3e zUB7ny)~(xIha^gPffF%0bnxK4+FAfaB+I6(?8T3UhsMXp8DpGC7YIaA2CF1U>FLfb zTQ+VfD6l6d2c~@C;0)J!BogWF?)vo8e~ga$7{fdwPNdO?2Y-LRt`>8QM#GXNi=I9m z8y_FnG>sGK0uc!bafvC3DH}Jg+qrWa38WLhch_T-WM^u6LPCP7DqnwHQdU;s^G)If zPNdVJgYP%i-^CnBl2To%x~}_tzUk>{PQ)cKCN_3ucJAi<%~@HQ7K7xBBO@aa2#k)7nq_%KPEKKAVY0(1h@z^hy}jKRFJ64u+oLEd zkq~9I=H}+^-M7!-%4ob>`^BY8U7ei(IDrX_iVo~=X{^T_B9dh}Gc$8~dfH;KY%3^8 zcQ_ViWN=B+IQM$J<>fakD=QkEHt+e}f$!VCyL90~dwV-(5tzj2_~D|u znkvj8z+@1XWoO05CoIigwr%@PBVz=FH0?o0hsWb-YHEBs_Ecv&IOd6>xF|F8>|f4} z^$&dh*=G+PJOIFnGm+89CyJ}w<(Na@Cek*nU%Nhk)6x~I5?@QzCZ}{w8yp?Ia`mdm zQ#CU)1Auc5j(MUeW-MBC^30#rso>}5&o?zS0pP@SL8nv4kJQ|8V-5k)W^vD+-{k*t zM}jjAnjZ1{p9KQfZr;3GSNCXmI1~oIeGoY{9nECRzhs_V83@@V4%Idy``nuB+Eo3 zNs`%Y7EPwGriDTw0A{mU7DW-zG%XYg8w`f!IXU_H`6}lRy1E_>4?S$}pg$cy(pXcK zyK2?Dd-o>0G6s7)D{tRwZEf}Y{W{ab;RrYv1c8VcKn5u$CPokhtJRulw?~=Hx~_-A z5yqHVw&dllaV>Be%|;~>x%STz`ndS;!|z&FuU@@%+qOU;;C8#)+FApF05~`}IQ|V0 zVIC0yf*?qer0dLXPj)(84u{R@Ot4t2H*Vaf;tvjVHa8?CC8edO_xJbv{eDG>Fvc*C z<9{L|&Ou}nMagJnMx#z71cMqKJ@|fSbA!QPFv)T_999&CbA}&{IFmRhQB*}y0f;dJ zeYpR(58GQw5JXYroU5wJIm3@eoJpLMD5|2U0K}N#UpNiO#kMl4yZ`_I07*qoM6N<$ Ef?6KP9smFU literal 0 HcmV?d00001 diff --git a/resource/template/OperBoxFlagRole5.png b/resource/template/OperBoxFlagRole5.png new file mode 100644 index 0000000000000000000000000000000000000000..1359b222b47223cd6330b1ddbf0fe313aa7d870f GIT binary patch literal 1474 zcmV;z1wHzSP)=}RbU4qf{j!vb#rs$IPSrN2OP&S z41e04x9k5JF)-%+5}~c(DN%LJ>Gbfl#<(%T{H~XMur1V8wAQ0VRBv+s+&8`f=fc9w$`rF3j;tmI5db$#_?z1{)- zg)j$Zq$jI2mtY|TfOV4Y+7+RUQYyR@Po6w67z_e|z}?+lC=_bDwPk0^G;M7T@B+eo zn38&+y;BYIF~Bg$2!sMpg?CCy#;O%T60t<5)2TbuGACK+)=;@z{>bpCx~{souyAT( zf>J_}P@pgeCZ+D{=uyLbEW?UW;2{BI==zPO_al!eXN1JUzXPMx$1%J$CGvVZy+{6agOQz=O$qyRUYD4Iu;oScX-+qX-N8 zC?X=-+1Z6sT3ULtxV-q`xJf7wc)#VL%0CjE2U#WL)MkWFc6Ssosq0MOg3uBa&M?CqWAfI*Zyij}d-u&{71FNN7`?(6IO_PZma z`adZ0FbD2WO1yl%8~#BFM}b0se?a6X(UFm{gp#|XBPAuL+dDMl6O%ka1Ym_iA8&7^ zGU3C`+hh`%Uavp?^KrGd$!MB@{~+!=xaaCX54=Eun5nCaYk2t1$jBH^PwyG?bhDGcCcYMW^M4= z*x2~>>o*cY9_U9;6`jy%+QtnAgl7R0EAGU=fOrGaF9ynA;BTpY1uL-*;8(|wxP1Rw(^$l7Nx-RJm%!3YP&Cjm9tEq zygz4s$VR!`<>ABojZL*hX9}mLrof6)3iBW$ zn~Ta$>vTgF%M9k^rMCB60)WMfJq~`A931q4RN@5x*I)PVHeb3>ajx7jF^1W>X&t?4 zi9`~#YIRmhzS|p%;MLq58a#38hwJ^ln5)Xvbhh~V`bI@YuUNLqfpvse^Vp!*bhXsf zoWq>_RBiV~mSyE~xr4|N5#iPF#4QbcHj8@ c3cLn?1D}wDdwJPynE(I)07*qoM6N<$g19BaumAu6 literal 0 HcmV?d00001 diff --git a/resource/template/OperBoxFlagRole6.png b/resource/template/OperBoxFlagRole6.png new file mode 100644 index 0000000000000000000000000000000000000000..e409dfc2385995a5da4f508a03d10390ce00a839 GIT binary patch literal 1750 zcma)-dr;De7RP^*4>BLDay6fz;)=$qTco%sY6~}5ADL^edPPWsEUZX_@8oH;Y+ocVlb&YU9% z3*BvOXl)1pfH8@P58sIP9}NuJ@QvXPa@hGz zuQUZy0uPS)p}`XU#B=(^DXp*8&h!ZyMc0kI$=$=L4UYfPdy}^fT{3*h#`2HfcZqZ= zkKA)Pj!p4S$2N2>`))PTA6w|6dV)Jm9e+FK#Ou=j7KYUQl)!miwNxaOYk?1_#MLX4 z=C(bi%h4fu6+=TwOrz^L5D>sCO6xEIco3j#{WPqxu^F3|))#v(!^cd3u{Bxt$j!~o z&)3FMw34ZXJE(kOIp(+_AQ?XR_GGa3!gLh4zs>_oZaUSnqZ%CS&d!;8)UJTQPh!r^cj40UhWj(4*v1-j-5CJ~Jr zT~z;Y-Pyv%FxM$1C1t9wd^~kz)|7n`s{?$&Xo~rUQyaBxBZwNpM zu24f88=Lu4?P16Ww^{2mPV%JDt}Iwq76HN|B9hzlOGsD3yYr`1^xH zLxtZtUtFpVzhPf^9)bnJpl*5LNa!OP0eV09%bG*h4gp|EwvK-z7z7jG2d7U^C=^ln zwB`iC5heAsv$Oj@XTU=YuH{Un^7qr}^b%R6bS#QY7AqbT5!=z|h+0K;Rn>Q*aEvBM z^iMx~4+l1I4H*Fyg&|9O@{oCD!7*|)hEJ3S0w9YkQ&#-4^70OrIuZ^EdzxvP-_sQH zRWWfn<6cfqPW+v%hKr*ADFy%m{2Qke$IRyg`Ld~ngamIspC2N>+xng}FH7J?_}Z&b z+PeBx!~m?F<-!``wAPRu-~cjjyT8Bo&xuK524WixO*YtKQilWSqGb5XqUj8r2N=}9 zKqemz5&LqMG&1?@+qX-8oS^g%X>g0S;~&_CJ;QMZh`HhlWIalJ>(PVf8ckyrgDTN^ zW&pklp8rBvwXo6-2mAJ)WVM8ti__D^{Z~DD`?aec6A>Q-4ts+O3g7+u@@+@}2-qB?9Zudy2R3agXJd1~Kwd?+s{3&C285S?&9rq?k(Eh6kmHq~JPQycE*x==R4u2O zfpmkjew1!nfn`#PEJxmIV%tv~Lc4mdt)F9KUu`BRODzw4(&2tyu9~Jwx|v0QPLQKy zhmjMh1P-o1e$&<#va72;lL=pA&Bz`Z0>8$(Ka?#o|FhlBB=gC1ICP(owr^jw@bN@) z>+K))oTPyP%Lw~Do`3h35Az^(TlvK@`c)ifNTGO_yT#J$8O7HA-ofa*TI;pRGhg=9 z-@1kBnN0Q}Dh0>9>_JC2FF5QYE}jlBGmU23Y(jo3vsqB!$*a7y$5EeTlFmp=09#F7mmNNmsC+}BV4_N z_Wz<_+D;|66xV0dI_bfx{?f?Ewf)-Xzh6+ugLa0RnX|=h3zlUZ_0`l|X*MyNrh48VN)Os5Ua!kcitklVi>zI; zsSV1P%3)=cDk?5+Waxc#>dNZe9DwR}UK=pG-m-Uoa%RM4_d{13f&;<9F$!mU`qb(# z%kn~h4r@%z=xv&Dx1?PGxFK>~cvHtv)vepNQ9rmHyF@ofbqjPhj)tLYB@zH>P48UO zJL_QUM0NOTfO~l>0H3phyXXVp4E;}KS0$N1R1Df{7dM5y@vi_9Aryam7nS=L{go!H literal 0 HcmV?d00001 diff --git a/resource/template/OperBoxFlagRole7.png b/resource/template/OperBoxFlagRole7.png new file mode 100644 index 0000000000000000000000000000000000000000..c5c692b276d4ffcda4c3b8ee3a082fe16687aaec GIT binary patch literal 1697 zcmV;S244AzP);3t(<Z#a2L%EF{C`j&5Wt%d5x_+F zl_W_nSFJ3|g+gI_ds|gi!!Ym?6M>mg!b~WmU@(X>W;P6ih$Kk@AW6CqEXyWEQL3w* zM~|LxII5SImlqco6N$w7`g*abN|H{*hQYdS0Av^vKmeGTg25olnAtE4B9bIY2$E%% zBs4cSMde6fBrS0wf9c|01B%VmH0<>AuOqf92F>jpr~GBdpZ zfI^`V%ItP~U0q#GO-*HGrNiM+6p4scRn;`Dwx+hVvDIR(*xKAoCX?w*#*iety;9S* zGnv(VzMyGZI=vc?uV%A3lu&nf5GC#H?LOau+FG|P%Y{P0FpO+=17MrY=62WlI}SAN z@tRF$0P%P{`t#4}Oy=3pApj=Q0LFhQ7K=hq zB9TZYlhJ5&^zWm`BFAq3a66fK%7Uq<$B&ojv(J9NxtV|ZbnWcfv-S1$R;!gr0}Q;v z*olbDW|OY#g+d`3jb8ri<<^FlTQ|Rdx}JgrI&{bnfQZhVIb$|k^ZDY)$cW435<&nf zvyR;nk=bk#Lg>0aH#c|jFBiS8JvVOLOs%I_0`>L=01(m0$cWQfqpHPlINa3KWHOlm z9si3Ef{2R6;{5#F)$gvhHMM+m<(tG>ie!oU`$GVT=+voG9*^hw^XERFFA(T7o6P{> z-E3`b&d<;PYi6d!+wkWvzl^0)B+K-Ee+UGCPMkR2($cD`s>|gJhX)mH9W1Xb z&qkxUY}RS3{L>d-#8W9D%QP_11%QZx!C+@+z+$l!i^WerJ!P}mOn_j#i`n_PiK!{8 zq9~I5^;ch|(`i|jC_K=G5{tz$I2iH!{Tmw_pPc;IZnv8u1a?RGm7yDVC+^*wn%dvC zZ~mv*f7~A1-p)yqL`V8VDElBX+}G2$npyRA`I?%Ws%=#!VZxg*SR)-Jt81&%)6*-l zScBJl@#4i;EQTTk1P%2CQP#1)qyJD}m9r|NW+Fq8#=1t6WWt*;u|_(B0ZdFx#9}c; zsffj5*RNmCX0t+<$RPUQ{Z5oQ?XK?5o}T`m2k{3T{*Eqx!0B+}6-JrPtg@yXMkbRP zA0H>8>T1W8D_545mWsuq&>@)U=zt$!l$c3rX>1E02`g?Ty_y>A>-V*_nM@{>Ff+<@ z=50+=RdsA^Y-?-F<#MJ{sS6h_sHzG;GFULv(E&feC^1omSyCFB8h-nS-z_ZM_tv=& zg}NFW8}I^y@rq^`&+_?1B5~=`rBEm&1bz4Iw@Z&7>xKb9GMJd@SlEv;A`&Dj?e@ci z;lW7cryu|M-rl{#!^2jq6+7jhKfnKY>DskxZnxXvaLh-ecgMywO#?H^=vdf~GI|L@ zmTNqFJ~?^PVO3V1JaN0-r%#`z5|l9W(vv4&U%Fi7aP;=}j*pLz-MY24zK)&fqsT$L zMhIE4Ha0bV{Naaon>8Mf6Vc${pr_s=%QAqu`MI0l{~%kfot>Stv$KzY_^q^l}C>rX@>FMfdlbGVsvygl}bU^ zP%L66`puC}yoLy}3{Zth4t93-^z49uNFSz00000NkvXXu0mjfLB&*^ literal 0 HcmV?d00001 diff --git a/resource/template/OperBoxFlagRole8.png b/resource/template/OperBoxFlagRole8.png new file mode 100644 index 0000000000000000000000000000000000000000..b5acb9cde2fb1315d75d73f3be5e8268c63ea3f6 GIT binary patch literal 1549 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 BattlefieldDetector::operator_a all_results.emplace_back(std::move(box)); } - // NMS - constexpr double NmsThreshold = 0.7f; - std::sort(all_results.begin(), all_results.end(), - [](const OperatorResult& a, const OperatorResult& b) { return a.score > b.score; }); - - std::vector nms_results; - for (size_t i = 0; i < all_results.size(); ++i) { - const auto& box = all_results[i]; - if (box.score < 0.1f) { - continue; - } - nms_results.emplace_back(box); - for (size_t j = i + 1; j < all_results.size(); ++j) { - auto& box2 = all_results[j]; - if (box2.score < 0.1f) { - continue; - } - int iou_area = (make_rect(box.rect) & make_rect(box2.rect)).area(); - if (iou_area > NmsThreshold * box2.rect.area()) { - box2.score = 0; - } - } - } - - return nms_results; + return NMS(all_results); } diff --git a/src/MaaCore/Vision/Miscellaneous/OperBoxImageAnalyzer.cpp b/src/MaaCore/Vision/Miscellaneous/OperBoxImageAnalyzer.cpp index 2eaf3650df..1bd596b42d 100644 --- a/src/MaaCore/Vision/Miscellaneous/OperBoxImageAnalyzer.cpp +++ b/src/MaaCore/Vision/Miscellaneous/OperBoxImageAnalyzer.cpp @@ -4,6 +4,7 @@ #include "Config/Miscellaneous/BattleDataConfig.h" #include "Config/TaskData.h" +#include "Utils/ImageIo.hpp" #include "Utils/Logger.hpp" #include "Vision/BestMatcher.h" #include "Vision/Matcher.h" @@ -57,23 +58,44 @@ bool asst::OperBoxImageAnalyzer::analyzer_oper_box() bool asst::OperBoxImageAnalyzer::opers_analyze() { - const auto& ocr_replace = Task.get("CharsNameOcrReplace"); - TemplDetOCRer oper_name_analyzer(m_image); - oper_name_analyzer.set_task_info("OperBoxFlagLV", "OperBoxNameOCR"); - oper_name_analyzer.set_replace(ocr_replace->replace_map, ocr_replace->replace_full); + oper_name_analyzer.set_bin_threshold(160); oper_name_analyzer.set_bin_expansion(4); oper_name_analyzer.set_bin_trim_threshold(4, 0); const auto& all_opers = BattleData.get_all_oper_names(); oper_name_analyzer.set_required(std::vector(all_opers.begin(), all_opers.end())); - if (!oper_name_analyzer.analyze()) { + + TemplDetOCRer::ResultsVec results; + + Rect roi_top = Task.get("OperBoxFlagRoleTopROI")->roi; + Rect roi_bottom = Task.get("OperBoxFlagRoleBottomROI")->roi; + + for (int i = 1; i < 10; ++i) { + oper_name_analyzer.set_task_info("OperBoxFlagRole" + std::to_string(i), "OperBoxNameOCR"); + + oper_name_analyzer.set_roi(roi_top); + auto top_result_opt = oper_name_analyzer.analyze(); + if (top_result_opt) { + results.insert(results.end(), std::make_move_iterator(top_result_opt->begin()), + std::make_move_iterator(top_result_opt->end())); + } + + oper_name_analyzer.set_roi(roi_bottom); + auto bottom_result_opt = oper_name_analyzer.analyze(); + if (bottom_result_opt) { + results.insert(results.end(), std::make_move_iterator(bottom_result_opt->begin()), + std::make_move_iterator(bottom_result_opt->end())); + } + } + + if (results.empty()) { return false; } - auto result_list = oper_name_analyzer.get_result(); - sort_by_horizontal_(result_list); + results = NMS(results); + sort_by_horizontal_(results); - for (const auto& oper : result_list) { + for (const auto& oper : results) { const Rect& flag_rect = oper.flag_rect; const std::string& name = oper.text; @@ -87,7 +109,7 @@ bool asst::OperBoxImageAnalyzer::opers_analyze() #ifdef ASST_DEBUG cv::rectangle(m_image_draw, make_rect(flag_rect), cv::Scalar(0, 255, 0), 1); - cv::putText(m_image_draw, std::to_string(oper.flag_score), cv::Point(flag_rect.x + 10, flag_rect.y), + cv::putText(m_image_draw, std::to_string(oper.flag_score), cv::Point(flag_rect.x, flag_rect.y - 10), cv::FONT_HERSHEY_SIMPLEX, 0.5, cv::Scalar(0, 0, 255), 1); cv::rectangle(m_image_draw, make_rect(oper.rect), cv::Scalar(0, 255, 0), 1); #endif diff --git a/src/MaaCore/Vision/Miscellaneous/OperBoxImageAnalyzer.h b/src/MaaCore/Vision/Miscellaneous/OperBoxImageAnalyzer.h index 6dbf778b99..546c91c7bc 100644 --- a/src/MaaCore/Vision/Miscellaneous/OperBoxImageAnalyzer.h +++ b/src/MaaCore/Vision/Miscellaneous/OperBoxImageAnalyzer.h @@ -16,6 +16,7 @@ namespace asst Rect rect; bool own = false; }; + class OperBoxImageAnalyzer final : public VisionHelper { public: diff --git a/src/MaaCore/Vision/VisionHelper.h b/src/MaaCore/Vision/VisionHelper.h index 8a19518088..a0561d52c9 100644 --- a/src/MaaCore/Vision/VisionHelper.h +++ b/src/MaaCore/Vision/VisionHelper.h @@ -109,4 +109,31 @@ namespace asst return lvalue < rvalue; }); } + + // Non-Maximum Suppression + template + inline static ResultsVec NMS(ResultsVec& results, double threshold = 0.7) + { + ranges::sort(results, [](const auto& a, const auto& b) { return a.score > b.score; }); + + ResultsVec nms_results; + for (size_t i = 0; i < results.size(); ++i) { + const auto& box = results[i]; + if (box.score < 0.1f) { + continue; + } + nms_results.emplace_back(box); + for (size_t j = i + 1; j < results.size(); ++j) { + auto& box2 = results[j]; + if (box2.score < 0.1f) { + continue; + } + int iou_area = (make_rect(box.rect) & make_rect(box2.rect)).area(); + if (iou_area > threshold * box2.rect.area()) { + box2.score = 0; + } + } + } + return nms_results; + } } // namespace asst