diff --git a/.vscode/c_cpp_properties.json b/.vscode/c_cpp_properties.json index 1376527..fb92640 100644 --- a/.vscode/c_cpp_properties.json +++ b/.vscode/c_cpp_properties.json @@ -5,6 +5,7 @@ "includePath": [ "${workspaceFolder}/**", "/opt/pleora/ebus_sdk/Ubuntu-x86_64/include/**", + "/usr/include/x86_64-linux-gnu/qt5/**", "/usr/local/include/opencv4/**" ], "defines": [], diff --git a/.vscode/settings.json b/.vscode/settings.json index 0cba2e6..d0f6cb6 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -1,5 +1,60 @@ { "files.associations": { - "iostream": "cpp" + "iostream": "cpp", + "qudpsocket": "cpp", + "array": "cpp", + "atomic": "cpp", + "*.tcc": "cpp", + "cctype": "cpp", + "chrono": "cpp", + "clocale": "cpp", + "cmath": "cpp", + "complex": "cpp", + "condition_variable": "cpp", + "cstdarg": "cpp", + "cstddef": "cpp", + "cstdint": "cpp", + "cstdio": "cpp", + "cstdlib": "cpp", + "cstring": "cpp", + "ctime": "cpp", + "cwchar": "cpp", + "cwctype": "cpp", + "deque": "cpp", + "list": "cpp", + "unordered_map": "cpp", + "vector": "cpp", + "exception": "cpp", + "algorithm": "cpp", + "functional": "cpp", + "iterator": "cpp", + "map": "cpp", + "memory": "cpp", + "memory_resource": "cpp", + "numeric": "cpp", + "optional": "cpp", + "ratio": "cpp", + "set": "cpp", + "string": "cpp", + "string_view": "cpp", + "system_error": "cpp", + "tuple": "cpp", + "type_traits": "cpp", + "utility": "cpp", + "fstream": "cpp", + "initializer_list": "cpp", + "iomanip": "cpp", + "iosfwd": "cpp", + "istream": "cpp", + "limits": "cpp", + "mutex": "cpp", + "new": "cpp", + "ostream": "cpp", + "sstream": "cpp", + "stdexcept": "cpp", + "streambuf": "cpp", + "thread": "cpp", + "cinttypes": "cpp", + "typeinfo": "cpp" } } \ No newline at end of file diff --git a/CMakeLists.txt b/CMakeLists.txt index 7ef3f2b..5edddab 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -5,18 +5,19 @@ set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${CMAKE_CURRENT_SOURCE_DIR}/cmake) find_package( OpenCV REQUIRED ) find_package( Ebus REQUIRED ) -find_package( Qt5 COMPONENTS Widgets REQUIRED ) +find_package( Qt5 COMPONENTS Widgets Network REQUIRED ) include_directories( ${OpenCV_INCLUDE_DIRS} ${Ebus_INCLUDE_DIRS} ${Qt5Widgets_INCLUDE_DIRS} + ${Qt5Network_INCLUDE_DIRS} ) add_executable( FaultFinder FaultFinder.cpp StreamManager.cpp - ImageAnalyzer.cpp + ImageManager.cpp FaultManager.cpp ) @@ -24,4 +25,6 @@ target_link_libraries( FaultFinder ${OpenCV_LIBS} ${Ebus_LIBRARIES} ${Qt5Widgets_LIBRARIES} + ${Qt5Network_LIBRARIES} ) +message( ${Qt5Network_INCLUDE_DIRS} ) \ No newline at end of file diff --git a/FaultFinder.cpp b/FaultFinder.cpp index b309469..b858431 100644 --- a/FaultFinder.cpp +++ b/FaultFinder.cpp @@ -1,7 +1,7 @@ #include #include "StreamManager.hpp" -#include "ImageAnalyzer.hpp" +#include "ImageManager.hpp" #include "FaultManager.hpp" using namespace std; @@ -9,7 +9,7 @@ using namespace std; int main(int argc, char **argv) { StreamManager stream_mgr; - ImageAnalyzer analyzer; + ImageManager image_mgr; FaultManager fault_mgr; PvString lConnectionID; @@ -18,7 +18,7 @@ int main(int argc, char **argv) { while(1) { - if (!analyzer.ProcessImage(0, 0, 0, fault_mgr, true)) + if (!image_mgr.ProcessImage(0, 0, 0, fault_mgr, true)) break; } return 0; @@ -37,7 +37,7 @@ int main(int argc, char **argv) stream_mgr.OpenStream(lConnectionID); - stream_mgr.AcquireImages(analyzer, fault_mgr); + stream_mgr.AcquireImages(image_mgr, fault_mgr); stream_mgr.Disconnect(); diff --git a/ImageAnalyzer.hpp b/ImageAnalyzer.hpp deleted file mode 100644 index c7d9963..0000000 --- a/ImageAnalyzer.hpp +++ /dev/null @@ -1,22 +0,0 @@ -#ifndef IMAGEANALYZER_H -#define IMAGEANALYZER_H - -#include -#include "FaultManager.hpp" - -#define THROTTLE_AMOUNT 1 - -class ImageAnalyzer -{ - -public: - - bool ProcessImage(uint32_t width, uint32_t height, uint8_t *imgPointer, FaultManager fault_mgr, bool test); - -private: - - int throttle_count = 1; - -}; - -#endif \ No newline at end of file diff --git a/ImageAnalyzer.cpp b/ImageManager.cpp similarity index 84% rename from ImageAnalyzer.cpp rename to ImageManager.cpp index c989612..9e1ecba 100644 --- a/ImageAnalyzer.cpp +++ b/ImageManager.cpp @@ -3,7 +3,7 @@ #include #include -#include "ImageAnalyzer.hpp" +#include "ImageManager.hpp" #include "FaultManager.hpp" #define ZERO 0 @@ -15,7 +15,7 @@ using namespace cv; Mat testFrame = imread("/home/midstate/Documents/flirTest.tif", CV_16UC1); -bool ImageAnalyzer::ProcessImage(uint32_t width, uint32_t height, uint8_t *imgPointer, FaultManager fault_mgr, bool test = false) +bool ImageManager::ProcessImage(uint32_t width, uint32_t height, uint8_t *imgPointer, FaultManager fault_mgr, bool test = false) { Mat frame, mask, viewfinder; std::vector> contours; @@ -84,5 +84,17 @@ bool ImageAnalyzer::ProcessImage(uint32_t width, uint32_t height, uint8_t *imgPo return false; } + // Send image to other servers + SendImage(viewfinder); + return true; +} + +void ImageManager::SendImage(Mat image) +{ + std::vector buff; + cv::imencode(".jpg", image, buff); + + QByteArray *datagram = new QByteArray(reinterpret_cast(buff.data()), buff.size()); + socket->write(*datagram); } \ No newline at end of file diff --git a/ImageManager.hpp b/ImageManager.hpp new file mode 100644 index 0000000..03eb088 --- /dev/null +++ b/ImageManager.hpp @@ -0,0 +1,31 @@ +#ifndef ImageManager_H +#define ImageManager_H + +#include +#include +#include "FaultManager.hpp" + +#define THROTTLE_AMOUNT 1 + +class ImageManager +{ + +public: + + bool ProcessImage(uint32_t width, uint32_t height, uint8_t *imgPointer, FaultManager fault_mgr, bool test); + void SendImage(cv::Mat image); + + QUdpSocket *socket; + + ImageManager() { + socket = new QUdpSocket(); + socket->connectToHost(QHostAddress::LocalHost, 40000, QIODevice::ReadWrite); + } + +private: + + int throttle_count = 1; + +}; + +#endif \ No newline at end of file diff --git a/StreamManager.cpp b/StreamManager.cpp index 2943a52..a559309 100644 --- a/StreamManager.cpp +++ b/StreamManager.cpp @@ -134,7 +134,7 @@ void StreamManager::CreateStreamBuffers() } } -void StreamManager::AcquireImages(ImageAnalyzer analyzer, FaultManager fault_mgr) +void StreamManager::AcquireImages(ImageManager image_mgr, FaultManager fault_mgr) { if (lDevice == NULL || lStream == NULL) { @@ -202,7 +202,7 @@ void StreamManager::AcquireImages(ImageAnalyzer analyzer, FaultManager fault_mgr lHeight = lImage->GetHeight(); // Process Image - if (!analyzer.ProcessImage(lWidth, lHeight, lImage->GetDataPointer(), fault_mgr, false)) + if (!image_mgr.ProcessImage(lWidth, lHeight, lImage->GetDataPointer(), fault_mgr, false)) break; std::cout << " W: " << std::dec << lWidth << " H: " << lHeight; diff --git a/StreamManager.hpp b/StreamManager.hpp index 0519c0c..dfaf09f 100644 --- a/StreamManager.hpp +++ b/StreamManager.hpp @@ -4,7 +4,7 @@ #include #include -#include "ImageAnalyzer.hpp" +#include "ImageManager.hpp" #include "FaultManager.hpp" #define BUFFER_COUNT (32) @@ -18,7 +18,7 @@ public: PvResult FindDevice(PvString *aConnectionID); PvResult ConnectToDevice(const PvString &aConnectionID); PvResult OpenStream(const PvString &aConnectionID); - void AcquireImages(ImageAnalyzer analyzer, FaultManager fault_mgr); + void AcquireImages(ImageManager image_mgr, FaultManager fault_mgr); void Disconnect(); private: