From d0f044e023f500113c13c3c1f31d6cac39570095 Mon Sep 17 00:00:00 2001 From: Jonas Heinrich Date: Tue, 21 Jun 2016 19:25:22 +0200 Subject: [PATCH 1/2] Prepared repo for combination added COMBINE flag around local mains Reworked the global CMake to detect all files and libraries added global main --- CMakeLists.txt | 81 ++++++++++++++++++++++---------- src/ObjectDetection/main.cpp | 2 + src/ScenarioAnalysation/main.cpp | 4 +- src/StreamDecoder/main.cpp | 4 +- src/caf/protobuf_broker.cpp | 3 ++ src/main.cpp | 29 ++++++++++++ 6 files changed, 97 insertions(+), 26 deletions(-) create mode 100644 src/main.cpp diff --git a/CMakeLists.txt b/CMakeLists.txt index caa9075..b639792 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,46 +1,79 @@ cmake_minimum_required (VERSION 2.8) project(AutoDrive) set (OUTPUT_NAME AutoDrive) - -#add_subdirectory(src/StreamDecoder/HDFDecoder) -#add_subdirectory(src/StreamDecoder/ProtobufDeserializer) +add_definitions(-std=c++11) +SET(CAF_COMPILE_FLAGS "-lcaf_io -lcaf_core") +add_definitions(${CAF_COMPILE_FLAGS}) set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin) add_subdirectory(src/ScenarioAnalysation) add_subdirectory(src/ObjectDetection) add_subdirectory(src/caf) +add_subdirectory(src/StreamDecoder) -#add_subdirectory(src/StreamDecoder/DecompressionExample) -#add_subdirectory(src/StreamDecoder/FrameSelector) -add_subdirectory(src/StreamDecoder) +file(GLOB_RECURSE sources0 "./src/ScenarioAnalysation/*.cpp") +file(GLOB_RECURSE headers0 "./src/ScenarioAnalysation/*.h") + +file(GLOB_RECURSE sources1 "./src/ObjectDetection/*.cpp") +file(GLOB_RECURSE headers1 "./src/ObjectDetection/*.h") + +file(GLOB_RECURSE sources2 "./src/StreamDecoder/*.cpp") +file(GLOB_RECURSE sourcesc2 "./src/StreamDecoder/*.cc") +file(GLOB_RECURSE headers2 "./src/StreamDecoder/*.h") +file(GLOB_RECURSE sources3 "./src/caf/*.cpp") +file(GLOB_RECURSE sourcesc3 "./src/caf/*.cc") +file(GLOB_RECURSE headers3 "./src/caf/*.h") +LIST(APPEND sources ${sources0} ${sources1} ${sources2} ${sourcesc2} ${sources3} ${sourcesc3} + #src/ObjectDetection/element.cpp + #src/ObjectDetection/frame_detection_data.cpp + #src/StreamDecoder/image.cpp + #src/StreamDecoder/image_view.cpp +) + +LIST(APPEND headers ${headers0} ${headers1} ${header2} ${headers3} + #src/ObjectDetection/element.h + #src/ObjectDetection/frame_detection_data.h + #src/StreamDecoder/image.h + #src/StreamDecoder/image_view.h + + +) +file(GLOB_RECURSE sourcesc "./src/*.cc") file(GLOB_RECURSE sources "./src/*.cpp") file(GLOB_RECURSE headers "./src/*.h") +#protobuf +include(FindProtobuf) +find_package(Protobuf REQUIRED) +include_directories(${PROTOBUF_INCLUDE_DIR}) + #opencv -#find_package( OpenCV ) -#if(OpenCV_FOUND) -#include_directories( ${OpenCV_INCLUDE_DIRS} ) -#set(LINK_LIBS ${LINK_LIBS} ${OpenCV_LIBS}) -#else(OpenCV_FOUND) -#message(SEND_ERROR "OpenCV not found") -#endif(OpenCV_FOUND) +find_package( OpenCV ) +if(OpenCV_FOUND) + include_directories( ${OpenCV_INCLUDE_DIRS} ) + set(LINK_LIBS ${LINK_LIBS} ${OpenCV_LIBS}) +else(OpenCV_FOUND) + message(SEND_ERROR "OpenCV not found") +endif(OpenCV_FOUND) #hdf5 -#find_package (HDF5) -#if(HDF5_FOUND) -#set(LINK_LIBS ${LINK_LIBS} ${HDF5_C_STATIC_LIBRARY} ${HDF5_C_LIBRARIES}) -#include_directories(${HDF5_INCLUDE_DIR}) -#else(HDF5_FOUND) -#message(SEND_ERROR "HDF5 was not Found") -#endif(HDF5_FOUND) - -#add_executable(${OUTPUT_NAME} ${sources} ${headers}) -#target_link_libraries(${OUTPUT_NAME} ${LINK_LIBS} -lhdf5_cpp -lhdf5) -#target_link_libraries(${OUTPUT_NAME} proto ${PROTOBUF_LIBRARY}) +find_package (HDF5) +if(HDF5_FOUND) + set(LINK_LIBS ${LINK_LIBS} ${HDF5_C_STATIC_LIBRARY} ${HDF5_C_LIBRARIES}) + include_directories(${HDF5_INCLUDE_DIR}) +else(HDF5_FOUND) + message(SEND_ERROR "HDF5 was not Found") +endif(HDF5_FOUND) + +add_definitions(-D COMBINE) +add_executable(${OUTPUT_NAME} ${sources} ${headers} ${sourcesc}) +target_link_libraries(${OUTPUT_NAME} ${LINK_LIBS} -lhdf5_cpp -lhdf5) +target_link_libraries(${OUTPUT_NAME} ${PROTOBUF_LIBRARY}) +target_link_libraries(${OUTPUT_NAME} ${PROTOBUF_LIBRARY} ${CMAKE_THREAD_LIBS_INIT} -lcaf_io -lcaf_core) diff --git a/src/ObjectDetection/main.cpp b/src/ObjectDetection/main.cpp index a26cdeb..ac1e92c 100644 --- a/src/ObjectDetection/main.cpp +++ b/src/ObjectDetection/main.cpp @@ -20,7 +20,9 @@ // License along with this program. If not, see // . +#ifndef COMBINE int main(int argc, const char * argv[]) { return 0; } +#endif \ No newline at end of file diff --git a/src/ScenarioAnalysation/main.cpp b/src/ScenarioAnalysation/main.cpp index abd9d0b..8cbd914 100644 --- a/src/ScenarioAnalysation/main.cpp +++ b/src/ScenarioAnalysation/main.cpp @@ -36,7 +36,7 @@ using namespace std; - +#ifndef COMBINE int main(int argc, const char* argv[]) { if (argc > 1 ){ @@ -105,3 +105,5 @@ int main(int argc, const char* argv[]) { return 0; } + +#endif \ No newline at end of file diff --git a/src/StreamDecoder/main.cpp b/src/StreamDecoder/main.cpp index f63f03e..795c8ec 100644 --- a/src/StreamDecoder/main.cpp +++ b/src/StreamDecoder/main.cpp @@ -31,7 +31,7 @@ using namespace std; - +#ifndef COMBINE int main(int argc, const char* argv[]) { if (argc > 3 || argc == 1){ @@ -65,3 +65,5 @@ int main(int argc, const char* argv[]) { return 0; } + +#endif \ No newline at end of file diff --git a/src/caf/protobuf_broker.cpp b/src/caf/protobuf_broker.cpp index 400ffc5..20063a8 100644 --- a/src/caf/protobuf_broker.cpp +++ b/src/caf/protobuf_broker.cpp @@ -211,6 +211,7 @@ void ProtoAgent::startServer (uint16_t port) { shutdown(); } +#ifndef COMBINE int main(int argc, char** argv) { // Parsing arguments message_builder{argv + 1, argv + argc}.apply({ @@ -231,3 +232,5 @@ int main(int argc, char** argv) { } }); } + +#endif \ No newline at end of file diff --git a/src/main.cpp b/src/main.cpp new file mode 100644 index 0000000..39ea922 --- /dev/null +++ b/src/main.cpp @@ -0,0 +1,29 @@ +// +// Projectname: amos-ss16-proj5 +// +// Copyright (c) 2016 de.fau.cs.osr.amos2016.gruppe5 +// +// This file is part of the AMOS Project 2016 @ FAU +// (Friedrich-Alexander University Erlangen-Nürnberg) +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as +// published by the Free Software Foundation, either version 3 of the +// License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public +// License along with this program. If not, see +// . + + +/* +* This is the global main for our project +*/ +int main(int argc, const char * argv[]) { + return 0; +} From 751075bccc80ab38de8caa3081c2660204e65ebe Mon Sep 17 00:00:00 2001 From: Jonas Heinrich Date: Tue, 21 Jun 2016 21:36:32 +0200 Subject: [PATCH 2/2] Combined CarCommunication with the framedetection added new main to ProcessControl renamed caf dir to CarCommunication integrated communication into the Control class --- CMakeLists.txt | 34 +------- src/{caf => CarCommunication}/CMakeLists.txt | 2 +- src/{caf => CarCommunication}/Makefile | 0 src/{caf => CarCommunication}/message.pb.cc | 0 src/{caf => CarCommunication}/message.pb.h | 0 src/{caf => CarCommunication}/message.proto | 0 src/{caf => CarCommunication}/pbbroker | Bin .../protoagent.cpp} | 2 +- .../protoagent.h} | 6 +- src/ProcessControl/controller.cpp | 12 ++- src/ProcessControl/controller.h | 2 +- src/ProcessControl/main.cpp | 81 ++++++++++++++++++ src/main.cpp | 29 ------- 13 files changed, 98 insertions(+), 70 deletions(-) rename src/{caf => CarCommunication}/CMakeLists.txt (88%) rename src/{caf => CarCommunication}/Makefile (100%) rename src/{caf => CarCommunication}/message.pb.cc (100%) rename src/{caf => CarCommunication}/message.pb.h (100%) rename src/{caf => CarCommunication}/message.proto (100%) rename src/{caf => CarCommunication}/pbbroker (100%) mode change 100755 => 100644 rename src/{caf/protobuf_broker.cpp => CarCommunication/protoagent.cpp} (99%) rename src/{caf/protobuf_broker.h => CarCommunication/protoagent.h} (93%) create mode 100644 src/ProcessControl/main.cpp delete mode 100644 src/main.cpp diff --git a/CMakeLists.txt b/CMakeLists.txt index b639792..c8a6b5b 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -8,41 +8,9 @@ add_definitions(${CAF_COMPILE_FLAGS}) set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin) add_subdirectory(src/ScenarioAnalysation) add_subdirectory(src/ObjectDetection) -add_subdirectory(src/caf) +add_subdirectory(src/CarCommunication) add_subdirectory(src/StreamDecoder) - - -file(GLOB_RECURSE sources0 "./src/ScenarioAnalysation/*.cpp") -file(GLOB_RECURSE headers0 "./src/ScenarioAnalysation/*.h") - -file(GLOB_RECURSE sources1 "./src/ObjectDetection/*.cpp") -file(GLOB_RECURSE headers1 "./src/ObjectDetection/*.h") - -file(GLOB_RECURSE sources2 "./src/StreamDecoder/*.cpp") -file(GLOB_RECURSE sourcesc2 "./src/StreamDecoder/*.cc") -file(GLOB_RECURSE headers2 "./src/StreamDecoder/*.h") - -file(GLOB_RECURSE sources3 "./src/caf/*.cpp") -file(GLOB_RECURSE sourcesc3 "./src/caf/*.cc") -file(GLOB_RECURSE headers3 "./src/caf/*.h") - -LIST(APPEND sources ${sources0} ${sources1} ${sources2} ${sourcesc2} ${sources3} ${sourcesc3} - #src/ObjectDetection/element.cpp - #src/ObjectDetection/frame_detection_data.cpp - #src/StreamDecoder/image.cpp - #src/StreamDecoder/image_view.cpp - -) - -LIST(APPEND headers ${headers0} ${headers1} ${header2} ${headers3} - #src/ObjectDetection/element.h - #src/ObjectDetection/frame_detection_data.h - #src/StreamDecoder/image.h - #src/StreamDecoder/image_view.h - - -) file(GLOB_RECURSE sourcesc "./src/*.cc") file(GLOB_RECURSE sources "./src/*.cpp") file(GLOB_RECURSE headers "./src/*.h") diff --git a/src/caf/CMakeLists.txt b/src/CarCommunication/CMakeLists.txt similarity index 88% rename from src/caf/CMakeLists.txt rename to src/CarCommunication/CMakeLists.txt index 963390c..6a5ebe9 100644 --- a/src/caf/CMakeLists.txt +++ b/src/CarCommunication/CMakeLists.txt @@ -16,6 +16,6 @@ else(PROTOBUF_FOUND) message(SEND_ERROR "Protobuff NOT found") endif(PROTOBUF_FOUND) -ADD_EXECUTABLE(${OUTPUT_NAME} protobuf_broker.cpp ${PROTO_HEADER} ${PROTO_SRC}) +ADD_EXECUTABLE(${OUTPUT_NAME} protoagent.cpp ${PROTO_HEADER} ${PROTO_SRC}) target_link_libraries(${OUTPUT_NAME} ${PROTOBUF_LIBRARY} ${CMAKE_THREAD_LIBS_INIT} -lcaf_io -lcaf_core) diff --git a/src/caf/Makefile b/src/CarCommunication/Makefile similarity index 100% rename from src/caf/Makefile rename to src/CarCommunication/Makefile diff --git a/src/caf/message.pb.cc b/src/CarCommunication/message.pb.cc similarity index 100% rename from src/caf/message.pb.cc rename to src/CarCommunication/message.pb.cc diff --git a/src/caf/message.pb.h b/src/CarCommunication/message.pb.h similarity index 100% rename from src/caf/message.pb.h rename to src/CarCommunication/message.pb.h diff --git a/src/caf/message.proto b/src/CarCommunication/message.proto similarity index 100% rename from src/caf/message.proto rename to src/CarCommunication/message.proto diff --git a/src/caf/pbbroker b/src/CarCommunication/pbbroker old mode 100755 new mode 100644 similarity index 100% rename from src/caf/pbbroker rename to src/CarCommunication/pbbroker diff --git a/src/caf/protobuf_broker.cpp b/src/CarCommunication/protoagent.cpp similarity index 99% rename from src/caf/protobuf_broker.cpp rename to src/CarCommunication/protoagent.cpp index 20063a8..e07193f 100644 --- a/src/caf/protobuf_broker.cpp +++ b/src/CarCommunication/protoagent.cpp @@ -23,7 +23,7 @@ // . // -#include "protobuf_broker.h" +#include "protoagent.h" void ProtoAgent::print_on_exit(const actor& hdl, const std::string& name) { hdl->attach_functor([=](abstract_actor* ptr, uint32_t reason) { diff --git a/src/caf/protobuf_broker.h b/src/CarCommunication/protoagent.h similarity index 93% rename from src/caf/protobuf_broker.h rename to src/CarCommunication/protoagent.h index 98fe182..ac6c71b 100644 --- a/src/caf/protobuf_broker.h +++ b/src/CarCommunication/protoagent.h @@ -57,14 +57,14 @@ class ProtoAgent { * @param port Specified port for communication * @param hsot Hostname for connection to server */ - void startClient (uint16_t port, const string& host); + static void startClient (uint16_t port, const string& host); /** * starts the server. * * @param port Specified port for communication */ - void startServer (uint16_t port); + static void startServer (uint16_t port); /** * utility function to print an exit message with custom name. @@ -73,7 +73,7 @@ class ProtoAgent { * @param name Actor name */ - void print_on_exit(const actor& hdl, const std::string& name); + static void print_on_exit(const actor& hdl, const std::string& name); /** diff --git a/src/ProcessControl/controller.cpp b/src/ProcessControl/controller.cpp index 9d43da2..6fdc234 100644 --- a/src/ProcessControl/controller.cpp +++ b/src/ProcessControl/controller.cpp @@ -34,7 +34,7 @@ #include "../ScenarioAnalysation/humans_in_front_of_bus_scenario.h" #include "../ScenarioAnalysation/analyser.h" #include "controller.h" - +#include "../CarCommunication/protoagent.h" //define keys const int KEY_ESC = 27; @@ -54,7 +54,7 @@ void Controller::PlayAsVideo(std::string videofile) { } } -void Controller::AnalyseVideo(std::string videofile) { +void Controller::AnalyseVideo(std::string videofile, uint16_t port, std::string host) { ImageView image_view; FrameSelectorFactory frame_selector_factory(videofile); FrameSelector* pipeline = frame_selector_factory.GetFrameSelector(); @@ -95,6 +95,14 @@ void Controller::AnalyseVideo(std::string videofile) { // for demo: show information about scenario in current frame std::cout << "Current detected scenario: " << scenario->GetScenarioInformation() << " in frame: " << i << std::endl; + #ifdef COMBINE + //Notifying other car + if(port!=0) + { + std::cout << "Informing other car" << std::endl; + ProtoAgent::startClient(port,host); + } + #endif } int key = cvWaitKey(10); diff --git a/src/ProcessControl/controller.h b/src/ProcessControl/controller.h index 7619d70..568b4a6 100644 --- a/src/ProcessControl/controller.h +++ b/src/ProcessControl/controller.h @@ -45,7 +45,7 @@ class Controller{ * *@param videofile path to the video file */ - void AnalyseVideo(std::string videofile); + void AnalyseVideo(std::string videofile, uint16_t port = 0, std::string host = ""); /** * Saves all images as jepg to disc diff --git a/src/ProcessControl/main.cpp b/src/ProcessControl/main.cpp new file mode 100644 index 0000000..c15d734 --- /dev/null +++ b/src/ProcessControl/main.cpp @@ -0,0 +1,81 @@ +// +// Projectname: amos-ss16-proj5 +// +// Copyright (c) 2016 de.fau.cs.osr.amos2016.gruppe5 +// +// This file is part of the AMOS Project 2016 @ FAU +// (Friedrich-Alexander University Erlangen-Nürnberg) +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as +// published by the Free Software Foundation, either version 3 of the +// License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public +// License along with this program. If not, see +// . + + +/* +* This is the global main for our project +*/ +#include "caf/all.hpp" +#include "caf/io/all.hpp" + +#include +#include "controller.h" +#include "../CarCommunication/protoagent.h" +using namespace std; + +static bool +str_to_uint16(const char *str, uint16_t *res) +{ + char *end; + errno = 0; + intmax_t val = strtoimax(str, &end, 10); + if (errno == ERANGE || val < 0 || val > UINT16_MAX || end == str || *end != '\0') + return false; + *res = (uint16_t) val; + return true; +} + +int main(int argc, const char * argv[]) { + + if(argc == 2){ + uint16_t port; + if(str_to_uint16(argv[1],&port)) + { + ProtoAgent::startServer(port); + } + else + { + cerr << "Could not read port" << endl; + } + }else if(argc = 4) + { + uint16_t port; + if(str_to_uint16(argv[1],&port)) + { + Controller controller; + controller.AnalyseVideo(argv[3],port,argv[2]); + } + else + { + cerr << "Could not read port" << endl; + } + + } + else + { + cerr << "Usage: " << " PORT (SERVER_IP_ADRESS FULL_PATH_TO_HDF5_FILE)" << endl; + return -1; + } + + + return 0; +} diff --git a/src/main.cpp b/src/main.cpp deleted file mode 100644 index 39ea922..0000000 --- a/src/main.cpp +++ /dev/null @@ -1,29 +0,0 @@ -// -// Projectname: amos-ss16-proj5 -// -// Copyright (c) 2016 de.fau.cs.osr.amos2016.gruppe5 -// -// This file is part of the AMOS Project 2016 @ FAU -// (Friedrich-Alexander University Erlangen-Nürnberg) -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as -// published by the Free Software Foundation, either version 3 of the -// License, or (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public -// License along with this program. If not, see -// . - - -/* -* This is the global main for our project -*/ -int main(int argc, const char * argv[]) { - return 0; -}