Merge remote-tracking branch 'origin/master'

This commit is contained in:
JiatongSun
2019-05-02 10:46:09 +08:00
20 changed files with 12486 additions and 172 deletions

View File

@@ -1,34 +1,34 @@
cmake_minimum_required(VERSION 3.5) CMAKE_MINIMUM_REQUIRED(VERSION 3.5)
project(AutoAim) PROJECT(AutoAim)
set(CMAKE_CXX_STANDARD 11) SET(CMAKE_CXX_STANDARD 11)
SET(CMAKE_BUILD_TYPE DEBUG) SET(CMAKE_BUILD_TYPE RELEASE)
SET(CMAKE_CXX_FLAGS "-DPROJECT_DIR=\"\\\"${PROJECT_SOURCE_DIR}\\\"\"")
FIND_PROGRAM(CCACHE_FOUND ccache) FIND_PROGRAM(CCACHE_FOUND ccache)
IF(CCACHE_FOUND) IF(CCACHE_FOUND)
set_property(GLOBAL PROPERTY RULE_LAUNCH_COMPILE ccache) SET_PROPERTY(GLOBAL PROPERTY RULE_LAUNCH_COMPILE ccache)
set_property(GLOBAL PROPERTY RULE_LAUNCH_LINK ccache) SET_PROPERTY(GLOBAL PROPERTY RULE_LAUNCH_LINK ccache)
message("< Use ccache for compiler >") MESSAGE("< Use ccache for compiler >")
ENDIF() ENDIF()
FIND_PACKAGE(OpenCV 3 REQUIRED) FIND_PACKAGE(OpenCV 3 REQUIRED)
FIND_PACKAGE(Eigen3 REQUIRED) FIND_PACKAGE(Eigen3 REQUIRED)
FIND_PACKAGE(Threads) FIND_PACKAGE(Threads)
include_directories( ${EIGEN3_INCLUDE_DIR} ) INCLUDE_DIRECTORIES(${EIGEN3_INCLUDE_DIR})
include_directories( ${PROJECT_SOURCE_DIR}/energy/include ) INCLUDE_DIRECTORIES(${PROJECT_SOURCE_DIR}/energy/include)
include_directories( ${PROJECT_SOURCE_DIR}/armor/include ) INCLUDE_DIRECTORIES(${PROJECT_SOURCE_DIR}/armor/include)
include_directories( ${PROJECT_SOURCE_DIR}/others/include ) INCLUDE_DIRECTORIES(${PROJECT_SOURCE_DIR}/others/include)
FILE(GLOB_RECURSE sourcefiles "others/src/*.cpp" "energy/src/*cpp" "armor/src/*.cpp") FILE(GLOB_RECURSE sourcefiles "others/src/*.cpp" "energy/src/*cpp" "armor/src/*.cpp")
add_executable(run main.cpp ${sourcefiles} ) ADD_EXECUTABLE(run main.cpp ${sourcefiles} )
TARGET_LINK_LIBRARIES(run ${CMAKE_THREAD_LIBS_INIT}) TARGET_LINK_LIBRARIES(run ${CMAKE_THREAD_LIBS_INIT})
TARGET_LINK_LIBRARIES(run ${OpenCV_LIBS}) TARGET_LINK_LIBRARIES(run ${OpenCV_LIBS})
TARGET_LINK_LIBRARIES(run ${PROJECT_SOURCE_DIR}/others/libMVSDK.so) TARGET_LINK_LIBRARIES(run ${PROJECT_SOURCE_DIR}/others/libMVSDK.so)
# Todo ADD_CUSTOM_TARGET(train COMMAND "gnome-terminal" "-x" "bash" "-c" "\"${PROJECT_SOURCE_DIR}/tools/TrainCNN/backward.py\"" )
# ADD_CUSTOM_TARGET(bind-monitor COMMAND "")
# Todo # Todo
# ADD_CUSTOM_TARGET(train COMMAND "") # ADD_CUSTOM_TARGET(bind-monitor COMMAND "")

View File

