From 23698345647d28687afe51c796093cbfc901715d Mon Sep 17 00:00:00 2001 From: JiatongSun Date: Sat, 18 May 2019 17:58:59 +0800 Subject: [PATCH] energy update --- CMakeLists.txt | 20 +---- energy/include/energy/energy.h | 14 ++- energy/src/energy/energy.cpp | 49 ++--------- energy/src/energy/get/gimble_rotation_get.cpp | 20 ++++- energy/src/energy/get/hit_point_get.cpp | 20 ++--- energy/src/energy/param_init.cpp | 82 ++++++++++++++++++ energy/src/energy/run.cpp | 18 ++-- main.cpp | 41 +++++++-- others/MVCAMSDK_X64.lib | Bin 0 -> 83958 bytes others/include/additions/additions.h | 2 - others/src/additions/additions.cpp | 24 ++--- 11 files changed, 186 insertions(+), 104 deletions(-) create mode 100644 others/MVCAMSDK_X64.lib diff --git a/CMakeLists.txt b/CMakeLists.txt index d8ce09c..19c4469 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,12 +1,11 @@ CMAKE_MINIMUM_REQUIRED(VERSION 3.5) -PROJECT(AutoAim) +PROJECT(RM-AutoAim) SET(CMAKE_CXX_STANDARD 11) SET(CMAKE_BUILD_TYPE RELEASE) SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -O3") SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DPATH=\"\\\"${PROJECT_SOURCE_DIR}\\\"\"") SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -D${CMAKE_SYSTEM_NAME}") - # Todo ## 使用编译期固定选项,以略微提升性能。 #SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DFIX_OPTIONS") @@ -22,28 +21,17 @@ IF(CCACHE_FOUND) MESSAGE("< Use ccache for compiler >") ENDIF() -FIND_PACKAGE(Eigen3 REQUIRED) FIND_PACKAGE(OpenCV 3 REQUIRED) FIND_PACKAGE(Threads) -INCLUDE_DIRECTORIES(${EIGEN3_INCLUDE_DIR}) +INCLUDE_DIRECTORIES("D:/Program\ Files/eigen3.3.7") INCLUDE_DIRECTORIES(${PROJECT_SOURCE_DIR}/energy/include) INCLUDE_DIRECTORIES(${PROJECT_SOURCE_DIR}/armor/include) INCLUDE_DIRECTORIES(${PROJECT_SOURCE_DIR}/others/include) FILE(GLOB_RECURSE sourcefiles "others/src/*.cpp" "energy/src/*cpp" "armor/src/*.cpp") -ADD_EXECUTABLE(${BIN_NAME} main.cpp ${sourcefiles} others/include/additions/additions.h) +ADD_EXECUTABLE(${BIN_NAME} main.cpp ${sourcefiles} ) TARGET_LINK_LIBRARIES(${BIN_NAME} ${CMAKE_THREAD_LIBS_INIT}) TARGET_LINK_LIBRARIES(${BIN_NAME} ${OpenCV_LIBS}) -IF (CMAKE_SYSTEM_NAME MATCHES "Linux") - MESSAGE(STATUS "current platform: Linux ") - TARGET_LINK_LIBRARIES(${BIN_NAME} "${PROJECT_SOURCE_DIR}/others/libMVSDK.so") -ELSEIF (CMAKE_SYSTEM_NAME MATCHES "Windows") - MESSAGE(STATUS "current platform: Windows") - TARGET_LINK_LIBRARIES(${BIN_NAME} "${PROJECT_SOURCE_DIR}/others/MVCAMSDK_X64.lib") -ELSE () - MESSAGE(STATUS "Unsupport platform: ${CMAKE_SYSTEM_NAME}") -ENDIF() - -ADD_CUSTOM_TARGET(bind-monitor COMMAND "${PROJECT_SOURCE_DIR}/tools/bind-monitor.sh" "${PROJECT_SOURCE_DIR}" "${CMAKE_BINARY_DIR}") \ No newline at end of file +TARGET_LINK_LIBRARIES(${BIN_NAME} "${PROJECT_SOURCE_DIR}/others/MVCAMSDK_X64.lib") diff --git a/energy/include/energy/energy.h b/energy/include/energy/energy.h index 8bdee63..038b7d7 100644 --- a/energy/include/energy/energy.h +++ b/energy/include/energy/energy.h @@ -31,6 +31,7 @@ public: // void setAllyColor(int color); void setRotation(int rotation); + void setEnergyRotationInit(); void extract(cv::Mat &src); @@ -42,6 +43,7 @@ private: EnergyPartParam energy_part_param_; LiftHeight lift_height_; bool isSendTarget; + bool isMark; int fans_cnt; int armors_cnt; int count; @@ -61,13 +63,18 @@ private: double phi;//电机yaw轴应旋转的角度 float yaw_rotation; float pitch_rotation; + uint8_t last_mark; int position_mode; int last_position_mode; int isLeftVertexFound, isTopVertexFound, isRightVertexFound, isBottomVertexFound; + bool energy_rotation_init; + int clockwise_rotation_init_cnt; + int anticlockwise_rotation_init_cnt; + float origin_yaw, origin_pitch; std::vector fans; std::vector armors; - std::vector gimble_zero_points; + // std::vector gimble_zero_points; cv::Point cycle_center; cv::Point target_center; @@ -81,9 +88,9 @@ private: cv::Point left, right, top, bottom; cv::Mat src_blue, src_red, src_green; - - + void initEnergy(); void initEnergyPartParam(); + void initRotation(); int findFan(const cv::Mat &src, vector &fans, int &last_fans_cnt); int findArmor(const cv::Mat &src, vector &armors, int &last_armors_cnt); @@ -121,6 +128,7 @@ private: void getHitPoint(); bool changeTarget(); + void changeMark(); void gimbleRotation(); void splitBayerBG(cv::Mat &src, cv::Mat &blue, cv::Mat &red); diff --git a/energy/src/energy/energy.cpp b/energy/src/energy/energy.cpp index 2d2a049..e55db89 100644 --- a/energy/src/energy/energy.cpp +++ b/energy/src/energy/energy.cpp @@ -8,51 +8,13 @@ using std::cout; using std::endl; using std::vector; +extern uint8_t last_state; + Energy::Energy(Serial &u, uint8_t &enemy_color):serial(u),ally_color(enemy_color), src_blue(SRC_HEIGHT, SRC_WIDTH, CV_8UC1), src_red(SRC_HEIGHT, SRC_WIDTH, CV_8UC1) { - isSendTarget = false; - - fans_cnt = 0; - armors_cnt = 0; - cycle_center = Point(0, 0); - target_center = Point(0, 0); - last_target_center = Point(0, 0); - hit_point = Point(0,0); - target_position = -1; - last_target_position = -1; - last_hit_position = 20000; - target_armor = -1; - radius = 0; - -// ally_color = ALLY_RED; - energy_part_rotation = CLOCKWISE; - attack_distance = ATTACK_DISTANCE; - count = 1; - last_fans_cnt = 0; - last_armors_cnt = 0; - send_cnt = 0; - - rectified_focal_length = 1000; - theta = 0; - phi = 0; - yaw_rotation = 0; - pitch_rotation = 0; - - isLeftVertexFound = -1; - isTopVertexFound = -1; - isRightVertexFound = -1; - isBottomVertexFound = -1; - - left = Point(640, 480); - right = Point(0, 0); - top = Point(640, 480); - bottom = Point(0, 0); - - position_mode = 0; - last_position_mode = 0; - + initEnergy(); initEnergyPartParam(); } @@ -68,3 +30,8 @@ void Energy::setRotation(int rotation){ energy_part_rotation = rotation; } +void Energy::setEnergyRotationInit() { + initEnergy(); + initEnergyPartParam(); + energy_rotation_init = true; +} diff --git a/energy/src/energy/get/gimble_rotation_get.cpp b/energy/src/energy/get/gimble_rotation_get.cpp index c9b3377..47ad216 100644 --- a/energy/src/energy/get/gimble_rotation_get.cpp +++ b/energy/src/energy/get/gimble_rotation_get.cpp @@ -9,16 +9,28 @@ using std::cout; using std::endl; using std::vector; -extern float curr_yaw, curr_pitch, mark_yaw, mark_pitch; +void Energy::changeMark() { + if (mcuData.mark == 0 && last_mark == 1) { + last_mark = mcuData.mark; + origin_yaw = mcuData.curr_yaw; + origin_pitch = mcuData.curr_pitch; + isMark = true; + } + else if (mcuData.state == 1) { + last_mark = mcuData.mark; + isMark = true; + } + else { + last_mark = mcuData.mark; + isMark = false; + } +} void Energy::gimbleRotation(){ cv::Point2f real_hit_point; stretch(hit_point, real_hit_point); - float origin_yaw = -0.13; - float origin_pitch = 13.18; - /*origin_yaw = mark_yaw; origin_pitch = mark_pitch;*/ diff --git a/energy/src/energy/get/hit_point_get.cpp b/energy/src/energy/get/hit_point_get.cpp index 364d2dc..43d4370 100644 --- a/energy/src/energy/get/hit_point_get.cpp +++ b/energy/src/energy/get/hit_point_get.cpp @@ -118,13 +118,13 @@ void Energy::getHitPoint(){ } } -bool Energy::changeTarget(){ - if(fabs(target_position - last_target_position) < 30||fabs(target_position - last_target_position) > 330){ - last_target_position = target_position; - return false; - } - else{ - last_target_position = target_position; - return true; - } -} \ No newline at end of file +//bool Energy::changeTarget(){ +// if(fabs(target_position - last_target_position) < 30||fabs(target_position - last_target_position) > 330){ +// last_target_position = target_position; +// return false; +// } +// else{ +// last_target_position = target_position; +// return true; +// } +//} \ No newline at end of file diff --git a/energy/src/energy/param_init.cpp b/energy/src/energy/param_init.cpp index 77417c6..f4ff5c0 100644 --- a/energy/src/energy/param_init.cpp +++ b/energy/src/energy/param_init.cpp @@ -8,6 +8,66 @@ using std::cout; using std::endl; using std::vector; +void Energy::initEnergy() { + isSendTarget = false; + isMark = false; + + fans_cnt = 0; + armors_cnt = 0; + cycle_center = Point(0, 0); + target_center = Point(0, 0); + last_target_center = Point(0, 0); + hit_point = Point(0, 0); + target_position = -1000; + last_target_position = -1000; + last_hit_position = 20000; + target_armor = -1000; + radius = 0; + + // ally_color = ALLY_RED; + energy_part_rotation = CLOCKWISE; + attack_distance = ATTACK_DISTANCE; + count = 1; + last_fans_cnt = 0; + last_armors_cnt = 0; + send_cnt = 0; + + //rectified_focal_length = 1000; + //theta = 0; + //phi = 0; + yaw_rotation = 0; + pitch_rotation = 0; + last_mark = 0; + origin_yaw = -0.13; + origin_pitch = 13.18; + + isLeftVertexFound = -1; + isTopVertexFound = -1; + isRightVertexFound = -1; + isBottomVertexFound = -1; + + left = Point(640, 480); + right = Point(0, 0); + top = Point(640, 480); + bottom = Point(0, 0); + + position_mode = 0; + last_position_mode = 0; + + energy_rotation_init = false; + + fans.clear(); + armors.clear(); + fanPosition.clear(); + armorPosition.clear(); + Armor_center.clear(); + first_armor_centers.clear(); + all_armor_centers.clear(); + + clockwise_rotation_init_cnt = 0; + anticlockwise_rotation_init_cnt = 0; +} + void Energy::initEnergyPartParam() { energy_part_param_.RPM = 10; @@ -49,3 +109,25 @@ void Energy::initEnergyPartParam() { } +void Energy::initRotation() { + target_position = target_armor; + cout << "target position: " << target_position << '\t' << "last target position: " << last_target_position << endl; + if (target_position >= -180 && last_target_position >= -180 && fabs(target_position - last_target_position) < 30) { + if (target_position < last_target_position) clockwise_rotation_init_cnt++; + else if (target_position > last_target_position) anticlockwise_rotation_init_cnt++; + } + + if (clockwise_rotation_init_cnt == 5) { + energy_part_rotation = CLOCKWISE; + cout << "rotation: " << energy_part_rotation << endl; + energy_rotation_init = false; + } + else if (anticlockwise_rotation_init_cnt == 5) { + energy_part_rotation = ANTICLOCKWISE; + cout << "rotation: " << energy_part_rotation << endl; + energy_rotation_init = false; + } + //else cout << clockwise_rotation_init_cnt << endl; + + last_target_position = target_position; +} \ No newline at end of file diff --git a/energy/src/energy/run.cpp b/energy/src/energy/run.cpp index 4e58b52..d706e9b 100644 --- a/energy/src/energy/run.cpp +++ b/energy/src/energy/run.cpp @@ -18,10 +18,11 @@ int Energy::run(cv::Mat &src){ armors.clear(); fanPosition.clear(); armorPosition.clear(); - gimble_zero_points.clear(); +// gimble_zero_points.clear(); isSendTarget = false; - //if(mark==0)return 0; + changeMark(); + if (isMark)return 0; // if(all_armor_centers.size()>200)all_armor_centers.clear(); // if(first_armor_centers.size()>200)first_armor_centers.clear(); @@ -57,7 +58,7 @@ int Energy::run(cv::Mat &src){ // radius = 116.936; // attack_distance = ATTACK_DISTANCE * 120/ radius; - attack_distance = 794 + 1245 * 75 * (1/radius - 1/113.9); + attack_distance = 794 + 1245 * 75 * (1/radius - 1/115.6); // cout << "attack distance: " << attack_distance << endl; getFanPosition(fanPosition, fans, cycle_center, radius); @@ -66,21 +67,24 @@ int Energy::run(cv::Mat &src){ // cout << "The target armor's position is " << target_armor << endl; // cout<<"The target armor center is: "<init()) { LOGM("video_armor source initialization successfully."); @@ -83,7 +95,7 @@ int main(int argc, char *argv[]) { video_armor->read(armor_src); } if (video_energy) { - video_energy->read(armor_src); + video_energy->read(energy_src); } } @@ -97,6 +109,11 @@ int main(int argc, char *argv[]) { do { CNT_TIME("Total", { if (mcuData.state == ENERGY_STATE) { + if (last_state == ARMOR_STATE) { + energy.setEnergyRotationInit(); + cout << "set" << endl; + } + last_state = mcuData.state; if (video_energy) { ok = video_energy->read(energy_src); if (!ok) { @@ -110,6 +127,8 @@ int main(int argc, char *argv[]) { imshow("energy src", energy_src); } if (from_camera == 0) { + cv::resize(energy_src, energy_src, cv::Size(640, 480), 2); + imshow("resize", energy_src); energy.extract(energy_src); } energy.run(energy_src); @@ -122,6 +141,7 @@ int main(int argc, char *argv[]) { } } else if (mcuData.state == ARMOR_STATE) { + last_state = mcuData.state; if (video_armor) { ok = video_armor->read(armor_src); if (!ok) { @@ -146,6 +166,9 @@ int main(int argc, char *argv[]) { } } } + waitKey(1); + + }); } while (ok); diff --git a/others/MVCAMSDK_X64.lib b/others/MVCAMSDK_X64.lib new file mode 100644 index 0000000000000000000000000000000000000000..02ccc10c8af90863097f3c2d6a024d00d0cdc7f1 GIT binary patch literal 83958 zcmeHw3z%F*mH(*_0)!Akc!gI8Ap{5z@|sD&5HgQEMl#7bGa-nsp)=FTv~;@1o}Lg` z7hRWiS=VJ*)@5B5Ss#dqhzN>^h*1#{Q4tXl5fKqzh=_`c3jbeK-CMWb!?io}egE%U zzVFbPb57N--nZ)9Q|BJDyigk$S~2<5S>}HWTUwSbUAScFvSlWJLGtIK1ud;oblzm5 z3AYlx?^2=<+(Y!i2}Hl1ozPYI1^s5ar03pG#Oe8WC3FaWLC-Eq=ob8fewom(<`D_H z7Qdk9kT0j-&XDw*YmhJK7po=x@^qvHJ#(9+U)%{k=o!ufy$CEp@5C?YFAqxk)0>Gn z{b5ByH{%!d$GHhzjbG63o|W{%79vi6dS23>-$*3rN&JF-zdoUR@e6w4QAvNA1bxt7 z&K1N~w349qsl+(7T`s8uznoTIEU9A({syg_kIIVfJq%-H@Z_tXH zB(0u+d_b!%k+g=O2Wo$Zq)y~52!D5iR!x+&-$TSWP2H7HCw@WntfWJ(CC2HDa|F?Y z&yk?tO+-6!+9~OyXdgk3;}>*OzaVyanIt`lU(gZfO4@rRF;074CTZd#Vw{#=Bx&+& zVjz0?NlJUpQn@eA7b(uDZGUnKg*<&qwlOax-bJSu5+KQRzJg7Sjc3CN4n z0q+t-pSqDav4yBRh<dUc}jU_64@{tE=rciw@&(T<0q|3I`0ZNcetQw6bQ z=MpFSDdqu)&3{G^J$@5$VoL`F(NC@+PHgGpg6OBf0kK1838K#~Ax`Y%Ig(Dgg&3#l zlLXQ2Gl>&B;BZ0osYR#<+Ho541kr7nCm=TcB0+Tf70|x|eei%F`ut-g=nLl%33>p( zkj>jAh#tlK0kL`Qg6O*sk)TI=!S5w@;A4X5)0kTzb~MHch`zEz5Sw)naiXt0Er`uP zIYIQ<8w9Zh$OA-ATqcN}ct3HX@4i70JN7Q(MBmyfh#drd5PkZ2Ne`orAU5{}Ni$Jb z5Pcc#4r24`g6Q#9w0kSDQ~oSzN`;u9r|=8ft6$Ot{DSCnmk44@&=(+j3YZ{9drO-B z9NH6e;nRByVh0YP9Y80d-$C@qGlJNuPY@@1;z&t9!`c91r*%qV=Mm$y4D|-lZ!vyB z>@bX75Z!f^q|bbvh|`^&l0JDa5r~~}kEFdGMEOB27Ym{v-%gxZ3$Q@+j3EV>jcpc-bYE5Iu!Da{3VZhtqYa2Z$YnaSx(9fX(R#a|N-5 zC_jjPh&}4xc;KcJgXM^2x__~7*6D+IAaQ6^5u4=055$Ae~`E~)kB#6a|uIf7U# z^g#6V4U%qr4)YfDr8@+%J#It0pbfu@cH?wE$|eZydq3!F2T8gIea7kM4<)n(zo4HX zFA$@P1<_0ENYKsKV*G$Uex#(AFcvtyj6MRfNm$D!l{ath>h9Ul+rPPURbNMMS5N>>(;qi^cG!BD)q13xc;oooo)SX)KS=8tQFSO3R|`m zYn%Iu^|hNSgUGD3eR#89=5TvzrE0BIzc7?a$(@vag&oDN?S*Z{j_UT|acvX27Rt|5a`NacTrgINbQL%Kn)Wf%Ybs{?HO0DQtSwXq z%SCS$Y#k?uzIve^N-1Pc3d!g!?&zv)t%j1CN@gCakGzR9X&_bG$c2@Gcv7hnOTTL8 zE64##Rvz{0@Ve3te^d9RLOV^NR*xh~rDm#*TCq^~<0K+ezq2?}uT}jsER~rlWHzg7 z)$QoY(m=5Xv&`EjUPWJC?H6`c28;fNm6@a({?zL+A0s7bzfdU1v|>@%jM3d$s27Yx zro__TI8v;IQz)sP3M-!C>#Lr`(WQE-u8~#ShpiP)rbs2ac4w_{fu|CJZR@Qrne$cV z%2m0<*6y!%b_8-3BA0ES2QYz84WiFmtBm!NxtEV(jAFY`)C>e68 zNY|Hbho_S#`%ETNoLjAK@2^(Nn>_`xWmXDI(X&g%3pUiumQ|@Vxj$t`u~N65&vxQO z#h<>fbdlL6c50zurNy-7rS2Q3RmWI-sDg#H$$|b3r%%!(bu@+dBk4MkVN$fR)O`a5YlontOKBigTV-IVYHpC6w26+J17DYViv#BRpeI)fR@(krp)#_yTHEe# z`b=!46KkeEyA+s^*xGn(R%_;CGfR*Ntu#rm2S>Cf_os}F=p?a!M5p5|IHGk03)>iD z!4d6fS-Aip8)e>BHZ=XaEgg^DqP6jSMRRjel}R0L0H z@K!0-MoQI6U%ghco)OS?3Ggh+(Lneml5hrzb(pi{pN`;By zbQcFph5ieN%|T=c6pmjP`DX&9+r~$hb*_bG%2w@_GW16b&{MX`uWzVO8?M-^6>`i3 zD$k5%<(dgpzUxNoz7-;6t2|SNm1D|I^DAQq1YS?AIN~fKrcBRSs`nMk#`r}usI0gw z#i)0TVlT5DGD970kqK1p8OthpCeUCr-dh87Ag z8=#|H>n~cXkt0+&htmMS6sj`w^L>J{rciPozP4Cl*#fIAZLtrpyMP^qX);0Gw3La0 z57UztbquBD13|W=uY+`v!qS;m-E@(v*M`bKaZ|fJ{1UFA)$Y{-S825s`wO*g&TPRF zknmM06~`)~;%j-X+BsYu!6Df_jG=kjil$gYFa-{fDc11XDur@&8y{2wL|Z|_v_%f8 zt)Sud4`Hbps+P?sv#4Vx(y%h7gOZ6<{%LjjPQmVNL#7Z??z&Q?=%m7+b>vRUSSlg& zrf^$b1LMi0f~r~fXt`cW3*$hd{agiw>x!(lbQS!#9o5l_vxpmsrG_8bO^qtQ;?&)R zonvR9lvMe%p=gf>O`^)H@vJ7&Br0#;k}P;CKSu*K)-=#->q^^( zV6`Z|X|z}wFpo^=U`wh>WASwu6v>jRRMI#yTr4^ZuO?9?(|CIRD3vBrdG{3f3rpBS zea~-Gs1QuH1!4+4IE4}OJu51nrQyOP4Ng>wZ_a;1;?eG}t}a=2Nq+89xg~O$vbR_m zR1*H;%1P_jkg3;IwbVu_O^MV-A0)e5g}A0x9W~F*L8YXo#kw$4_TYW>x}vkKG-L|Z z;94DK$YhGHk+$NdQswN@NNJ1Jkd{c5DVTsyH9a#`Ccz!7nr{kFdBr#Lwl&jyIbUgZ zmufZ3stmn^tB^ffz%{gxs<-MpR3==Nmq!bE*;<>npgHXtKu_^i4HQT3C6q?-rDoTN zVEB8;5Scmq5~R7OvIK!!9X4Pwwk<-!a*zsC?j5!2$Ozwv8Iu56X9B5#QPqy}FvEQN$6 zXxFTZc0?{0c~WiNmSV-FW7mu*h2BAQ&5@M!s{6= zk6oQz?z1GtjPk(QqRROvFq`|4_qs~8|CovV=G_(XcEpc_MJr9~94Tr&j&)+d*!ngnlku&oHCOQcCz zhpHE#ICZ>dbX>CfELnn6@DFWTC!XY z(=(cqs+z5@mPU#=n%G_|D77w9C>qm!IfB|c@&pOzByQ_<+}Zd6N(rPcKjA2rKJE>H zD$(j%sR)l!>2Ig2qcnyrDT&3^Q=rnG6dgmwf%8{iuyJ_Mei>v+vJ#bQ+b_T{;TvD; z?Km%!DOIUfRYteFPO4aUQ@+ydf(!80!ay;3&2NlF0N7$x@2(AQm!ZljTjjq2FMmcA zTW=ubZVFYJG!siZWoKomh^&1Zs4h*E<*PC6yfu-^KP{dQz>p~fgKI$;GL=FrC>|~T zQ-oJX<)G&q%)+l^)wE|*x6%LTPnnJjlx|WQJc!_2Ve6YhRYsF-HH;}#IBAjnK$cV? zS$qr1lB!fj5rT~v&{DaWxd*cesi~T`72C?&_`QK4(+3Rwp^Fr*&a^75i&XyYg$wz) zZXk%_Dkv;hWFfi=3b$)yIPs)$?H`6rp&48Y$dDFm!;mQigKL$@kf{_H z!HHdC)y_pml~F2FsM4(B#w{G#Y-cf~&_z-oTapSK1p47_Xk@SRr6z{{I{1@S3bw7! z5U5i4by0>)py#`x0!JpJ1TtI6*K>6>Wv05OOxqcFwSf{Sk)E?+T3zGn%lzA6o*An9 zJV1~_6Y3Zm+eOiYGL39)VS2?ry|-F2TF8~kR4832i6v4c3+bb2b&=F>E8_^>4X?qf zxi8iEnkKi98RZswf~(5gHd?PHL(Wh|d3BL0ug zA0|<`$S&ZfR{4_7PJyE!>j4Y8_CM-`qt z1NBb+hNZOAeQG#znG)URNUWB2RBR`}U^ai?fKa|Q8;WjeH7ES*Oz({&drqlL0cY81|vB{dNac(4?y zX=D~r*@HB>Ovzt5XiUAoERoc28w{zNk~H`2)g7Ti^%gCmo~Esg21u3!vo123DVHhv zXbL2 zPf7WPG+vU$#<&e(ElzUb*ClEmbF9u!dM$fXWK~ythotI=$+@<(*C*bKnK3YYHuZY}|>NG|U46~%G0k!mU*(U{mp!3^rYQ$+@jT&3Jt z8HBaCT9Z$BbJ0XXTP)LIWZD92RM}z|&$Hjr@e;9%=Sim*$4IB1V5&GqM|;EyZ`Fm^ z{@Z?y08)IZDIFCrlso10!jaw$qTNxITD{%WSndOfDNnHFjTvx=E3)DpI#=gEz?MS5>2z0_vprI<1& z=jxYWNEtWDBg{x0TL&JDz{tjyc~e;3XQfg7$004%gq4-iHuFe@^hvAEsYV$y?q3m; zaA_Ko@O6yn()S@c%m)yi@PkCNe@%21X!>u6-jC=o??QB&LqLn3MZ_LXza*OXE23*b zvmu}HTcT^AyZRSIr$ctzGl*!!|Bc^6UL<-a=)u1bz4=c>EB=6}GN8GCB)S^(?C*%S zynx7tkiGHGh>!(Z|9eE%0X+)-B=FBg+SV0}rnWP>ybaWWU^S~5O~LPsm5ik4WqgEy$SjgpmWJ8R1Um%AnlY+{DLNe_t1Wfc1>l}33?WRZ>~Lr(K%-@dhS7@ zi73-f&>KIBNN1q_n~2JXGkOwq?h%Yu?#<}3JsB;U$mpWwjAl_nZoEPQ2$<_3Fsr#amErxy-$${3ilk!xi|6{LK)6Q{?DMzo;a1! zk-(euGql-hjLu_>?nk>^j+ z@SexezWDbF$S%d-4`6J)9pmgujDh=*?@Rc1Cv;9g->*b;sO1Nv&+kCqa~Sm?0@UsJ z`y8~_?P$x3(54g6#tR^O1bxUOl5NHKnE7FhKi-GmCVCrw=b=yEeH`+`-?Q+0FY=jp zGtuSfyZg|0>rwW{u0z{n3~U9~T(rsU7~jvM-Z$;TXg=oHl^;iYehg~>=rW9@ndrC9 zPhg$61^tHKtMGfC1~g8@%P>Mdpi2(Ud-(tjF&4=*DEoP zhL1;iL8oKf{=AjZoSzU4#8cVIl+hO*p<{+N9~$_qLOxbx9x5B(f#8R$8* zCl98z?j_70w9k>K^X>Te+?TPAp!~N^Kwq;1*>v_JYGrfTB-X}OAT-%`XdZirzD2KQ zt7#3br8C))>?pQB+r-XcN3dhqvFtcDhs|QM*-G{a`U71^7tkAMl>U}JNN=Zi(ZTFR zdWmkKTWKPD6TOp;W*?_*^j_LZC$JyWp6u^Xs<+VB>8tcL`U-uS&SI}&Ptob@-Sil} ziv5r-rFYP2>SpWN2G+wCvBhi&Yhjz{9D1I9N58;Y`80LV6|@KYGfibv*xqb1 z`%l_J2r9^4N7vKk^bd3i{XIQSzoi%Gm-H+8DP2Y9(;@7ebOT*RkJ5QGgMFSpM_-~Z z();NEb_d-~pQSFghHa-Rl?a{8`dJ_AWz*?kI)o0Q18E9PrhREYno9fAUNn*RqZ5Mzr`NHQ*fn$;t)uzu6m}Tvp;Orcwvo=JtLZ)T13H7w zq!lzkkI?UFC+(oWp*mee*V1+LkMtjO5c?zjg$`$JG)(R6UuY(~nTm8g>!MfFS@dSQ zkM5^?=^k3e{)?WZf1-b;Wo$Y73B8uirC-y}>ECGr`xEWQ_GNpqeb|-M!8%!iUQZvQ zf1|h2Tj~2WLN)pgJwwmY|ImNa8|gv%F#Riimp0R(Y!}@{cheW>eKd`Inm$E$(pt8f zm8n8QbQ9f3FVnZ_0s0IrW#6L>)JyI3Nji~QXbCN%Q)vM$q?2eKoksKNWICN*MayX^ zwbCiHj22@wPx!wv`+sBh|En>(M{=U^Stso`QSKWopHGl$k#Y>iiETo>R+XFkG3*&$ zV~pblmzv6Kr#p4TP^aL`GMT1H4aB`g!{twkz}rMR8bP1 z9sGO?Cna!V%T zDD0$8JTrBpFH_TAGAm}tSq51+4k+MdJ{K8O##5ur&@^l@?&Wo^n_lfy#R|N-3e0a47+wO2U;f<7h4>88f-xuI^bo5^;yc%e96^ z;+&o}Y}VKTzjf3&kwjd}`y3bhESYw#AS+>NH&mQ}(JSl*DvY&wb&%!2FH*wk7q>Jm zp5@JpqKU-z8w0`Dd}LKF+O1>g$Xmxsh&KZnp8J{r2~6Kk&fr(OlGgw#AC0LGc7vT- ztIRwM+oGng-hBBmQeglq6Z$*Fr{;9@}43qsm{h|O`Jz7h!_*!HP-6>7yW^R9q8}?FCo>023@oYhJA-V2z#X06}=PYp& z(MD%v0cI4}^|C{rb|4?llGiu0blFAojHd@vkj8(%%!((#v)7ZFOIE-g9*Ink(yTvB zzNf!a1#^t(+(;tp0jd^zGc#Z085CKWjT4_J)jru2z<3u|T{4lp?W+EE?)@WQ>@m^{ zB;tldrmO-cWh~RbD&vcLdG_Tbo_Tg*&r%LvGs`Z-sT5)pnO==Hxrv{h#uRrjts#_L zH1ZVCdo5AzpzS%N1oktR-^l_+CZ@XQg78l+Ts`@!W?JZUAjVL0A z+x#R7xnzr`GH-bcR{Hi-(@I$CsVej~#{)HM$>w zWTD5`lq^2n98;0WG@Rbl@{tr*{jH`o=ct-$T8ii7XZ5HXBo~t^xf_?uu^v|8eCnv+q=$LSu)e+A<|fm;F+#v z^We(DI>`e=DlNYO1G z2yD!iQzpF`kgk_EWX1nl)<(Rw~}dW%q2@d+;WcZaGUa7=fSKXJe?u877C1Ev)=ZR z7a+!wm;Y@ac{xu%x9aB=TV{@8?M$2X2alWCu0_Oj;%Fv!iVcGZaP)JlmYdKvuCS`d zLAMsmOEXTJE#f=D0xfh<)8ibe^d%j2oKFQJT1E6MxJ!NFB$_67M`ZDRS%RSy^%U zA%%bbK>}y&?3|)_{Gtg$XM$dOlc7$h@^o`Tkl$8m?s`-p&Kxeb2k)>QB+vEP&5$Wy%1j@(l~ zpQKhr!}-;DM~>Zwk#YJKTRY}>H!LF$V${ zGn@;Wa{V^0T zZ=Kw-sNIezIn~;HRX(FVIEZ?SZzs{txt7R1?b-_2nb(rwRm+%RB(3p|LT0IK?|m)| z#J%UD^aN~|B6cB~r&Fh4J7MMr;FqXz7lAK|jO?G_s?-t&sW_SbW>VASCt&qvFm5fs2aLL||tp zyb+Y=fltc201JTcKBMM^V5JnM28ZW~an8*SmY!~Wutcc|!e(op3Sp5uafJaxK2JR} z*O10;O{w=ZVeC{TT82z1cC#zf@|P()6x$7J*=syyF^n^IZFFJwPTH>}&Xi$MB)RGR z;AD~cKsX}l31PE!e+XBWc|}+<(|qI#l@ZAmd3FItlTogk}YrpVgp4pGTHjBsVSzRd@N#0zNKEXO?meqsktdJLs{9I(%_g&)qG=C zmyMZ$w}|SI>&xD>YgxrtFP0Mj3`d-vNK!8iTfvP?j!xAKVV1sj!tzG8RNfnQI@5>4 zmRja9uh`c%mZ{8}PBWNUa>H!qlX>DPp>-1P4QV}fl0~9%XK8(PQKv)y+MvW@u$cF@ zk+Eh+^F3EJvHz<~p$}g9H{+U#&1eASDdOS!F7jeH+4pu0HxcvcWQbA^5(CN77~_N8 zmN$tnr_@WpCqt`C%TDT95>-n4O9DE4S@2d?y*!OeU+FjJ?dN&sNFwY8%KOAuOmvnz z=d%pbJ%_)bu(oUdD1q$ZkC47X4CSKQ!|_e==BYeX{L;ivMHh+2_w-nr00#E#Pz>% zq=^@f!M8s(l6`wsS5w<3qiU9Sj+wycqho70pX_k_b<7m5*N!U>n5J=(Qyx4@NxN>{QvUCJR_vd6Iyo z6{5JMl`Hryty~fgVVQ0dl&6tZw~$2@xdy$C>@0kiSCQWGK(f<$Ew4PG@+VY+AG~gVMB@5HNLgiNo89p-z?K+i}h1iVho=iTuYpg`p zhF6o7$~hQ8-}~W3+u#VjkiiimpTUu{Ezc*bFqYU}JCRxN9#YO3+N>7mUBVLFZb0&S)=@OT#3baFpX6xlxB_ct;w3$W2{1YkFiQ{!+Ra& zC1zDIV92sP#*9?@r=JW#<|}4S*^F!9u+-XHhCT2>(EcHblgd|LuXFm9$`2qSu&Ex67X?sC{IBw#<$@u>f@0s3Rf&=0R)}C1>^qx3tUDx`v61nj+1%L6< za00gY*EIZpPw_7s3Z)sSZXZUmk9g13^fIE9W$BQBcsVCfTKkm<7|1z8DM!>(q9r;@ zxDHe@otBKl`N#49CI9if5Z^8Ni~meO#4Eyp`)hqA#~6z_N6(^`7H#xQ5ToZVQA%D` zM1J#(oE)wPp3QRpI?bPd<}Es{Rckvr^PU8P z>~nwHMP^=0+E{$%@|maqw~|(-GjB=C=XwZcY5d3ac266>lJ=dAvNU&mwrFc5iP<~& zcD};NIW{rzV>W$;ofRPenz}gY*jeXcW#VgwL_G%eL!`?TRrw<~0WqD17UHo$oM0j* zzRpd+jI`|@3e)tXZUSngrV}$%Eoy!fFw;k*)w+DV?wMg`{@)H{?x%93mXkEZ%(dKs z%spyb)qcYqwF^*79#>Mn`Gqaf@3!s~Aa|Vu_;Z23cZP3z#5auEy3jvYPXy{d7Am%U z%Gurl&fngFRpKNdPYxsFK(%|Z_sy_9mjs%C9cl3?F1EUW&;;a2i|^+{PF;zb(c+8z z<7^&!d#a1A%n2@Z?s*kiOZHdD`kjo%TRQgKo#w-A%BXHhH&oU-JqK-kfQ>36FgjJu z-MXjw`}KHWPR}r5Ef7cFUD8u1nltH}=kS}2xFH2zOxe{eLB32gv z^{&Rt6X+jqp*S*D9-se1!=;IhmZPGjY2IjA8hE-cMT^WFqYP@axDWZJu2n~C*4v$Q30S~y1GVp-6y05*);8kmnKqqegxROM45P3Dbb z2j(7s0v~H)r_K&dLT(AvnxB8?n8;09_mo-D+R1Ty#&ITM;vnQSZ|;#C8&PvDOyzv! zz~&yuf%Sve^mr3BaZGn0^Vc-+l;>8l6AVl>hMTcMMRw;WnyB>>F8vOi?}FxT-N-62 z&%o5&xts>hiyB)cPSR0bPqBuvV<)eZ4eZPb%>ixdh&n|_#ciSVDsdA~Bm49De$?jd zk|WQ&Q$x6mcJF9jVBl)EtDR=fJDOu_@j?SNbsuyfbC0Lih^1zciD|heHjW*$A}ltr zmD{5On!Al7EAkQpGrP;~faY)I!0N~?zAYY9wO^I@X^2RYQxB}d9+MNR)GT?$lN^~+tZw8U}`}L9N4`58k@bR8>n`?0|z>PjU&&5SNX7o zD`Mlgv1k7B5N?z9=P~RvOl)zLGxiW}W?!%HU}w=Kc5j=X>A}__S2*Cg>mAs)pMte> zr3YL04R^qEkMdZLxB1YsfEx~Y-kQhOv33JHjpgA$=C5z$?AxJZ+Hpc0=)AR!*+Ch|;5ggFm^^CRf8W&YXW!b&RYaL|%pn!P; z5nmcdZizglx=ds(noJXL1MgCf#;Wyd9alIhHvum&Z)XATEEA7M!Epd{kKn+`Y$ov5 z>3ICUOXFyP{WJGi=(f;!g9^9u#!(~Ixb-?}dP}Eq#7I3i7>HWLp@vaomgSxRs_%H8 zcMQeWqt^s+J;(c|u7tfoZ%WTcN^tg=C1}bB2&~ln?ZPIf1liRkcktz&Z-MoUzf(CUg4~pz4?HjU+pE_a z*v8ew#z%alzt0WgW}%jx0_2|YG0VW~JSAw(vn%Fb@cIC1Gix2Q{``%JZ$?~m8a(eP zkG1z3Oyn$>TjQvKxy9eyZ8lM5oVdmj10$RJL!DbG+p*!<%;f?Kd~v+#C}EvJ?vWIkIYSnrywA+TD>|^b+c>r&mULV_bfW{CyS9-L{6+({I9Mw5 zUpQQJtC|}#@HUIz2RYxslmRE5O6G6d$or(SftcOsZydEXViVnNpz5&zWK_W>phr#- zl_0tb!s!$sZ!gDeveh8I|Mf#|?7#@)cL|1dY%Rz_z*Q&rSc|QdZ_=^TsG&(%Qm4Ul zBQFi?-uWfeS{OO9q0HOvF+1LfuLS;WbncqR?&{P-xJ|5gY}YgD!w(F$yzL#s-J#>E zSJnOoZzk>q25t=>BTJ*(H~!>^omY11xGJn$5*62(T)Ar;I63fB`GqEOdP^paV$v{n zOJFtQ&&!JpY#AWM0n9z0VsAeFR!7u=uQZMt>)kgSsM*Cc5s%b?&fB{&AD6!~kX6K( zhB0H$iHi+PGZ>8noV#~p?fe!4*$Q;yK<94f$Uf|?F0y~I%3t5WTONL=@$X$!_1!h6 zy7`d1R*y?{RCQ;wS(c9&@;`f##kOZ;_wGC1VIW&y zIdleC?$(a%JN_kroP^A37(2G_c&Cn?MB{P*bI+!jZR=l6#BuTdzs$hQzAD*-ng*T> zd{6gp8LA4W-vq?KNaD8d%WXs+s^5XkJ9cB^=id!PL=wPP035*l<0ta$xgtX}J`&)< z=B;PU&hsAu)b!&8jn_G5XL(l;U3?h90nc0W*p0*g3}9Q|Txhrqv3<^!P8rhR_zrCD zu@5;d7gZJK1vM#?DPwIk+k` zc{7j$wsP(j@;_l@`DG5L!E^U_U~S`GAyyFq{3N!a`kqL`^^c9WYkc^A z(?I_57I;$gGu;3BaKny3`LQD-?!7*2{SzwWC zn1;&|TXR0(mPLJY#sSVh0s=OD?vZn?2RZqkjRTx_wTW58KB#a-2=nw)IlC3}IukSf z3QyyhfmMxLD?a4KY{ps|Yu)Qj)b!gy4c9dGuHeI7O!4KPhH+zcy}`mwViPxv8Jn*k z@nXu4DLKHo=WEPzexrrlyuE15OX8z8Dq=6Wo1xt6L&TDMlLv7%KEKk0){V^8k9km= zGlFBI>E-}xlj<93<&Rs)IAMqnQZ?SnvHITPqN?xoG>#mzXx?fet51bFu+1FHpRiF! znzm9zEY_d2Q2EwIe&NiiZ0;2*_8hp)iz~jK<^bnzF;-5X~3dK<7BaG&VA4bVcOrNbQ(B!U1PTQdoo<#H!mIVymej@s56hs|7C?OKd0${<*#XA<>fvU_nK(y ziaUzso_SFn)bYw_G%yj{C z*Di*5zd}?lbj?7FtiE5<5DSCahe;c5+1PuzuN$ap{o^mER+q{iC-?lV9N8It!$8N! zVjHh(;0ey}D?Xs1Ip3je964ei|E7lQe&W`F&fUhbv&@4Qb~8s-%unH48t#btGH>H` zjoHy2$}sh>{yLz!*QUt4{kFp7r_*M(ZtSW0Z~!&=hH&FG4vc2*m+>6~TiCwciJN;2 z$HvklE~0NUoF6k{SNg7jsaD1&)HD_c>rp>ys9W>bII=7Ko`K!OU1?xVo`tdWScW-x zeg{_Nirc_>XKSo|zpvxLRCso=Hd3lq@I^{^7rW5;+c&U3BH7G@LUJV)m5PfS$po3744&cAL%PLn@% za0jc+ums2KFh4Ue)!b>uiX3_3{oF(ym-y1ZFfhj}zVtIX>Nv-j{-uH4)cDeoefhHn zYPB|4taVh&)tWn`az6zEdt>ei^(!5HGa;(Zf30K zrGZ@y|1jsT4b-am^qkmH73!lSX$v%?=8+Zad8-WdT4BWVQYUw7$99sxF)_zA-t=z` z>?X#Wj;xixGcd&`;MR?L8aelDitKA%&@r1Ic{wtdes3U`MuuVIY|_1 zx?$^9Tpe~NP~LWq?U?`Q!R_N;uy!^Yxltqgn-_J|bkFJ!e9+XH`zI4u#6E83eYBX} z=FcAN@rpnE7Z3LM#UFmjhu*~a!?CscWgT0*K0u_pVr8&dF-BrLTVm-qQgORSe&>F; zSR8bxR_-w#^XOnE>bOOVouK26L$ugEOuXG5Eq0=gx7(w|?rEWoPqf%cI%?CR#l~)} z?qwkIXtCoJNpkN9vd_ev_xTrlGqaC@-P}l$v8VlH4{mezHZeb;eNEJHh$}e7Kpelg zg8Nyx;}utMs*XF3aRv9caK|UE;4}-hS-0zBw#Nf3%<+gTINiW(c3i>M!2X=aI6lxp z#yb*x=pE5e%H?9szhvaz#l)g@9TYD?v#iYlt3JOGey~x3ro~o_oU;$n5xd7H+TfuE z=6FOKoM9l2SG2*y4Ak8cZ7?vF_#2|bgXsQ4Z{EE|?3sUrj;%%ebB`gpQ3KXc?kRAj zj=G^TP;75^0dubyF~6;&Y{X5?K#cjY&omH6>pi3Ot_@9#Wf(i-9qmJI(yAQuvYF-L z_H62QJ2vk~itUw;(J_@XMt5PP310(^;m-EsRtKA48;ju{Yv49HdSGOYnxo@php=&p z;dh*YJsvUq=IV&ejo}w*^6DIVnUisCn4#~#Nhey2LP;}OMgfr&b9QT!HqaGUwoB({59 z!6u*FNh5KeM zGZDwlx9c}@{C{Pm3Z$FJ~V`d*pjM~(PpoSC5x7Y9m(a$=8c zynSPL-BxC(^{OX8WA45ToDR6fvCY5=UFFM-81Opb_tV=I;>L>KEj>3{z+a4e!FMRM zO|??J=)3flf5b%Aflh^YZne6-zgjJC4u#jrjT<|`uX1sDpqpx~8FwWk^K!KZ*Bk04 ze{BP!mfJShxTri33xF|#n{cL$-C$FscnXP1f>bij_`djREKM`Aub>w@STYR$OG6MHk(9mMV% z;4jB|s-A6n?zWG4-L4;_1c6H@xyumqW!n%ggLm5H?)`wr?> cnt_1; - in_1.close(); + in >> cnt; + in.close(); } - std::string armor_file_name = armor_filename_prefix + std::to_string(cnt_1) + ".avi"; - cnt_1++; - std::ofstream out_1(armor_filename_prefix + "cnt.txt"); - if (out_1.is_open()) { - out_1 << cnt_1 << std::endl; - out_1.close(); + std::string armor_file_name = filename_prefix + std::to_string(cnt) + ".avi"; + cnt++; + std::ofstream out(filename_prefix + "cnt.txt"); + if (out.is_open()) { + out << cnt << std::endl; + out.close(); } video.open(armor_file_name, CV_FOURCC('P', 'I', 'M', '1'), 90, cv::Size(640, 480), true); }