C++ APIs.
More...
|
| file | Basic.h |
| | C/C++ header file common to all type of engines and functionalities.
|
| file | Engine.hpp |
| | C++ header file common to all type of engines.
|
| file | SSEngine.hpp |
| | C++ header file for Snapshot Engine.
|
| file | TSSEngine.hpp |
| | C++ header file for Triggered Snapshot Engine.
|
| file | FAVEngine.hpp |
| | C++ header file for Fully Automatic Video Engine.
|
| file | Picture.hpp |
| | C++ header file for pictures.
|
| file | GenICam.hpp |
| | C++ header file for GenICam.
|
| file | CamCalib.hpp |
| | C++ header file for Camera Calibration.
|
To use the engines in applications, the following files are required.
- Snapshot Engine
- 'SSEngine.hpp' header file
- On Windows, 'EvoEngine.lib', 'EvoSSE.lib' import libraries.
- On Linux, 'libEvoEngine.so', 'libEvoSSE.so' shared libraries.
- Triggered Snapshot Engine
- 'TSSEngine.hpp' header file
- On Windows, 'EvoEngine.lib', 'EvoTSSE.lib' import libraries.
- On Linux, 'libEvoEngine.so', 'libEvoTSSE.so' shared libraries.
- Fully Automatic Video Engine
- 'FAVEngine.hpp' header file
- On Windows, 'EvoEngine.lib', 'EvoFAVE.lib' import libraries.
- On Linux, 'libEvoEngine.so', 'libEvoFAVE.so' shared libraries.
To use additional functionalities, the following files are required
- GenICam
- 'GenICam.hpp' header file
- On Windows, 'EvoGIC.lib' import library
- On Linux, 'libEvoGIC.so' shared library.
- Camera Calibrations
- 'CamCalib.hpp' header file
- On Windows, 'EvoCC.lib' import library
- On Linux, 'libEvoCC.so' shared library.
For their paths, refer to SDK contents.
Example for Snapshot Engine
#include <cassert>
#include <cstdlib>
#include <iostream>
using namespace std;
int main(int argc, char *argv[])
{
const char *imgPath = NULL;
const char *dataDir = NULL;
if (argc < 2)
{
cerr << "Usage: TestSSEngCpp [sdk_data_dir] image_file" << endl;
return EXIT_FAILURE;
}
else if (argc == 2)
{
imgPath = argv[1];
}
else
{
dataDir = argv[1];
imgPath = argv[2];
}
size_t numDev;
Evo::DDI::Ptr ddi;
assert(rc == EVORC_OK);
numDev = ddi->GetNumDev();
cout << endl << "<< Supported DNN Devices >>" << endl;
for (size_t i = 0; i < numDev; i++)
{
rc = ddi->SelectDev(i);
assert(rc == EVORC_OK);
cout << " ID: " << ddi->GetDevID() << endl;
cout << " Full Name: " << ddi->GetFullName() << endl;
if (i < (numDev - 1U))
cout << " --------------------------------------------" << endl;
}
cout << endl;
ddi.reset();
Evo::SSEngine::Ptr sse;
assert(sse);
rc = sse->Init("KOR", NULL);
assert(rc == EVORC_OK);
assert(rc == EVORC_OK);
assert(rc == EVORC_OK);
Evo::LPI::Ptr lpi;
lpi = sse->Run(imgPath);
assert(rc == EVORC_OK);
if (lpi)
{
size_t num = lpi->GetNumLP();
for (size_t i = 0; i < num; i++)
{
char bufCP[512] = { 0 };
const char *strUTF8 = NULL;
rc = lpi->SelectLP(i);
assert(rc == EVORC_OK);
strUTF8 = lpi->GetStr();
#ifdef _WIN64
assert(rc == EVORC_OK);
cout << bufCP << endl;
#else
cout << bufUTF8 << endl;
#endif
const EvoRect &bbox = lpi->GetPos();
cout <<
" --> Position: " << bbox.
x <<
", " << bbox.
y <<
", " << bbox.
width <<
", " << bbox.
height << endl;
float confidence;
lpi->GetType(type, confidence);
cout << " --> Type: " << type << " (" << confidence << "%)" << endl;
}
lpi.reset();
}
sse->Deinit();
sse.reset();
return EXIT_SUCCESS;
}
@ EVOPARAM_SEARCH_RECT
Definition Basic.h:224
EvoRC
Return Codes.
Definition Basic.h:59
int EvoLPT
License Plate Type.
Definition Basic.h:598
C++ header file for Snapshot Engine.
static EVOSSE_DECLSPEC Ptr Create(void)
EvoRC CvtUTF8ToCP(const char *utf8, char *cpBuf, size_t bufLen)
EvoRC Initialize(const char *drmd=NULL, const char *dataDir=NULL, DDI::Ptr *ddi=NULL)
Rectangle Descriptor.
Definition Basic.h:463
int height
Height Size.
Definition Basic.h:467
int x
X Coordinate of Top-Left.
Definition Basic.h:464
int y
Y Coordinate of Top-Left.
Definition Basic.h:465
int width
Width Size.
Definition Basic.h:466
Example for Triggered Snapshot Engine
#include <cassert>
#include <string>
#include <iostream>
using namespace std;
static void Trigger(Evo::TSSEngine::Ptr &tsse, const char *imgDir, int num)
{
string path(imgDir);
Evo::LPI::Ptr lpi;
Evo::Picture::Ptr pic;
lpi = tsse->Trigger(pic);
assert(rc == EVORC_OK && pic);
if (lpi)
{
size_t numLPs = lpi->GetNumLP();
for (size_t i = 0; i < numLPs; i++)
{
char bufCP[512] = { 0 };
const char *strUTF8 = NULL;
rc = lpi->SelectLP(i);
assert(rc == EVORC_OK);
strUTF8 = lpi->GetStr();
#ifdef _WIN64
assert(rc == EVORC_OK);
cout << endl << bufCP << endl;
#else
cout << endl << strUTF8 << endl;
#endif
const EvoRect &bbox = lpi->GetPos();
cout <<
" --> Position: " << bbox.
x <<
", " << bbox.
y <<
", " << bbox.
width <<
", " << bbox.
height << endl;
float confidence;
lpi->GetType(type, confidence);
cout << " --> Type: " << type << " (" << confidence << "%)" << endl;
}
lpi.reset();
}
#ifdef _WIN64
path += '\\';
#else
path += '/';
#endif
path += to_string(num) + ".jpg";
pic->SaveInJPEG(path.c_str());
pic.reset();
}
int main(int argc, char *argv[])
{
const char *dataDir = NULL;
const char *imgDir = NULL;
const char *url = NULL;
if (argc < 3)
{
fprintf(stderr, "%s [sdk_data_dir] video_source_url image_dir\n", argv[0]);
return EXIT_FAILURE;
}
else if (argc == 3)
{
url = argv[1];
imgDir = argv[2];
}
else
{
dataDir = argv[1];
url = argv[2];
imgDir = argv[3];
}
size_t numDev;
Evo::DDI::Ptr ddi;
assert(rc == EVORC_OK);
numDev = ddi->GetNumDev();
cout << "<< Supported DNN Devices >>" << endl;
for (size_t i = 0; i < numDev; i++)
{
const char *id;
size_t numDMDF;
rc = ddi->SelectDev(i);
assert(rc == EVORC_OK);
cout << " ID: " << ddi->GetDevID() << endl;
cout << " Full Name: " << ddi->GetFullName() << endl;
if (i < (numDev - 1U))
cout << " --------------------------------------------" << endl;
}
cout << endl;
ddi.reset();
Evo::TSSEngine::Ptr tsse;
assert(rc == EVORC_OK && tsse);
rc = tsse->Init("KOR", NULL, url);
assert(rc == EVORC_OK);
assert(rc == EVORC_OK);
int num = 1;
time_t baseTime = time(NULL);
while (difftime(time(NULL), baseTime) <= 5.0)
{
if (time_t(difftime(time(NULL), baseTime)) == time_t(num))
{
Trigger(tsse, imgDir, num++);
}
}
tsse->Deinit();
tsse.reset();
return EXIT_SUCCESS;
}
@ EVOPARAM_OUTPUT
Definition Basic.h:205
C++ header file for Triggered Snapshot Engine.
static EVOTSSE_DECLSPEC Ptr Create(void)
Engine's Output Configurations.
Definition Basic.h:301
Example for Fully Automatic Video Engine
#include <cassert>
#include <ctime>
#include <string>
#include <iostream>
using namespace std;
static void HandleResult(const Evo::LPI::Ptr &lpi, const Evo::GOP::Ptr &gop, const char *imgDir)
{
float confidence;
string path(imgDir);
char bufCP[512] = { 0 };
const char *strUTF8 = NULL;
size_t numPic = gop->GetNumPic();
assert(lpi->GetNumLP() == 1U);
strUTF8 = lpi->GetStr();
#ifdef _WIN64
assert(rc == EVORC_OK);
cout << "String: " << bufCP << endl;
#else
cout << "String: " << strUTF8 << endl;
#endif
lpi->GetType(type, confidence);
cout << "Type: " << type << " (" << confidence << "%)" << endl;
for (size_t i = 0; i < numPic; i++)
{
time_t timeRaw;
int64_t timeUTC, timeMS;
struct tm *timeInfo = NULL;
rc = gop->SelectPic(i);
assert(rc == EVORC_OK);
bbox = gop->GetPosInPic();
cout << "Position: "
timeUTC = gop->GetPicTime();
timeMS = timeUTC % 1000;
timeRaw = time_t(timeUTC / 1000);
timeInfo = localtime(&timeRaw);
cout << "Time: "
<< timeInfo->tm_year + 1900 << '-'
<< timeInfo->tm_mon + 1 << '-'
<< timeInfo->tm_mday << ' '
<< timeInfo->tm_hour << ':'
<< timeInfo->tm_min << ':'
<< timeInfo->tm_sec << '.'
<< timeMS << endl;
}
heading = gop->GetHeadDir();
cout << "Heading Directon: " << heading << endl;
cout << endl;
#ifdef _WIN64
path += '\\' + string(bufCP);
#else
path += '/' + string(bufUTF8);
#endif
if (numPic < 2U)
{
path += ".jpg";
rc = gop->SavePicInJPEG(path.c_str());
}
else
{
path += ".tiff";
rc = gop->SaveAllInTIFF(path.c_str());
}
assert(rc == EVORC_OK);
}
int main(int argc, char *argv[])
{
string viType;
const char *dataDir = NULL;
const char *imgDir = NULL;
const char *url = "F:\\Temp1\\2014-11-24_.mkv";
struct {
Evo::GIC::Admin::Ptr admin;
Evo::GIC::Dev::Ptr dev;
} gc = { NULL, NULL };
if (argc < 3)
{
fprintf(stderr, "%s [SDK_Data_Dir] Video_Input_Type Image_Dir\n", argv[0]);
return EXIT_FAILURE;
}
else if (argc == 3)
{
viType = argv[1];
imgDir = argv[2];
}
else
{
dataDir = argv[1];
viType = argv[2];
imgDir = argv[3];
}
unsigned numDev;
Evo::DDI::Ptr ddi;
assert(rc == EVORC_OK);
numDev = ddi->GetNumDev();
cout << "<< Supported DNN Devices >>" << endl;
for (size_t i = 0; i < numDev; i++)
{
rc = ddi->SelectDev(i);
assert(rc == EVORC_OK);
cout << " ID: " << ddi->GetDevID() << endl;
cout << " Full Name: " << ddi->GetFullName() << endl;
if (i < (numDev - 1U))
cout << " --------------------------------------------" << endl;
}
cout << endl;
ddi.reset();
if (viType == "GenICam")
{
assert(gc.admin);
gc.admin->UpdateDevList();
numDev = gc.admin->GetNumDev();
if (numDev <= 0)
{
gc.admin.reset();
return EXIT_FAILURE;
}
else
{
unsigned numDS;
for (unsigned i = 0; i < numDev; i++)
{
const char *str;
rc = gc.admin->SelectDev(i);
assert(rc == EVORC_OK);
cout << "[Current Device: " << i << "]" << endl;
str = gc.admin->GetDevIfc();
cout << "Interface: " << str << endl;
str = gc.admin->GetDevVendor();
cout << "Vendor: " << str << endl;
str = gc.admin->GetDevModel();
cout << "Model: " << str << endl;
str = gc.admin->GetDevSerialNo();
cout << "SerialNo: " << str << endl;
str = gc.admin->GetDevID();
cout << "ID: " << str << endl;
}
cout << endl;
rc = gc.admin->SelectDev(0);
assert(rc == EVORC_OK);
gc.dev = gc.admin->OpenDev();
numDS = gc.dev->GetNumDataStreams();
if (numDS > 0)
cout << "Number of data streams: " << numDS << endl;
else
{
gc.dev.reset();
gc.admin.reset();
return EXIT_FAILURE;
}
}
}
Evo::FAVEngine::Ptr fave;
assert(rc == EVORC_OK && fave != NULL);
if (viType == "IPProto")
rc = fave->Init("KOR", NULL, url);
else
rc = fave->Init("KOR", NULL, gc.dev, 0);
assert(rc == EVORC_OK);
assert(rc == EVORC_OK);
assert(rc == EVORC_OK);
for (int num = 0; num < 3; num++)
{
Evo::LPI::Ptr lpi;
Evo::GOP::Ptr gop;
lpi = fave->PopLPI(gop);
if (lpi == nullptr && gop == nullptr)
{
cerr << "The video stream closed." << endl;
else
exit(EXIT_FAILURE);
break;
}
HandleResult(lpi, gop, imgDir);
}
fave->Deinit();
fave.reset();
if (viType == "GenICam")
{
gc.dev.reset();
gc.admin.reset();
}
return EXIT_SUCCESS;
}
EvoHeadDir
Automobile's Heading Directions.
Definition Basic.h:277
C++ header file for Fully Automatic Video Engine.
static EVOFAVE_DECLSPEC Ptr Create(void)
static EVOGIC_DECLSPEC Ptr Get(void)
EvoBool headDir
Definition Basic.h:305
Example for camera calibration
#include <cassert>
#include <cstdlib>
#include <iostream>
using namespace std;
int main(int argc, char *argv[])
{
const char *dataDir = NULL;
const char *calibName = NULL;
const char *imgPath = NULL;
if (argc < 3)
{
cerr << "Usage: TestSSEngCpp [sdk_data_dir] camera_calib_name image_file" << endl;
return EXIT_FAILURE;
}
else if (argc == 3)
{
calibName = argv[1];
imgPath = argv[2];
}
else
{
dataDir = argv[1];
calibName = argv[2];
imgPath = argv[3];
}
Evo::SSEngine::Ptr sse;
Evo::CC::Fisheye::Ptr fisheyeModel;
assert(rc == EVORC_OK);
assert(fisheyeModel);
maxResol = fisheyeModel->GetMaxResol();
rc = fisheyeModel->SetOutputSize(maxResol);
assert(rc == EVORC_OK);
assert(sse != NULL);
rc = sse->Init("KOR", "FP32:CPU");
assert(rc == EVORC_OK);
Evo::LPI::Ptr lpi;
Evo::Picture::Ptr pic;
pic = fisheyeModel->Rectify(imgPath);
assert(pic);
lpi = sse->Run(pic->GetImage());
assert(rc == EVORC_OK);
if (lpi)
{
size_t num = lpi->GetNumLP();
for (size_t i = 0; i < num; i++)
{
rc = lpi->SelectLP(i);
assert(rc == EVORC_OK);
char bufCP[512] = { 0 };
const char *strUTF8;;
strUTF8 = lpi->GetStr();
#ifdef _WIN64
assert(rc == EVORC_OK);
cout << bufCP << endl;
#else
cout << strUTF8 << endl;
#endif
const EvoRect &bbox = lpi->GetPos();
cout <<
" --> Position: " << bbox.
x <<
", " << bbox.
y <<
", " << bbox.
width <<
", " << bbox.
height << endl;
float confidence;
lpi->GetType(type, confidence);
cout << " --> Type: " << type << " (" << confidence << "%)" << endl;
}
lpi.reset();
}
rc = pic->SaveInJPEG("F:\\Temp3\\rectified_image.jpg");
assert(rc == EVORC_OK);
pic.reset();
sse->Deinit();
sse.reset();
return EXIT_SUCCESS;
}
C++ header file for Camera Calibration.
static EVOCC_DECLSPEC Ptr Create(const char *calibName)
Size Descriptor.
Definition Basic.h:436
int width
Width Size.
Definition Basic.h:437