@@ -2,47 +2,42 @@
// Created by xinyang on 19-3-27. // Created by xinyang on 19-3-27.
// //
#include <log.h> #include <log.h>
#include <options/options.h>
#include <show_images/show_images.h>
#include <opencv2/highgui.hpp>
#include <armor_finder/armor_finder.h> #include <armor_finder/armor_finder.h>
ArmorFinder::ArmorFinder(EnemyColor color, Uart &u, string paras_folder) : ArmorFinder::ArmorFinder(EnemyColor color, Uart &u, string paras_folder) :
uart(u), uart(u),
enemy_color(color), enemy_color(color),
state(STANDBY_STATE), state(STANDBY_STATE),
classifier(std::move(paras_folder)), classifier(std::move(paras_folder)),
contour_area(0) contour_area(0)
{ {
auto para = TrackerToUse::Params();
para.desc_npca = 1;
para.desc_pca = 0;
tracker = TrackerToUse::create(para);
if(!tracker){
LOGW("Tracker Not init");
}
} }
void ArmorFinder::run(cv::Mat &src) { void ArmorFinder::run(cv::Mat &src) {
cv::Mat src_use; cv::Mat src_use;
// if (src.type() == CV_8UC3) { src_use = src.clone();
// cv::cvtColor(src, src_use, CV_RGB2GRAY);
// }else{
src_use = src.clone();
// }
cv::cvtColor(src_use, src_gray, CV_RGB2GRAY); cv::cvtColor(src_use, src_gray, CV_RGB2GRAY);
stateSearchingTarget(src_use); if(show_armor_box){
return; showArmorBox("box", src, armor_box);
cv::waitKey(1);
}
// stateSearchingTarget(src_use);
// return;
switch (state){ switch (state){
case SEARCHING_STATE: case SEARCHING_STATE:
if(stateSearchingTarget(src_use)){ if(stateSearchingTarget(src_use)){
if((armor_box & cv::Rect2d(0, 0, 640, 480)) == armor_box) { if((armor_box & cv::Rect2d(0, 0, 640, 480)) == armor_box) {
cv::Mat roi = src_use.clone()(armor_box); if(!classifier){
cv::threshold(roi, roi, 200, 255, cv::THRESH_BINARY); cv::Mat roi = src_use.clone()(armor_box), roi_gray;
contour_area = cv::countNonZero(roi); cv::cvtColor(roi, roi_gray, CV_RGB2GRAY);
auto para = TrackerToUse::Params(); cv::threshold(roi_gray, roi_gray, 180, 255, cv::THRESH_BINARY);
para.desc_npca = 1; contour_area = cv::countNonZero(roi_gray);
para.desc_pca = 0; }
tracker = TrackerToUse::create(para); tracker = TrackerToUse::create();
tracker->init(src_use, armor_box); tracker->init(src_use, armor_box);
state = TRACKING_STATE; state = TRACKING_STATE;
LOGW("into track"); LOGW("into track");
@@ -50,7 +45,7 @@ void ArmorFinder::run(cv::Mat &src) {
} }
break; break;
case TRACKING_STATE: case TRACKING_STATE:
if(!stateTrackingTarget(src_gray)){ if(!stateTrackingTarget(src_use)){
state = SEARCHING_STATE; state = SEARCHING_STATE;
//std::cout << "into search!" << std::endl; //std::cout << "into search!" << std::endl;
} }

View File

@@ -259,7 +259,7 @@ Classifier::Classifier(const string &folder) : state(true){
fc2_w = load_fc_w(folder+"fc2_w"); fc2_w = load_fc_w(folder+"fc2_w");
fc2_b = load_fc_b(folder+"fc2_b"); fc2_b = load_fc_b(folder+"fc2_b");
if(state){ if(state){
LOGM("Load paras success!"); LOGM("Load para success!");
} }
} }

View File

@@ -7,7 +7,6 @@
#include "image_process/image_process.h" #include "image_process/image_process.h"
#include <log.h> #include <log.h>
#include <show_images/show_images.h> #include <show_images/show_images.h>
#include <options/options.h> #include <options/options.h>
typedef std::vector<LightBlob> LightBlobs; typedef std::vector<LightBlob> LightBlobs;
@@ -32,11 +31,10 @@ static void pipelineLightBlobPreprocess(cv::Mat &src) {
} }
static bool findLightBlobs(const cv::Mat &src, LightBlobs &light_blobs) { static bool findLightBlobs(const cv::Mat &src, LightBlobs &light_blobs) {
static cv::Mat src_bin; // static cv::Mat src_bin;
cv::threshold(src, src_bin, 80, 255, CV_THRESH_BINARY);
std::vector<std::vector<cv::Point> > light_contours; std::vector<std::vector<cv::Point> > light_contours;
cv::findContours(src_bin, light_contours, CV_RETR_EXTERNAL, CV_CHAIN_APPROX_NONE); cv::findContours(src, light_contours, CV_RETR_EXTERNAL, CV_CHAIN_APPROX_NONE);
for (auto &light_contour : light_contours) { for (auto &light_contour : light_contours) {
cv::RotatedRect rect = cv::minAreaRect(light_contour); cv::RotatedRect rect = cv::minAreaRect(light_contour);
if(isValidLightBlob(rect)){ if(isValidLightBlob(rect)){
@@ -117,7 +115,7 @@ static bool findArmorBoxes(LightBlobs &light_blobs, std::vector<cv::Rect2d> &arm
min_x = fmin(rect_left.x, rect_right.x); min_x = fmin(rect_left.x, rect_right.x);
max_x = fmax(rect_left.x + rect_left.width, rect_right.x + rect_right.width); max_x = fmax(rect_left.x + rect_left.width, rect_right.x + rect_right.width);
min_y = fmin(rect_left.y, rect_right.y) - 5; min_y = fmin(rect_left.y, rect_right.y) - 5;
max_y = fmax(rect_left.y + rect_left.height, rect_right.y + rect_right.height) + 5; max_y = fmax(rect_left.y + rect_left.height, rect_right.y + rect_right.height);
if (min_x < 0 || max_x > 640 || min_y < 0 || max_y > 480) { if (min_x < 0 || max_x > 640 || min_y < 0 || max_y > 480) {
continue; continue;
} }
@@ -149,19 +147,21 @@ bool judge_light_color(std::vector<LightBlob> &light, std::vector<LightBlob> &co
} }
bool ArmorFinder::stateSearchingTarget(cv::Mat &src) { bool ArmorFinder::stateSearchingTarget(cv::Mat &src) {
cv::Mat split, pmsrc=src.clone(); cv::Mat split, pmsrc=src.clone(), src_bin;
LightBlobs light_blobs, pm_light_blobs, light_blobs_real; LightBlobs light_blobs, pm_light_blobs, light_blobs_real;
std::vector<cv::Rect2d> armor_boxes, boxes_one, boxes_two, boxes_three; std::vector<cv::Rect2d> armor_boxes, boxes_one, boxes_two, boxes_three;
// cv::resize(src, pmsrc, cv::Size(320, 240)); // cv::resize(src, pmsrc, cv::Size(320, 240));
imageColorSplit(src, split, enemy_color); imageColorSplit(src, split, enemy_color);
imagePreProcess(split); cv::threshold(split, src_bin, 130, 255, CV_THRESH_BINARY);
cv::resize(split, split, cv::Size(640, 480)); imagePreProcess(src_bin);
// cv::imshow("bin", src_bin);
// cv::resize(split, split, cv::Size(640, 480));
// pipelineLightBlobPreprocess(pmsrc); // pipelineLightBlobPreprocess(pmsrc);
// if(!findLightBlobs(pmsrc, pm_light_blobs)){ // if(!findLightBlobs(pmsrc, pm_light_blobs)){
// return false; // return false;
// } // }
if(!findLightBlobs(split, light_blobs)){ if(!findLightBlobs(src_bin, light_blobs)){
return false; return false;
} }
// if(!judge_light_color(light_blobs, pm_light_blobs, light_blobs_real)){ // if(!judge_light_color(light_blobs, pm_light_blobs, light_blobs_real)){
@@ -182,10 +182,7 @@ bool ArmorFinder::stateSearchingTarget(cv::Mat &src) {
for(auto box : armor_boxes){ for(auto box : armor_boxes){
cv::Mat roi = src(box).clone(); cv::Mat roi = src(box).clone();
cv::resize(roi, roi, cv::Size(48, 36)); cv::resize(roi, roi, cv::Size(48, 36));
// cv::imshow("roi", roi);
// cv::waitKey(0);
int c = classifier(roi); int c = classifier(roi);
// cout << c << endl;
switch(c){ switch(c){
case 1: case 1:
boxes_one.emplace_back(box); boxes_one.emplace_back(box);
@@ -204,6 +201,8 @@ bool ArmorFinder::stateSearchingTarget(cv::Mat &src) {
armor_box = boxes_two[0]; armor_box = boxes_two[0];
}else if(!boxes_three.empty()){ }else if(!boxes_three.empty()){
armor_box = boxes_three[0]; armor_box = boxes_three[0];
} else{
return false;
} }
if(show_armor_box){ if(show_armor_box){
showArmorBoxClass("class", src, boxes_one, boxes_two, boxes_three); showArmorBoxClass("class", src, boxes_one, boxes_two, boxes_three);
@@ -211,10 +210,6 @@ bool ArmorFinder::stateSearchingTarget(cv::Mat &src) {
}else{ }else{
armor_box = armor_boxes[0]; armor_box = armor_boxes[0];
} }
if(show_armor_box){
showArmorBox("box", src, armor_box);
cv::waitKey(1);
}
if(split.size() == cv::Size(320, 240)){ if(split.size() == cv::Size(320, 240)){
armor_box.x *= 2; armor_box.x *= 2;
armor_box.y *= 2; armor_box.y *= 2;

View File

@@ -5,17 +5,27 @@
#include <armor_finder/armor_finder.h> #include <armor_finder/armor_finder.h>
bool ArmorFinder::stateTrackingTarget(cv::Mat &src) { bool ArmorFinder::stateTrackingTarget(cv::Mat &src) {
auto last = armor_box; if(!tracker->update(src, armor_box)){
tracker->update(src, armor_box); return false;
}
if((armor_box & cv::Rect2d(0, 0, 640, 480)) != armor_box){ if((armor_box & cv::Rect2d(0, 0, 640, 480)) != armor_box){
return false; return false;
} }
cv::Mat roi = src(armor_box);
threshold(roi, roi, 200, 255, cv::THRESH_BINARY);
if(abs(cv::countNonZero(roi) - contour_area) > contour_area * 0.3){ cv::Mat roi = src.clone()(armor_box);
return false; if(classifier){
cv::resize(roi, roi, cv::Size(48, 36));
if(classifier(roi) == 0){
return false;
}
}else{
cv::Mat roi_gray;
cv::cvtColor(roi, roi_gray, CV_RGB2GRAY);
cv::threshold(roi_gray, roi_gray, 180, 255, cv::THRESH_BINARY);
contour_area = cv::countNonZero(roi_gray);
if(abs(cv::countNonZero(roi_gray) - contour_area) > contour_area * 0.3){
return false;
}
} }
return sendBoxPosition(); return sendBoxPosition();
} }

View File

@@ -13,32 +13,33 @@
#include <camera/wrapper_head.h> #include <camera/wrapper_head.h>
#include <armor_finder/armor_finder.h> #include <armor_finder/armor_finder.h>
#include <options/options.h> #include <options/options.h>
#include <thread>
//#define DO_NOT_CNT_TIME
#include <log.h> #include <log.h>
#include <thread> #define PATH PROJECT_DIR
#define ENERGY_STATE 1
#define ARMOR_STATE 0
using namespace cv; using namespace cv;
using namespace std; using namespace std;
#define ENERGY_STATE 1
#define ARMOR_STATE 0
int state = ENERGY_STATE; int state = ARMOR_STATE;
float curr_yaw=0, curr_pitch=0; float curr_yaw=0, curr_pitch=0;
float mark_yaw=0, mark_pitch=0; float mark_yaw=0, mark_pitch=0;
int mark = 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); process_options(argc, argv);
Uart uart; Uart uart;
thread receive(uartReceive, &uart); thread receive(uartReceive, &uart);
bool flag = true; bool flag = true;
while (flag) while (flag){
{
int ally_color = ALLY_RED; int ally_color = ALLY_RED;
int energy_part_rotation = CLOCKWISE; int energy_part_rotation = CLOCKWISE;
@@ -51,46 +52,50 @@ int main(int argc, char *argv[])
WrapperHead *video_armor; WrapperHead *video_armor;
WrapperHead *video_energy; WrapperHead *video_energy;
if(from_camera) { if(from_camera) {
// video_armor = new CameraWrapper(); video_armor = new CameraWrapper(0);
video_energy = new CameraWrapper(); // video_energy = new CameraWrapper(1);
}else { }else {
video_armor = new VideoWrapper("r_l_640.avi"); video_armor = new VideoWrapper("/home/xinyang/Desktop/Video.mp4");
video_energy = new VideoWrapper("r_l_640.avi"); video_energy = new VideoWrapper("/home/xinyang/Desktop/Video.mp4");
} }
if (video_energy->init()) { if (video_armor->init()) {
cout << "Video source initialization successfully." << endl; cout << "Video source initialization successfully." << endl;
} }
Mat energy_src, armor_src; Mat energy_src, armor_src;
ArmorFinder armorFinder(ENEMY_BLUE, uart, "/home/xinyang/Desktop/AutoAim/tools/para/"); ArmorFinder armorFinder(ENEMY_BLUE, uart, PATH"/tools/para/");
Energy energy(uart); Energy energy(uart);
energy.setAllyColor(ally_color); energy.setAllyColor(ally_color);
energy.setRotation(energy_part_rotation); energy.setRotation(energy_part_rotation);
while (video_energy->read(energy_src) && video_energy->read(armor_src)) bool ok=true;
{
if(show_origin) { while (ok){
imshow("enery src", energy_src); CNT_TIME(WORD_LIGHT_CYAN, "Total", {
imshow("armor src", armor_src); ok = video_armor->read(energy_src) && video_armor->read(armor_src);
} if (show_origin) {
if(state == ENERGY_STATE){ imshow("enery src", energy_src);
if(from_camera==0){ imshow("armor src", armor_src);
energy.extract(energy_src);
} }
energy.run(energy_src); if (state == ENERGY_STATE) {
}else{ if (from_camera == 0) {
CNT_TIME(WORD_LIGHT_BLUE, "Armor Time", { energy.extract(energy_src);
armorFinder.run(armor_src); }
}); energy.run(energy_src);
} } else {
if (waitKey(1) == 'q') { CNT_TIME(WORD_LIGHT_BLUE, "Armor Time", {
flag = false; armorFinder.run(armor_src);
break; });
} }
if (waitKey(1) == 'q') {
flag = false;
break;
}
});
} }
delete video_energy; delete video_armor;
cout << "Program fails. Restarting" << endl; cout << "Program fails. Restarting" << endl;
} }

View File

@@ -36,11 +36,7 @@ private:
public: public:
CameraWrapper(); CameraWrapper(int camera_mode=1, const std::string &n="NULL");
CameraWrapper(const std::string &n);
CameraWrapper(int camera_mode);
CameraWrapper(const std::string &n,int camera_mode);
~CameraWrapper() final; ~CameraWrapper() final;
bool init() final; bool init() final;

View File

@@ -9,39 +9,13 @@ using std::cout;
using std::endl; using std::endl;
using namespace cv; using namespace cv;
CameraWrapper::CameraWrapper(): CameraWrapper::CameraWrapper(int camera_mode, const std::string &n):
name("NULL"),
mode(1),
camera_cnts(2),
camera_status(-1),
iplImage(nullptr),
channel(3){
}
CameraWrapper::CameraWrapper(const std::string &n):
name(n),
mode(1),
camera_cnts(2),
camera_status(-1),
iplImage(nullptr),
channel(3){
}
CameraWrapper::CameraWrapper(int camera_mode):
name("NULL"),
mode(camera_mode),
camera_cnts(2),
camera_status(-1),
iplImage(nullptr),
channel(3){
}
CameraWrapper::CameraWrapper(const std::string &n,int camera_mode):
name(n), name(n),
mode(camera_mode), mode(camera_mode),
camera_cnts(2), camera_cnts(2),
camera_status(-1), camera_status(-1),
iplImage(nullptr), iplImage(nullptr),
rgb_buffer(nullptr),
channel(3){ channel(3){
} }
@@ -51,9 +25,9 @@ bool CameraWrapper::init() {
//枚举设备,并建立设备列表 //枚举设备,并建立设备列表
int camera_enumerate_device_status = CameraEnumerateDevice(camera_enum_list, &camera_cnts); int camera_enumerate_device_status = CameraEnumerateDevice(camera_enum_list, &camera_cnts);
//cout<<"camera enumerate device status: "<<camera_enumerate_device_status<<endl; if(camera_enumerate_device_status != CAMERA_STATUS_SUCCESS){
//cout<<"camera number: "<<camera_cnts<<endl; LOGE("CameraEnumerateDevice fail with %d!", camera_enumerate_device_status);
}
//没有连接设备 //没有连接设备
if (camera_cnts == 0) { if (camera_cnts == 0) {
LOGE("No camera device detected!"); LOGE("No camera device detected!");
@@ -67,16 +41,17 @@ bool CameraWrapper::init() {
camera_status = CameraInit(&camera_enum_list[i], -1, -1, &h_camera); camera_status = CameraInit(&camera_enum_list[i], -1, -1, &h_camera);
if (camera_status != CAMERA_STATUS_SUCCESS) { if (camera_status != CAMERA_STATUS_SUCCESS) {
LOGE("Camera 0 initialization failed with code %d. See camera_status.h to find the code meaning.", camera_status); LOGE("Camera 0 initialization failed with code %d. See camera_status.h to find the code meaning.", camera_status);
return false; goto stop;
} }
CameraGetFriendlyName(h_camera, camera_name); CameraGetFriendlyName(h_camera, camera_name);
if(name=="NULL" || strcmp(name.data(), camera_name)==0){ if(name=="NULL" || strcmp(name.data(), camera_name)==0){
break; break;
} }
stop:
CameraUnInit(h_camera); CameraUnInit(h_camera);
} }
if(i >= camera_cnts){ if(i >= camera_cnts){
LOGE("No device name %s!", name.data()); LOGE("No device name %s or device open error!!", name.data());
return false; return false;
} }
@@ -90,11 +65,11 @@ bool CameraWrapper::init() {
tCapability.sResolutionRange.iWidthMax * 3); tCapability.sResolutionRange.iWidthMax * 3);
if(mode == 0){ if(mode == 0){
// 不使用自动曝光 // 不使用自动曝光
CameraSetAeState(h_camera, false); CameraSetAeState(h_camera, true);
// 曝光时间10ms // 曝光时间10ms
CameraSetExposureTime(h_camera, 10000); // CameraSetExposureTime(h_camera, 10000);
// 模拟增益4 // 模拟增益4
CameraSetAnalogGain(h_camera, 63); CameraSetAnalogGain(h_camera, 64);
// 使用预设LUT表 // 使用预设LUT表
CameraSetLutMode(h_camera, LUTMODE_PRESET); CameraSetLutMode(h_camera, LUTMODE_PRESET);
// 抗频闪 // 抗频闪
@@ -188,6 +163,7 @@ CameraWrapper::~CameraWrapper()
{ {
CameraUnInit(h_camera); CameraUnInit(h_camera);
//注意先反初始化后再free //注意先反初始化后再free
free(rgb_buffer); if(rgb_buffer != nullptr)
free(rgb_buffer);
} }

49
tools/TrainCNN/backward.py Normal file → Executable file
View File

@@ -1,9 +1,12 @@
#!/usr/bin/python3
print("Preparing...")
import tensorflow as tf import tensorflow as tf
from progressive.bar import Bar from tqdm import tqdm
import generate import generate
import forward import forward
import cv2 import cv2
import numpy as np import numpy as np
print("Finish!")
def save_kernal(fp, val): def save_kernal(fp, val):
print(val.shape[2], file=fp) print(val.shape[2], file=fp)
@@ -51,7 +54,7 @@ def save_para(folder, paras):
STEPS = 20000 STEPS = 20000
BATCH = 10 BATCH = 30
LEARNING_RATE_BASE = 0.01 LEARNING_RATE_BASE = 0.01
LEARNING_RATE_DECAY = 0.99 LEARNING_RATE_DECAY = 0.99
MOVING_AVERAGE_DECAY = 0.99 MOVING_AVERAGE_DECAY = 0.99
@@ -85,18 +88,13 @@ def train(dataset, show_bar=False):
correct_prediction = tf.equal(tf.argmax(y, 1), tf.argmax(y_, 1)) correct_prediction = tf.equal(tf.argmax(y, 1), tf.argmax(y_, 1))
accuracy = tf.reduce_mean(tf.cast(correct_prediction, tf.float32)) accuracy = tf.reduce_mean(tf.cast(correct_prediction, tf.float32))
acc = 0
with tf.Session() as sess: with tf.Session() as sess:
init_op = tf.global_variables_initializer() init_op = tf.global_variables_initializer()
sess.run(init_op) sess.run(init_op)
if show_bar: bar = tqdm(range(STEPS), dynamic_ncols=True)
bar = Bar(max_value=STEPS, width=u'50%') for i in bar:
bar.cursor.clear_lines(1)
bar.cursor.save()
for i in range(STEPS):
images_samples, labels_samples = dataset.sample_train_sets(BATCH) images_samples, labels_samples = dataset.sample_train_sets(BATCH)
_, loss_value, step = sess.run( _, loss_value, step = sess.run(
@@ -107,18 +105,21 @@ def train(dataset, show_bar=False):
if i % 100 == 0: if i % 100 == 0:
if i % 1000 == 0: if i % 1000 == 0:
acc = sess.run(accuracy, feed_dict={x: test_images, y_: test_labels}) acc = sess.run(accuracy, feed_dict={x: test_images, 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) # if show_bar:
bar.cursor.restore() # bar.title = "step: %d, loss: %f, acc: %f" % (step, loss_value, acc)
bar.draw(value=i+1) # bar.cursor.restore()
# bar.draw(value=i+1)
# video = cv2.VideoCapture("/home/xinyang/Desktop/Video.mp4") # video = cv2.VideoCapture("/home/xinyang/Desktop/Video.mp4")
# _ = True # _ = True
# while _: # while _:
# _, frame = video.read() # _, frame = video.read()
# cv2.imshow("Video", frame) # cv2.imshow("Video", frame)
# if cv2.waitKey(10) == 113: # k = cv2.waitKey(10)
# if k == ord(" "):
# bbox = cv2.selectROI("frame", frame, False) # bbox = cv2.selectROI("frame", frame, False)
# print(bbox) # print(bbox)
# roi = frame[bbox[1]:bbox[1]+bbox[3], bbox[0]:bbox[0]+bbox[2]] # roi = frame[bbox[1]:bbox[1]+bbox[3], bbox[0]:bbox[0]+bbox[2]]
@@ -131,6 +132,22 @@ def train(dataset, show_bar=False):
# res = sess.run(y, feed_dict={x: roi}) # res = sess.run(y, feed_dict={x: roi})
# res = res.reshape([forward.OUTPUT_NODES]) # res = res.reshape([forward.OUTPUT_NODES])
# print(np.argmax(res)) # print(np.argmax(res))
# elif k==ord("q"):
# break
# keep = True
# while keep:
# n = input()
# im = cv2.imread(n)
# im = cv2.resize(im, (48, 36))
# cv2.imshow("im", im)
# if cv2.waitKey(0) == ord("q"):
# keep = False
# im = im.astype(np.float32)
# im /= 255.0
# im = im.reshape([1, 36, 48, 3])
# res = sess.run(y, feed_dict={x: im})
# res = res.reshape([forward.OUTPUT_NODES])
# print(np.argmax(res))
vars_val = sess.run(vars) vars_val = sess.run(vars)
save_para("/home/xinyang/Desktop/AutoAim/tools/para", vars_val) save_para("/home/xinyang/Desktop/AutoAim/tools/para", vars_val)
@@ -139,5 +156,7 @@ def train(dataset, show_bar=False):
if __name__ == "__main__": if __name__ == "__main__":
dataset = generate.DataSet("/home/xinyang/Desktop/DataSets") print("Loading data sets...")
dataset = generate.DataSet("/home/xinyang/Desktop/DataSets/box")
print("Finish!")
train(dataset, show_bar=True) train(dataset, show_bar=True)

View File

@@ -29,13 +29,13 @@ def max_pool_2x2(x):
CONV1_KERNAL_SIZE = 5 CONV1_KERNAL_SIZE = 5
# 第一层卷积输出通道数 # 第一层卷积输出通道数
CONV1_OUTPUT_CHANNELS = 4 CONV1_OUTPUT_CHANNELS = 6
# 第二层卷积核大小 # 第二层卷积核大小
CONV2_KERNAL_SIZE = 3 CONV2_KERNAL_SIZE = 3
# 第二层卷积输出通道数 # 第二层卷积输出通道数
CONV2_OUTPUT_CHANNELS = 8 CONV2_OUTPUT_CHANNELS = 10
# 第一层全连接宽度 # 第一层全连接宽度
FC1_OUTPUT_NODES = 16 FC1_OUTPUT_NODES = 16

View File

@@ -3,6 +3,9 @@ import os
import cv2 import cv2
import random import random
from forward import OUTPUT_NODES from forward import OUTPUT_NODES
import sys
import os
from tqdm import tqdm
# 原图像行数 # 原图像行数
SRC_ROWS = 36 SRC_ROWS = 36
@@ -12,6 +15,7 @@ SRC_COLS = 48
# 原图像通道数 # 原图像通道数
SRC_CHANNELS = 3 SRC_CHANNELS = 3
class DataSet: class DataSet:
def __init__(self, folder): def __init__(self, folder):
self.train_samples = [] self.train_samples = []
@@ -21,10 +25,14 @@ class DataSet:
self.generate_data_sets(folder) self.generate_data_sets(folder)
def file2nparray(self, name): def file2nparray(self, name):
image = cv2.imread(name) try:
image = cv2.resize(image, (SRC_COLS, SRC_ROWS)) image = cv2.imread(name)
image = image.astype(np.float32) image = cv2.resize(image, (SRC_COLS, SRC_ROWS))
return image / 255.0 image = image.astype(np.float32)
return image / 255.0
except:
print(name)
sys.exit(-1)
def id2label(self, id): def id2label(self, id):
a = np.zeros([OUTPUT_NODES]) a = np.zeros([OUTPUT_NODES])
@@ -36,13 +44,14 @@ class DataSet:
for i in range(OUTPUT_NODES): for i in range(OUTPUT_NODES):
dir = "%s/%d" % (folder, i) dir = "%s/%d" % (folder, i)
files = os.listdir(dir) files = os.listdir(dir)
for file in files: for file in tqdm(files, postfix={"loading id": i}, dynamic_ncols=True):
if random.random() > 0.2: if file[-3:] == "jpg":
self.train_samples.append(self.file2nparray("%s/%s" % (dir, file))) if random.random() > 0.2:
self.train_labels.append(self.id2label(i)) self.train_samples.append(self.file2nparray("%s/%s" % (dir, file)))
else: self.train_labels.append(self.id2label(i))
self.test_samples.append(self.file2nparray("%s/%s" % (dir, file))) else:
self.test_labels.append(self.id2label(i)) self.test_samples.append(self.file2nparray("%s/%s" % (dir, file)))
self.test_labels.append(self.id2label(i))
self.train_samples = np.array(self.train_samples) self.train_samples = np.array(self.train_samples)
self.train_labels = np.array(self.train_labels) self.train_labels = np.array(self.train_labels)
self.test_samples = np.array(self.test_samples) self.test_samples = np.array(self.test_samples)

View File

@@ -1,5 +1,8 @@
#!/bin/sh #!/bin/sh
# usage: monitor.sh "<the exe file's absolute path and its shell parameter>"
# And then when ever the exe shutdonw it will be automatically restart
exe=$1 exe=$1
while true; do while true; do
state=`ps aux | grep "$1" | grep -v grep | grep -v $0` state=`ps aux | grep "$1" | grep -v grep | grep -v $0`

7
tools/para/conv1_b Normal file
View File

@@ -0,0 +1,7 @@
6
0.6241298
1.1128483
0.92715627
2.6803706
-2.4037633
1.6914424

454
tools/para/conv1_w Normal file
View File

@@ -0,0 +1,454 @@
3
6
5
5
-1.8745673
-1.4418055
-0.68810487
-0.42730802
-0.019043377
-2.2401865
-1.5337001
-0.5666739
0.1119876
0.24716255
-2.2945662
-1.4734446
-0.298631
0.19550888
0.45057848
-2.4559898
-1.097164
-0.035884537
0.23402216
0.3693794
-1.7285618
-0.8927671
0.026205042
0.19274746
0.029146997
-1.3690577
-1.2756748
-0.32751036
0.3233031
0.55376107
-1.4835969
-1.3036382
-0.75256515
-0.13608748
0.2254278
-1.6409502
-1.4188147
-1.1627024
-0.62049645
-0.20085949
-2.2059698
-1.7030506
-1.5584862
-1.2325822
-0.6749467
-2.8320985
-2.3289032
-1.811129
-1.6702974
-1.0760157
-1.3135052
-0.90016854
-0.47004116
-0.17118637
-0.2732028
-1.3109291
-0.36519817
-0.10975292
-0.06533194
-0.559026
-0.8616304
-0.06857806
0.19276045
-0.14059812
-0.7283358
-0.57705516
0.20748538
0.26281402
-0.112977654
-0.6980696
-0.44812128
0.40235195
0.26663
-0.10336824
-0.5741328
-0.70127535
-1.1506568
-1.3301972
-1.4370873
-0.9951577
-0.3111034
-0.5350495
-0.78488415
-1.3619742
-1.2252145
0.10870424
-0.044690743
-0.33280057
-1.180621
-1.5130968
0.32003295
0.6245109
0.3391734
-0.45662346
-1.2023503
0.66186905
0.6943321
0.753682
-0.05385303
-0.69504744
-0.86241025
0.05611875
0.7984623
1.4339544
2.0078037
-0.6121641
0.3216552
0.7244501
1.4381241
1.9696213
-0.29659018
0.13415621
0.61756736
1.0113128
1.3834459
0.12413465
0.3135587
0.32853445
0.7981063
0.83142936
-0.004516094
0.32636595
0.55108666
0.6248727
0.60938156
-0.38326544
-1.2629062
-0.385575
0.11398253
0.40000448
-1.0602297
-1.1948771
-0.6945023
-0.4127804
0.029964926
-1.4086407
-1.3599807
-1.3076004
-1.1330422
-0.38810351
-2.1059783
-1.8239182
-1.7029382
-1.4902409
-0.91088384
-3.230572
-2.4590926
-1.9471443
-1.860621
-1.3370123
-0.5690341
-0.33530146
0.31661218
0.8375982
1.1338086
-1.3648574
-0.8348736
0.36666754
1.1275568
1.1844105
-1.8321881
-0.78104144
0.59508055
1.2501543
1.2034286
-1.6087818
-0.6121007
0.693586
1.2163337
1.1292332
-0.6255259
0.0911698
0.78314143
0.9095932
0.5689121
-3.2688649
-1.2751737
0.7530108
1.5721122
2.11933
-2.9633296
-1.3632398
0.11986004
1.1412225
1.8641368
-1.9467463
-0.9146176
-0.10545669
0.49356145
1.3669914
-1.7783622
-0.99905616
-0.28957212
0.13239379
0.9921155
-2.1976538
-1.0333587
-0.3801185
0.021550074
0.5849712
-0.7216267
-0.36925313
-0.5770921
-0.89754397
-0.9315221
-0.17996566
0.5721206
0.46629494
-0.11679081
-0.8407021
0.14923953
1.1722741
1.0859729
-0.08064234
-1.1707838
0.527985
1.556374
1.3262485
0.052869447
-1.0933924
0.8913072
1.8925939
1.1744183
-0.16056827
-0.96226853
-2.0482447
-2.1394062
-2.3160622
-1.5373954
-1.0280651
-1.0137186
-1.1347228
-1.2650911
-1.3904438
-1.4724954
-0.6152145
-0.38191465
-0.6525277
-1.2026839
-1.574993
-0.14897716
0.40652698
0.22212738
-0.7051095
-1.6179065
0.12883945
0.92052716
0.71651196
-0.1521632
-1.3601139
-1.3278087
0.091166034
0.70035547
0.85970676
1.4728521
-0.4685758
0.67533374
1.2041222
0.91583323
1.3638756
-0.21221842
0.46413553
0.6931065
0.5078553
1.0690873
-0.2822384
-0.18992352
-0.30851105
-0.48985106
-0.112165235
-0.6343776
-0.97740346
-1.2637299
-1.1870348
-0.65784734
-2.275478
-1.5841419
0.59182155
1.7027438
2.2658849
-2.0428355
-0.9335362
0.25750664
1.0987146
1.5473177
-0.8157582
-0.23004234
0.3001771
0.6583938
1.0895797
-0.093778014
0.08269198
0.17656319
0.3352879
1.0185977
-0.6558476
0.4106111
0.3651244
0.3434926
0.78885883
0.9312759
0.45665312
0.87845147
1.4286675
1.9387178
0.0055226237
-0.11264928
0.69314396
1.5066721
1.5526584
-0.15990084
0.10977341
0.7288155
1.5179793
1.5454628
0.42554915
0.6133954
1.1112447
1.4276886
1.3272578
1.5569048
1.5756388
1.9869299
1.8189707
1.3973557
-4.249913
-1.9120424
-0.0061387075
0.80639493
1.4316615
-3.410931
-1.7743304
-0.18588163
0.5619047
1.2757853
-2.25766
-1.1736825
-0.47299188
0.38950402
1.098909
-2.850165
-1.7250451
-0.7260333
-0.055943523
0.9642611
-4.005538
-2.295592
-1.041572
-0.24684854
0.6455168
1.1459881
1.4573389
1.4954526
1.2473075
1.0846232
1.2540116
1.9666128
1.9739157
1.2105061
0.7538055
1.2492738
2.14189
1.7544507
0.96942043
0.31504372
1.7381212
2.490894
1.6445026
0.26533163
-0.3193328
2.0120225
2.0718558
0.8759794
0.04767526
-0.41645908
1.2511733
0.5724159
0.37694663
1.2807285
1.8684267
1.8152616
1.280423
1.101077
1.197118
1.5331124
1.7447906
1.6138377
1.4156343
1.0536009
0.8561865
1.9363236
2.2086453
1.6627563
1.021228
0.60839254
2.1018016
2.1533952
1.9573407
1.29546
0.57359654
-0.29376534
0.9012422
1.1789744
0.710556
0.8737443
0.095544085
1.045074
0.9252817
0.471885
0.6031909
-0.2500516
0.14211257
-0.27518043
-1.0673013
-0.845284
-0.7930444
-1.1906688
-2.2155006
-2.8370302
-2.2175434
-0.9103819
-2.3526044
-3.3939815
-3.9634273
-2.9982874
-3.0668538
-1.9301875
0.46062958
1.1481701
1.6189759
-2.693133
-1.3168526
0.39946663
0.777253
1.2958935
-1.7610679
-0.87182975
0.015992796
0.35228586
0.825145
-2.3087604
-1.4618046
-0.49614725
-0.12511182
0.5606166
-3.9921951
-2.422155
-0.9274944
-0.43651518
0.110710315

11
tools/para/conv2_b Normal file
View File

@@ -0,0 +1,11 @@
10
2.4876857
-0.2729608
-2.472103
1.4380744
0.13707557
-0.38399124
-0.10049698
-0.44721037
-0.24111606
-0.05031827

544
tools/para/conv2_w Normal file
View File

@@ -0,0 +1,544 @@
6
10
3
3
1.5020652
0.18993415
0.09683844
0.42478532
0.5652113
-0.09654023
0.46004438
-0.32927218
-1.3090333
-0.03629563
-0.47720632
-0.049615752
-0.13462313
-0.1414031
-0.20201886
0.08700898
-0.2532898
-0.41091815
-2.6467288
-0.91942525
-0.07791335
-1.1988721
-2.5805545
-0.96260583
0.47473067
-3.1096683
-1.7033176
-0.5463688
-0.16640678
-0.23889092
0.92512184
0.56869555
-1.0851349
0.98314923
0.013738053
-1.0819626
-0.10545615
-0.8232357
-1.2379274
0.3877544
-0.053305604
-0.69254845
0.5536063
0.8405918
-0.27907613
-0.03274563
0.10089845
-0.4718397
-0.2080956
-0.19937462
-0.22588687
-0.10825909
-0.25839245
-0.13016544
-0.21170974
-0.105000235
-0.055992927
-0.24181439
-0.14309813
0.055603288
-0.20947735
-0.13805705
-0.011289219
-3.1311834
-0.7373151
2.1412795
-2.7957354
-0.53299326
1.4910551
-0.67892796
0.061242625
1.0142266
-0.30210808
-0.22511297
-0.34764558
-0.44355592
-0.23233292
-0.3309362
-0.19372638
-0.44694182
-0.26614943
-0.1855974
-0.113576986
-0.09121944
-0.13158984
0.012073785
-0.06931659
-0.13569477
-0.044836458
-0.21612994
0.3297727
-1.3531494
0.1984134
1.9814707
0.9562245
0.39023614
2.355978
1.9520823
0.09500724
-0.14697555
-0.2695747
-0.19498226
-0.19924545
-0.23994629
-0.2738438
0.03253718
-0.4405975
-0.120104544
-4.3073807
0.2020275
-0.5503787
-4.320714
-0.7776511
1.1284349
-2.5597017
-0.79974496
2.3943193
-2.4705906
-0.67554355
-0.7746615
-0.21265095
-1.4163647
0.50921655
0.8470739
-0.40889522
1.4251903
-0.79344493
-1.0633
-0.43276837
-0.35594717
-0.925617
-0.16571444
0.48405877
-0.060691416
-0.36661333
-0.081582114
0.05866104
-0.27885157
0.020201556
0.08026292
-0.2612855
-0.16771607
-0.07217326
-0.22424023
-0.05045426
-0.11125194
0.12680489
-0.3215598
-0.19570999
-0.06906672
-0.3656599
-0.21287394
0.08601797
0.88221467
1.8111526
2.5901568
0.49841857
0.7406666
1.9325773
-0.56068546
-0.5544755
1.1572238
-0.3588475
-0.16109748
-0.11979289
-0.208714
-0.22023945
-0.048370343
-0.24384555
-0.41836953
-0.16143581
-0.08112425
0.12876861
-0.18439032
-0.16903366
-0.15317251
-0.14610882
-0.02121364
-0.03730557
-0.06588184
-1.573095
-2.1102138
-2.791767
-1.2839516
0.18364334
-1.0566423
-2.936175
1.3333176
-2.569022
-0.19243743
-0.5396632
-0.39073667
-0.08940771
-0.41599658
-0.21406165
-0.11914874
0.0053107874
-0.34026533
-0.19902867
-1.5525646
-1.4867154
0.7785492
-0.07427133
-1.8370575
1.3299376
1.0611509
-1.457465
-0.34795722
0.1933098
0.38095564
-0.49252924
0.86735547
0.3377935
-0.5835429
0.46118125
0.09202047
-0.64125884
-1.0138168
-1.4562032
-0.34383684
-0.2197565
-0.55936724
-0.72665596
-0.055117708
-0.032901403
-0.2976792
-0.32156548
-0.30981004
-0.23365386
-0.56748354
-0.39124587
0.0584696
-0.52749497
-0.40699643
-0.1940885
-0.037750658
-0.14615804
-0.11365478
-0.07085398
-0.09038009
-0.16512215
-0.07511696
-0.40074205
-5.1477885
-2.3127253
0.6868194
-4.8400707
-0.8838848
0.84697765
-2.9693027
0.90324074
1.5448984
-0.06254911
-0.23538658
-0.098100856
-0.22640543
-0.3093498
-0.3921947
-0.4127525
-0.19800858
-0.30706027
-0.023742901
-0.012547765
-0.022648895
0.033385832
-0.16520245
-0.08068707
-0.15606274
-0.01918419
-0.20760387
0.4380362
0.7704153
-3.7217038
0.3071281
0.5547072
-2.9204123
-0.7863632
-0.3218954
-4.08438
-0.1704269
-0.48522842
-0.34706044
-0.06454638
-0.14191426
-0.5201403
-0.10787962
0.1142594
-0.3869569
0.09657354
-1.4832062
-3.2396731
0.3072946
-0.38548103
-3.8164542
-0.50314766
-0.033530306
-3.1886842
0.66873956
1.6643683
0.99080354
-1.2877836
0.71671844
0.4645308
-2.2703633
-0.9974806
-0.42078534
-0.30584887
-0.93159604
-1.2055197
-0.3104198
-0.23621848
-0.77678233
-0.7545622
-0.39329994
-0.19829883
-0.18581958
-0.10274275
-0.21223308
-0.22801906
-0.10956713
-0.15408704
-0.22964376
-0.21038757
0.003134985
-0.087081514
-0.20077498
-0.13176169
0.10705288
-0.16764928
-0.047713023
-0.25014165
-0.39079958
-0.3011907
-3.5580482
-1.8545792
0.1256421
-3.7077072
-1.3029686
-0.005157275
-3.2010386
0.38178772
0.9837942
-0.068351015
-0.36667752
-0.20250086
-0.40076578
-0.42409518
-0.25450817
-0.37642953
-0.17545642
-0.37250796
-0.11730237
-0.03561523
-0.03951029
-0.18142352
0.0054535097
-0.1708318
0.15000097
-0.055385202
-0.19415462
-0.40723643
-0.079323746
0.60454637
-0.84041554
0.23971762
1.2219191
-1.6282345
-0.6933169
0.40344524
0.08663297
-0.38227516
-0.5032992
-0.41386464
-0.44355136
-0.35756576
-0.40863183
-0.40098286
-0.36941025
-0.9236331
0.32647514
0.35148832
-1.0944152
0.6073528
0.9087426
-1.6470383
0.4317713
1.2342584
0.43612233
-0.62993884
0.2974378
-0.6633325
-0.67800444
1.0921708
-2.6063566
-2.0205736
0.17532487
-0.7795648
-0.5008028
-0.7370313
-0.35221562
-0.33727354
-0.17583118
-0.05256289
-0.16688262
-0.19191936
-0.46429542
-0.5084472
-0.457363
-0.20768711
-0.41373605
-0.48311797
-0.24757653
-0.31921867
-0.39365336
-0.321992
-0.28978324
-0.20284106
-0.1297369
-0.34363598
-0.2521751
-0.34354624
-0.25759906
-0.3418701
-3.4949255
-4.531625
-1.5090456
-4.0302067
-4.504042
-0.590934
-7.9731874
-6.7120776
-2.1059375
-0.12758178
-0.058909506
-0.18952405
-0.004923893
-0.06919461
-0.030514337
-0.0762774
-0.023049993
-0.12789033
-0.026053552
-0.027134173
-0.16900522
-0.02314374
-0.13830115
-0.018906182
-0.06166276
-0.115819514
0.029891966
0.78294903
-0.24488732
-0.39234003
2.2506793
1.2096143
-0.10086763
3.1884897
2.3008416
0.40546918
-0.2163068
-0.3414486
-0.098043695
-0.016555157
-0.1231604
0.1327601
0.10635556
-0.21275902
-0.07835169
-3.02146
1.3674593
0.614203
-3.471883
0.30260587
1.7752177
-1.9685831
0.28805226
2.9171088
-2.77233
-0.7610864
-2.173954
-0.9739102
-0.8951448
-0.7348445
-0.13843127
-2.7553678
-4.037929
-0.40669936
-0.55984896
-0.56030476
-0.38789842
-0.40184727
-0.11818772
0.5288938
-0.14943306
-0.30072457
0.09072567
-0.20110369
-0.10526498
-0.05925854
-0.1908625
0.01648614
-0.07096718
-0.036369618
-0.15528911
-0.11626164
0.047128793
-0.035411496
0.03015979
-0.10536637
-0.09063028
0.069158494
-0.055972695
-0.02230821
1.619881
2.5068073
2.1708288
1.8902549
2.1950085
2.1109314
1.0464481
1.3082289
1.6681985
-0.45436555
-0.39643508
-0.13680391
-0.22465855
-0.33752236
-0.37145287
-0.5340985
-0.23784201
-0.42311898
-0.12219668
0.012118651
-0.06717292
-0.056408852
-0.14742865
0.10230494
0.06558793
0.027565224
0.071604334

17
tools/para/fc1_b Normal file
View File

@@ -0,0 +1,17 @@
16
6.674671
-0.4621555
-0.35395312
-6.140842
-0.6383096
-0.0026992396
-0.105528705
-0.12171911
-0.039757866
-4.064281
-0.36199543
-0.06976157
-0.042993866
0.0015301058
-0.06826296
-0.0050806464

11202
tools/para/fc1_w Normal file

File diff suppressed because it is too large Load Diff

5
tools/para/fc2_b Normal file
View File

@@ -0,0 +1,5 @@
4
6.171619
-1.5262855
-4.09489
-2.3815227

66
tools/para/fc2_w Normal file
View File

@@ -0,0 +1,66 @@
16
4
0.70240104
-0.058500186
-0.23156737
-0.33127818
-3.6112761e-34
-3.3890292e-34
9.363116e-34
4.0197816e-34
-0.2575022
0.69736814
-0.2684227
-0.08991088
-0.3760809
-0.065089576
0.45981047
0.008204719
-4.8556375e-34
4.816393e-34
3.872484e-34
5.096778e-34
1.7445673e-19
1.2270845e-33
-2.260416e-25
1.0369542e-20
4.00948e-34
-5.999333e-34
3.7143163e-34
-4.228372e-34
-1.0954501e-34
-2.7085206e-34
8.016929e-34
9.2079354e-35
-3.945864e-34
1.98814e-34
2.3972646e-34
3.942207e-34
-0.14058167
-0.07198931
-0.38025984
0.5981627
4.3956684e-34
3.1032594e-34
3.4351758e-34
5.5414507e-34
-1.248324e-34
8.8546844e-35
6.8084945e-34
-1.1866068e-34
-3.865728e-34
1.8786859e-34
3.3450276e-34
-2.8077459e-34
0.0013890187
0.026067872
0.0082543865
-0.02225164
2.0089658e-34
-6.1273506e-34
-6.228039e-34
-5.0242814e-34
-4.3343494e-34
3.0939117e-34
1.2827092e-34
-4.305108e-34