From 86e04d444c5c20e72ab73dae89845a8114c3c227 Mon Sep 17 00:00:00 2001 From: xinyang Date: Thu, 2 May 2019 21:25:55 +0800 Subject: [PATCH 1/4] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E6=95=B0=E6=8D=AE?= =?UTF-8?q?=E6=8E=A5=E6=94=B6=E7=9A=84BUG=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CMakeLists.txt | 2 +- main.cpp | 19 ++++++++++--------- 2 files changed, 11 insertions(+), 10 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 6dcd4f8..3395bc8 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -3,7 +3,7 @@ CMAKE_MINIMUM_REQUIRED(VERSION 3.5) PROJECT(AutoAim) SET(CMAKE_CXX_STANDARD 11) SET(CMAKE_BUILD_TYPE RELEASE) -SET(CMAKE_CXX_FLAGS "-DPROJECT_DIR=\"\\\"${PROJECT_SOURCE_DIR}\\\"\"") +SET(CMAKE_CXX_FLAGS "-DPATH=\"\\\"${PROJECT_SOURCE_DIR}\\\"\"") FIND_PROGRAM(CCACHE_FOUND ccache) IF(CCACHE_FOUND) diff --git a/main.cpp b/main.cpp index cf79f1e..378370e 100644 --- a/main.cpp +++ b/main.cpp @@ -18,9 +18,9 @@ //#define DO_NOT_CNT_TIME #include -#define PATH PROJECT_DIR +#define PROJECT_DIR PATH #define ENERGY_STATE 1 -#define ARMOR_STATE 0 +#define ARMOR_STATE 0 using namespace cv; using namespace std; @@ -64,7 +64,7 @@ int main(int argc, char *argv[]){ Mat energy_src, armor_src; - ArmorFinder armorFinder(ENEMY_BLUE, uart, PATH"/tools/para/"); + ArmorFinder armorFinder(ENEMY_BLUE, uart, PROJECT_DIR"/tools/para/"); Energy energy(uart); energy.setAllyColor(ally_color); @@ -102,6 +102,7 @@ int main(int argc, char *argv[]){ return 0; } +#define RECEIVE_LOG_LEVEL LOG_NOTHING void uartReceive(Uart* uart){ char buffer[100]; @@ -111,28 +112,28 @@ void uartReceive(Uart* uart){ while((data=uart->receive()) != '\n'){ buffer[cnt++] = data; if(cnt >= 100){ -// LOGE("data receive over flow!"); + LOG(RECEIVE_LOG_LEVEL, "data receive over flow!"); + cnt = 0; } } if(cnt == 10){ if(buffer[8] == 'e'){ state = ENERGY_STATE; -// LOGM("Energy state"); + LOG(RECEIVE_LOG_LEVEL, "Energy state"); }else if(buffer[8] == 'a'){ state = ARMOR_STATE; -// LOGM("Armor state"); + LOG(RECEIVE_LOG_LEVEL, "Armor state"); } memcpy(&curr_yaw, buffer, 4); memcpy(&curr_pitch, buffer+4, 4); -// LOGM("Get yaw:%f pitch:%f", curr_yaw, curr_pitch); + LOG(RECEIVE_LOG_LEVEL, "Get yaw:%f pitch:%f", curr_yaw, curr_pitch); if(buffer[9] == 1){ if(mark == 0){ mark = 1; mark_yaw = curr_yaw; mark_pitch = curr_pitch; } - -// LOGM("Marked"); + LOG(RECEIVE_LOG_LEVEL, "Marked"); } } cnt = 0; From 174809e6a7b4558374d3dabfa7fb9d285795f19d Mon Sep 17 00:00:00 2001 From: xinyang Date: Fri, 3 May 2019 10:50:10 +0800 Subject: [PATCH 2/4] =?UTF-8?q?=E5=87=8F=E5=B0=91CNN=E8=AE=AD=E7=BB=83?= =?UTF-8?q?=E6=97=B6=EF=BC=8C=E6=B5=8B=E8=AF=95=E9=9B=86=E7=9A=84=E5=86=85?= =?UTF-8?q?=E5=AD=98=E5=8D=A0=E7=94=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tools/TrainCNN/backward.py | 20 ++++++++------------ tools/TrainCNN/forward.py | 2 +- tools/TrainCNN/generate.py | 9 +++++++++ 3 files changed, 18 insertions(+), 13 deletions(-) diff --git a/tools/TrainCNN/backward.py b/tools/TrainCNN/backward.py index 8503c5a..66f421c 100755 --- a/tools/TrainCNN/backward.py +++ b/tools/TrainCNN/backward.py @@ -5,6 +5,7 @@ from tqdm import tqdm import generate import forward import cv2 +import sys import numpy as np print("Finish!") @@ -61,8 +62,6 @@ MOVING_AVERAGE_DECAY = 0.99 def train(dataset, show_bar=False): - test_images, test_labels = dataset.all_test_sets() - x = tf.placeholder(tf.float32, [None, generate.SRC_ROWS, generate.SRC_COLS, generate.SRC_CHANNELS]) y_= tf.placeholder(tf.float32, [None, forward.OUTPUT_NODES]) nodes, vars = forward.forward(x, 0.001) @@ -104,15 +103,10 @@ def train(dataset, show_bar=False): if i % 100 == 0: if i % 1000 == 0: - acc = sess.run(accuracy, feed_dict={x: test_images, y_: test_labels}) + test_samples, test_labels = dataset.sample_test_sets(5000) + acc = sess.run(accuracy, feed_dict={x: test_samples, y_: test_labels}) bar.set_postfix({"loss": loss_value, "acc": acc}) - - # if show_bar: - # bar.title = "step: %d, loss: %f, acc: %f" % (step, loss_value, acc) - # bar.cursor.restore() - # bar.draw(value=i+1) - # video = cv2.VideoCapture("/home/xinyang/Desktop/Video.mp4") # _ = True # while _: @@ -148,11 +142,12 @@ def train(dataset, show_bar=False): # res = sess.run(y, feed_dict={x: im}) # res = res.reshape([forward.OUTPUT_NODES]) # print(np.argmax(res)) - + + test_samples, test_labels = dataset.sample_test_sets(100) vars_val = sess.run(vars) save_para("/home/xinyang/Desktop/AutoAim/tools/para", vars_val) - nodes_val = sess.run(nodes, feed_dict={x:test_images}) - return vars_val, nodes_val + nodes_val = sess.run(nodes, feed_dict={x:test_samples}) + return vars_val, nodes_val, test_samples if __name__ == "__main__": @@ -160,3 +155,4 @@ if __name__ == "__main__": dataset = generate.DataSet("/home/xinyang/Desktop/DataSets/box") print("Finish!") train(dataset, show_bar=True) + input("Press any key to end...") diff --git a/tools/TrainCNN/forward.py b/tools/TrainCNN/forward.py index 07ed70f..1ec3084 100644 --- a/tools/TrainCNN/forward.py +++ b/tools/TrainCNN/forward.py @@ -41,7 +41,7 @@ CONV2_OUTPUT_CHANNELS = 10 FC1_OUTPUT_NODES = 16 # 第二层全连接宽度(输出标签类型数) -FC2_OUTPUT_NODES = 4 +FC2_OUTPUT_NODES = 8 # 输出标签类型数 OUTPUT_NODES = FC2_OUTPUT_NODES diff --git a/tools/TrainCNN/generate.py b/tools/TrainCNN/generate.py index 5b2f3f4..20c2a63 100644 --- a/tools/TrainCNN/generate.py +++ b/tools/TrainCNN/generate.py @@ -67,6 +67,15 @@ class DataSet: labels.append(self.train_labels[id]) return np.array(samples), np.array(labels) + def sample_test_sets(self, length): + samples = [] + labels = [] + for i in range(length): + id = random.randint(0, len(self.test_samples)-1) + samples.append(self.test_samples[id]) + labels.append(self.test_labels[id]) + return np.array(samples), np.array(labels) + def all_train_sets(self): return self.train_samples[:], self.train_labels[:] From d1b9e8b530656f6236ebe488de739c8a35d4ce4c Mon Sep 17 00:00:00 2001 From: xinyang Date: Fri, 3 May 2019 10:58:24 +0800 Subject: [PATCH 3/4] =?UTF-8?q?=E4=BF=AE=E5=A4=8DCNN=E8=AE=AD=E7=BB=83?= =?UTF-8?q?=E4=BB=A3=E7=A0=81=E7=9A=84=E5=B0=8FBUG?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tools/TrainCNN/backward.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/tools/TrainCNN/backward.py b/tools/TrainCNN/backward.py index 66f421c..9d21e0a 100755 --- a/tools/TrainCNN/backward.py +++ b/tools/TrainCNN/backward.py @@ -103,7 +103,7 @@ def train(dataset, show_bar=False): if i % 100 == 0: if i % 1000 == 0: - test_samples, test_labels = dataset.sample_test_sets(5000) + test_samples, test_labels = dataset.sample_test_sets(5000) acc = sess.run(accuracy, feed_dict={x: test_samples, y_: test_labels}) bar.set_postfix({"loss": loss_value, "acc": acc}) @@ -142,8 +142,8 @@ def train(dataset, show_bar=False): # res = sess.run(y, feed_dict={x: im}) # res = res.reshape([forward.OUTPUT_NODES]) # print(np.argmax(res)) - - test_samples, test_labels = dataset.sample_test_sets(100) + + test_samples, test_labels = dataset.sample_test_sets(100) vars_val = sess.run(vars) save_para("/home/xinyang/Desktop/AutoAim/tools/para", vars_val) nodes_val = sess.run(nodes, feed_dict={x:test_samples}) From 37f6da5dd6f99104b9c09e10b1e253f4c3540010 Mon Sep 17 00:00:00 2001 From: xinyang Date: Fri, 3 May 2019 20:22:05 +0800 Subject: [PATCH 4/4] =?UTF-8?q?=E8=B0=83=E6=95=B4main=E5=87=BD=E6=95=B0?= =?UTF-8?q?=E4=B8=8D=E5=90=8C=E6=A8=A1=E5=BC=8F=E7=9A=84=E6=89=A7=E8=A1=8C?= =?UTF-8?q?=E9=80=BB=E8=BE=91=EF=BC=8C=E4=BB=A5=E7=95=A5=E5=BE=AE=E6=8F=90?= =?UTF-8?q?=E5=8D=87=E8=BF=90=E8=A1=8C=E6=95=88=E7=8E=87?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- main.cpp | 89 +++++++++++++++++++++++++++++--------------------------- 1 file changed, 46 insertions(+), 43 deletions(-) diff --git a/main.cpp b/main.cpp index 378370e..c4d7026 100644 --- a/main.cpp +++ b/main.cpp @@ -27,66 +27,69 @@ using namespace std; int state = ARMOR_STATE; -float curr_yaw=0, curr_pitch=0; -float mark_yaw=0, mark_pitch=0; +float curr_yaw = 0, curr_pitch = 0; +float mark_yaw = 0, mark_pitch = 0; int mark = 0; -void uartReceive(Uart* uart); +void uartReceive(Uart *uart); -int main(int argc, char *argv[]){ +int main(int argc, char *argv[]) { process_options(argc, argv); Uart uart; thread receive(uartReceive, &uart); - bool flag = true; + bool flag = true; - while (flag){ + while (flag) { int ally_color = ALLY_RED; int energy_part_rotation = CLOCKWISE; - int from_camera = 1; - if(!run_with_camera) { + int from_camera = 1; + if (!run_with_camera) { cout << "Input 1 for camera, 0 for video files" << endl; cin >> from_camera; } - WrapperHead *video_armor; + WrapperHead *video_armor; WrapperHead *video_energy; - if(from_camera) { + if (from_camera) { video_armor = new CameraWrapper(0); -// video_energy = new CameraWrapper(1); - }else { + video_energy = new CameraWrapper(1); + } else { video_armor = new VideoWrapper("/home/xinyang/Desktop/Video.mp4"); video_energy = new VideoWrapper("/home/xinyang/Desktop/Video.mp4"); } - if (video_armor->init()) { - cout << "Video source initialization successfully." << endl; - } + if (video_armor->init()) { + cout << "Video source initialization successfully." << endl; + } - Mat energy_src, armor_src; + Mat energy_src, armor_src; - ArmorFinder armorFinder(ENEMY_BLUE, uart, PROJECT_DIR"/tools/para/"); + ArmorFinder armorFinder(ENEMY_BLUE, uart, PROJECT_DIR"/tools/para/"); Energy energy(uart); energy.setAllyColor(ally_color); energy.setRotation(energy_part_rotation); - bool ok=true; + bool ok = true; - while (ok){ - CNT_TIME(WORD_LIGHT_CYAN, "Total", { - ok = video_armor->read(energy_src) && video_armor->read(armor_src); - if (show_origin) { - imshow("enery src", energy_src); - imshow("armor src", armor_src); - } + while (ok) { + CNT_TIME(WORD_LIGHT_CYAN, "Total", { if (state == ENERGY_STATE) { + ok = video_energy->read(energy_src); + if (show_origin) { + imshow("energy src", energy_src); + } if (from_camera == 0) { energy.extract(energy_src); } energy.run(energy_src); } else { + ok = video_armor->read(armor_src); + if (show_origin) { + imshow("armor src", armor_src); + } CNT_TIME(WORD_LIGHT_BLUE, "Armor Time", { - armorFinder.run(armor_src); + armorFinder.run(armor_src); }); } if (waitKey(1) == 'q') { @@ -94,41 +97,41 @@ int main(int argc, char *argv[]){ break; } }); - } - delete video_armor; - cout << "Program fails. Restarting" << endl; - } + } + delete video_armor; + cout << "Program fails. Restarting" << endl; + } - return 0; + return 0; } #define RECEIVE_LOG_LEVEL LOG_NOTHING -void uartReceive(Uart* uart){ +void uartReceive(Uart *uart) { char buffer[100]; - int cnt=0; - while(true){ + int cnt = 0; + while (true) { char data; - while((data=uart->receive()) != '\n'){ + while ((data = uart->receive()) != '\n') { buffer[cnt++] = data; - if(cnt >= 100){ + if (cnt >= 100) { LOG(RECEIVE_LOG_LEVEL, "data receive over flow!"); - cnt = 0; + cnt = 0; } } - if(cnt == 10){ - if(buffer[8] == 'e'){ + if (cnt == 10) { + if (buffer[8] == 'e') { state = ENERGY_STATE; LOG(RECEIVE_LOG_LEVEL, "Energy state"); - }else if(buffer[8] == 'a'){ + } else if (buffer[8] == 'a') { state = ARMOR_STATE; LOG(RECEIVE_LOG_LEVEL, "Armor state"); } memcpy(&curr_yaw, buffer, 4); - memcpy(&curr_pitch, buffer+4, 4); + memcpy(&curr_pitch, buffer + 4, 4); LOG(RECEIVE_LOG_LEVEL, "Get yaw:%f pitch:%f", curr_yaw, curr_pitch); - if(buffer[9] == 1){ - if(mark == 0){ + if (buffer[9] == 1) { + if (mark == 0) { mark = 1; mark_yaw = curr_yaw; mark_pitch = curr_pitch;