Add Socket Support

This commit is contained in:
Grant Terris
2019-11-02 15:43:33 -07:00
parent c6bd616951
commit c6a7588fd7
9 changed files with 115 additions and 35 deletions

View File

@@ -5,6 +5,7 @@
"includePath": [ "includePath": [
"${workspaceFolder}/**", "${workspaceFolder}/**",
"/opt/pleora/ebus_sdk/Ubuntu-x86_64/include/**", "/opt/pleora/ebus_sdk/Ubuntu-x86_64/include/**",
"/usr/include/x86_64-linux-gnu/qt5/**",
"/usr/local/include/opencv4/**" "/usr/local/include/opencv4/**"
], ],
"defines": [], "defines": [],

57
.vscode/settings.json vendored
View File

@@ -1,5 +1,60 @@
{ {
"files.associations": { "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"
} }
} }

View File

@@ -5,18 +5,19 @@ set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${CMAKE_CURRENT_SOURCE_DIR}/cmake)
find_package( OpenCV REQUIRED ) find_package( OpenCV REQUIRED )
find_package( Ebus REQUIRED ) find_package( Ebus REQUIRED )
find_package( Qt5 COMPONENTS Widgets REQUIRED ) find_package( Qt5 COMPONENTS Widgets Network REQUIRED )
include_directories( include_directories(
${OpenCV_INCLUDE_DIRS} ${OpenCV_INCLUDE_DIRS}
${Ebus_INCLUDE_DIRS} ${Ebus_INCLUDE_DIRS}
${Qt5Widgets_INCLUDE_DIRS} ${Qt5Widgets_INCLUDE_DIRS}
${Qt5Network_INCLUDE_DIRS}
) )
add_executable( FaultFinder add_executable( FaultFinder
FaultFinder.cpp FaultFinder.cpp
StreamManager.cpp StreamManager.cpp
ImageAnalyzer.cpp ImageManager.cpp
FaultManager.cpp FaultManager.cpp
) )
@@ -24,4 +25,6 @@ target_link_libraries( FaultFinder
${OpenCV_LIBS} ${OpenCV_LIBS}
${Ebus_LIBRARIES} ${Ebus_LIBRARIES}
${Qt5Widgets_LIBRARIES} ${Qt5Widgets_LIBRARIES}
${Qt5Network_LIBRARIES}
) )
message( ${Qt5Network_INCLUDE_DIRS} )

View File

@@ -1,7 +1,7 @@
#include <iostream> #include <iostream>
#include "StreamManager.hpp" #include "StreamManager.hpp"
#include "ImageAnalyzer.hpp" #include "ImageManager.hpp"
#include "FaultManager.hpp" #include "FaultManager.hpp"
using namespace std; using namespace std;
@@ -9,7 +9,7 @@ using namespace std;
int main(int argc, char **argv) int main(int argc, char **argv)
{ {
StreamManager stream_mgr; StreamManager stream_mgr;
ImageAnalyzer analyzer; ImageManager image_mgr;
FaultManager fault_mgr; FaultManager fault_mgr;
PvString lConnectionID; PvString lConnectionID;
@@ -18,7 +18,7 @@ int main(int argc, char **argv)
{ {
while(1) while(1)
{ {
if (!analyzer.ProcessImage(0, 0, 0, fault_mgr, true)) if (!image_mgr.ProcessImage(0, 0, 0, fault_mgr, true))
break; break;
} }
return 0; return 0;
@@ -37,7 +37,7 @@ int main(int argc, char **argv)
stream_mgr.OpenStream(lConnectionID); stream_mgr.OpenStream(lConnectionID);
stream_mgr.AcquireImages(analyzer, fault_mgr); stream_mgr.AcquireImages(image_mgr, fault_mgr);
stream_mgr.Disconnect(); stream_mgr.Disconnect();

View File

@@ -1,22 +0,0 @@
#ifndef IMAGEANALYZER_H
#define IMAGEANALYZER_H
#include <opencv2/core.hpp>
#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

View File

@@ -3,7 +3,7 @@
#include <opencv2/imgcodecs.hpp> #include <opencv2/imgcodecs.hpp>
#include <opencv2/imgproc.hpp> #include <opencv2/imgproc.hpp>
#include "ImageAnalyzer.hpp" #include "ImageManager.hpp"
#include "FaultManager.hpp" #include "FaultManager.hpp"
#define ZERO 0 #define ZERO 0
@@ -15,7 +15,7 @@ using namespace cv;
Mat testFrame = imread("/home/midstate/Documents/flirTest.tif", CV_16UC1); 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; Mat frame, mask, viewfinder;
std::vector<std::vector<Point>> contours; std::vector<std::vector<Point>> contours;
@@ -84,5 +84,17 @@ bool ImageAnalyzer::ProcessImage(uint32_t width, uint32_t height, uint8_t *imgPo
return false; return false;
} }
// Send image to other servers
SendImage(viewfinder);
return true; return true;
}
void ImageManager::SendImage(Mat image)
{
std::vector<uchar> buff;
cv::imencode(".jpg", image, buff);
QByteArray *datagram = new QByteArray(reinterpret_cast<const char*>(buff.data()), buff.size());
socket->write(*datagram);
} }

31
ImageManager.hpp Normal file
View File

@@ -0,0 +1,31 @@
#ifndef ImageManager_H
#define ImageManager_H
#include <opencv2/core.hpp>
#include <QUdpSocket>
#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

View File

@@ -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) if (lDevice == NULL || lStream == NULL)
{ {
@@ -202,7 +202,7 @@ void StreamManager::AcquireImages(ImageAnalyzer analyzer, FaultManager fault_mgr
lHeight = lImage->GetHeight(); lHeight = lImage->GetHeight();
// Process Image // Process Image
if (!analyzer.ProcessImage(lWidth, lHeight, lImage->GetDataPointer(), fault_mgr, false)) if (!image_mgr.ProcessImage(lWidth, lHeight, lImage->GetDataPointer(), fault_mgr, false))
break; break;
std::cout << " W: " << std::dec << lWidth << " H: " << lHeight; std::cout << " W: " << std::dec << lWidth << " H: " << lHeight;

View File

@@ -4,7 +4,7 @@
#include <PvStream.h> #include <PvStream.h>
#include <PvBuffer.h> #include <PvBuffer.h>
#include "ImageAnalyzer.hpp" #include "ImageManager.hpp"
#include "FaultManager.hpp" #include "FaultManager.hpp"
#define BUFFER_COUNT (32) #define BUFFER_COUNT (32)
@@ -18,7 +18,7 @@ public:
PvResult FindDevice(PvString *aConnectionID); PvResult FindDevice(PvString *aConnectionID);
PvResult ConnectToDevice(const PvString &aConnectionID); PvResult ConnectToDevice(const PvString &aConnectionID);
PvResult OpenStream(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(); void Disconnect();
private: private: