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": [
"${workspaceFolder}/**",
"/opt/pleora/ebus_sdk/Ubuntu-x86_64/include/**",
"/usr/include/x86_64-linux-gnu/qt5/**",
"/usr/local/include/opencv4/**"
],
"defines": [],

57
.vscode/settings.json vendored
View File

@@ -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"
}
}

View File

@@ -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} )

View File

@@ -1,7 +1,7 @@
#include <iostream>
#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();

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/imgproc.hpp>
#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<std::vector<Point>> 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<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)
{
@@ -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;

View File

@@ -4,7 +4,7 @@
#include <PvStream.h>
#include <PvBuffer.h>
#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: