Files
ANSCORE/tests/ANSODEngine-UnitTest/ANSODTest.cpp
2026-03-29 08:45:38 +11:00

2745 lines
120 KiB
C++

#include "ANSODTest.h"
int GPUYolov10EngineUnitTest(std::string modelFilePath, std::string videoFilePath) {
boost::property_tree::ptree root;
boost::property_tree::ptree detectionObjects;
boost::property_tree::ptree pt;
std::vector<std::string> classes;
std::filesystem::path currentPath = std::filesystem::current_path();
ANSCENTER::ANSODBase* infHandle;
std::string labelMap;
std::string licenseKey = "";
std::string modelZipFilePassword = "";
float modelThreshold = 0.5;
float modelConfThreshold = 0.5;
float modelNMSThreshold = 0.5;
int modelType = 14;//TENSORRT V10
int detectorType = 1;
std::string optmizedModelFolder;
// Optimise model
std::cout << "Optimizing model, please wait...." << std::endl;
optmizedModelFolder = OptimizeModelStr(modelFilePath.c_str(), modelZipFilePassword.c_str(), modelType, 1,1);
std::cout << "Model is optmized, run inference...." << std::endl;
labelMap = CreateANSODHandle(&infHandle, licenseKey.c_str(), modelFilePath.c_str(), modelZipFilePassword.c_str(), modelThreshold, modelConfThreshold, modelNMSThreshold, 1, modelType, detectorType);
std::stringstream ss(labelMap);
while (ss.good())
{
std::string substr;
getline(ss, substr, ',');
classes.push_back(substr);
}
std::cout << "classes:" << classes.size();
std::cout << "begin read video" << std::endl;
cv::VideoCapture capture(videoFilePath);
if (!capture.isOpened()) {
printf("could not read this video file...\n");
return -1;
}
std::cout << "end read video" << std::endl;
while (true)
{
cv::Mat frame;
if (!capture.read(frame)) // if not success, break loop
{
std::cout << "\n Cannot read the video file. please check your video.\n";
break;
}
unsigned int bufferLength = 0;
unsigned char* jpeg_string = ANSCENTER::ANSUtilityHelper::CVMatToBytes(frame, bufferLength);
int height = frame.rows;
int width = frame.cols;
auto start = std::chrono::system_clock::now();
/* measured work */
std::string detectionResult = RunInferenceBinary(&infHandle, jpeg_string, width, height);
auto end = std::chrono::system_clock::now();
auto elapsed = std::chrono::duration_cast<std::chrono::milliseconds>(end - start);
printf("Time = %lld ms\n", static_cast<long long int>(elapsed.count()));
delete jpeg_string;
if (!detectionResult.empty()) {
pt.clear();
std::stringstream ss;
ss.clear();
ss << detectionResult;
boost::property_tree::read_json(ss, pt);
BOOST_FOREACH(const boost::property_tree::ptree::value_type & child, pt.get_child("results"))
{
const boost::property_tree::ptree& result = child.second;
const auto class_id = GetData<int>(result, "class_id");
const auto x = GetData<float>(result, "x");
const auto y = GetData<float>(result, "y");
const auto width = GetData<float>(result, "width");
const auto height = GetData<float>(result, "height");
cv::rectangle(frame, cv::Rect(x, y, width, height), 123, 2);
cv::putText(frame, cv::format("%s:%d", classes[class_id], class_id), cv::Point(x, y - 5),
0, 0.6, cv::Scalar(0, 0, 255), 1, cv::LINE_AA);
}
}
cv::imshow("ANS Object Tracking", frame);
if (cv::waitKey(30) == 27) // Wait for 'esc' key press to exit
{
break;
}
}
capture.release();
cv::destroyAllWindows();
ReleaseANSODHandle(&infHandle);
std::cout << "End of program.\n";
return 0;
}
int OpenVINOYolov10EngineUnitTest(std::string modelFilePath, std::string videoFilePath) {
boost::property_tree::ptree root;
boost::property_tree::ptree detectionObjects;
boost::property_tree::ptree pt;
std::vector<std::string> classes;
std::filesystem::path currentPath = std::filesystem::current_path();
ANSCENTER::ANSODBase* infHandle;
std::string labelMap;
std::string licenseKey = "";
std::string modelZipFilePassword = "";
float detectionScoreThreshold = 0.48;
float modelConfThreshold = 0.48;
float modelNMSThreshold = 0.48;
int modelType = 15;//OPENVINO
int detectorType = 1; // Detection
labelMap = CreateANSODHandle(&infHandle, licenseKey.c_str(), modelFilePath.c_str(), modelZipFilePassword.c_str(), detectionScoreThreshold, modelConfThreshold, modelNMSThreshold, 1, modelType, detectorType);
std::stringstream ss(labelMap);
while (ss.good())
{
std::string substr;
getline(ss, substr, ',');
classes.push_back(substr);
}
std::cout << "classes:" << classes.size();
std::cout << "begin read video" << std::endl;
cv::VideoCapture capture(videoFilePath);
if (!capture.isOpened()) {
printf("could not read this video file...\n");
return -1;
}
std::cout << "end read video" << std::endl;
while (true)
{
cv::Mat frame;
if (!capture.read(frame)) // if not success, break loop
{
std::cout << "\n Cannot read the video file. please check your video.\n";
break;
}
unsigned int bufferLength = 0;
unsigned char* jpeg_string = ANSCENTER::ANSUtilityHelper::CVMatToBytes(frame, bufferLength);
int height = frame.rows;
int width = frame.cols;
auto start = std::chrono::system_clock::now();
/* measured work */
std::string detectionResult = RunInferenceBinary(&infHandle, jpeg_string, width, height);
auto end = std::chrono::system_clock::now();
auto elapsed = std::chrono::duration_cast<std::chrono::milliseconds>(end - start);
printf("Time = %lld ms\n", static_cast<long long int>(elapsed.count()));
delete jpeg_string;
if (!detectionResult.empty()) {
pt.clear();
std::stringstream ss;
ss.clear();
ss << detectionResult;
boost::property_tree::read_json(ss, pt);
BOOST_FOREACH(const boost::property_tree::ptree::value_type & child, pt.get_child("results"))
{
const boost::property_tree::ptree& result = child.second;
const auto class_id = GetData<int>(result, "class_id");
const auto x = GetData<float>(result, "x");
const auto y = GetData<float>(result, "y");
const auto prob = GetData<float>(result, "prob");
const auto width = GetData<float>(result, "width");
const auto height = GetData<float>(result, "height");
cv::rectangle(frame, cv::Rect(x, y, width, height), 123, 2);
cv::putText(frame, cv::format("%s:%d:%.2f", classes[class_id], class_id, prob), cv::Point(x, y - 5),
0, 0.6, cv::Scalar(0, 0, 255), 1, cv::LINE_AA);
}
}
cv::imshow("ANS Object Tracking", frame);
if (cv::waitKey(30) == 27) // Wait for 'esc' key press to exit
{
break;
}
}
capture.release();
cv::destroyAllWindows();
ReleaseANSODHandle(&infHandle);
std::cout << "End of program.\n";
return 0;
}
int OpenVINOYolov10EngineUnitTestLoop(std::string modelFilePath, std::string videoFilePath) {
boost::property_tree::ptree root;
boost::property_tree::ptree detectionObjects;
boost::property_tree::ptree pt;
std::vector<std::string> classes;
std::filesystem::path currentPath = std::filesystem::current_path();
ANSCENTER::ANSODBase* infHandle;
std::string labelMap;
std::string licenseKey = "";
std::string modelZipFilePassword = "";
float detectionScoreThreshold = 0.48;
float modelConfThreshold = 0.48;
float modelNMSThreshold = 0.48;
int modelType = 15; // OPENVINO
int detectorType = 1; // Detection
labelMap = CreateANSODHandle(&infHandle, licenseKey.c_str(), modelFilePath.c_str(), modelZipFilePassword.c_str(), detectionScoreThreshold, modelConfThreshold, modelNMSThreshold, 1, modelType, detectorType);
std::stringstream ss(labelMap);
while (ss.good()) {
std::string substr;
getline(ss, substr, ',');
classes.push_back(substr);
}
std::cout << "classes:" << classes.size() << std::endl;
while (true) {
std::cout << "begin read video" << std::endl;
cv::VideoCapture capture(videoFilePath);
if (!capture.isOpened()) {
printf("could not read this video file...\n");
return -1;
}
std::cout << "end read video" << std::endl;
while (true) {
cv::Mat frame;
if (!capture.read(frame)) {
std::cout << "\n Cannot read the video file. Restarting...\n";
capture.set(cv::CAP_PROP_POS_FRAMES, 0); // Reset to the beginning of the video
continue;
}
unsigned int bufferLength = 0;
cv::Mat croppedFrame = frame(cv::Rect(0, 0, 1920, 1080));
auto start1 = std::chrono::system_clock::now();
std::vector<uchar> imageData;
bool success = cv::imencode(".jpg", croppedFrame, imageData);
if (!success) {
std::cout << "Failed to encode the image" << std::endl;
break;
}
std::string jpegImage(imageData.begin(), imageData.end());
auto end1 = std::chrono::system_clock::now();
auto elapsed1 = std::chrono::duration_cast<std::chrono::milliseconds>(end1 - start1);
//printf("Conversion Time = %lld ms\n", static_cast<long long int>(elapsed1.count()));
int height = croppedFrame.rows;
int width = croppedFrame.cols;
auto start = std::chrono::system_clock::now();
/* measured work */
std::string detectionResult = RunInferenceFromCV(&infHandle, croppedFrame);//RunInferenceFromJpegString(&infHandle, jpegImage.c_str(), imageData.size());// , 100, 100, 0.2);
auto end = std::chrono::system_clock::now();
auto elapsed = std::chrono::duration_cast<std::chrono::milliseconds>(end - start);
printf("Time = %lld ms\n", static_cast<long long int>(elapsed.count()));
if (!detectionResult.empty()) {
pt.clear();
std::stringstream ss;
ss.clear();
ss << detectionResult;
boost::property_tree::read_json(ss, pt);
BOOST_FOREACH(const boost::property_tree::ptree::value_type & child, pt.get_child("results")) {
const boost::property_tree::ptree& result = child.second;
const auto class_id = GetData<int>(result, "class_id");
const auto x = GetData<float>(result, "x");
const auto y = GetData<float>(result, "y");
const auto prob = GetData<float>(result, "prob");
const auto width = GetData<float>(result, "width");
const auto height = GetData<float>(result, "height");
cv::rectangle(croppedFrame, cv::Rect(x, y, width, height), 123, 2);
cv::putText(croppedFrame, cv::format("%s:%d:%.2f", classes[class_id], class_id, prob), cv::Point(x, y - 5),
0, 0.6, cv::Scalar(0, 0, 255), 1, cv::LINE_AA);
}
}
cv::imshow("ANS Object Tracking", croppedFrame);
if (cv::waitKey(30) == 27) { // Wait for 'esc' key press to exit
capture.release();
cv::destroyAllWindows();
ReleaseANSODHandle(&infHandle);
std::cout << "End of program.\n";
return 0;
}
}
}
}
int OpenVINOEngineUnitTest(std::string modelFilePath, std::string videoFilePath) {
boost::property_tree::ptree root;
boost::property_tree::ptree detectionObjects;
boost::property_tree::ptree pt;
std::vector<std::string> classes;
std::filesystem::path currentPath = std::filesystem::current_path();
ANSCENTER::ANSODBase* infHandle;
std::string labelMap;
std::string licenseKey = "";
std::string modelZipFilePassword = "";
float modelThreshold = 0.2;
float modelConfThreshold = 0.2;
float modelNMSThreshold = 0.2;
int modelType = 5;//OPENVINO
int detectorType = 1; // Detection
labelMap = CreateANSODHandle(&infHandle, licenseKey.c_str(), modelFilePath.c_str(), modelZipFilePassword.c_str(), modelThreshold, modelConfThreshold, modelNMSThreshold, 1, modelType, detectorType);
std::stringstream ss(labelMap);
while (ss.good())
{
std::string substr;
getline(ss, substr, ',');
classes.push_back(substr);
}
std::cout << "classes:" << classes.size();
std::cout << "begin read video" << std::endl;
cv::VideoCapture capture(videoFilePath);
if (!capture.isOpened()) {
printf("could not read this video file...\n");
return -1;
}
std::cout << "end read video" << std::endl;
while (true)
{
cv::Mat frame;
if (!capture.read(frame)) // if not success, break loop
{
std::cout << "\n Cannot read the video file. please check your video.\n";
break;
}
unsigned int bufferLength = 0;
cv::Mat croppedframe = frame(cv::Rect(0, 0, frame.cols, frame.rows));
unsigned char* jpeg_string = ANSCENTER::ANSUtilityHelper::CVMatToBytes(croppedframe, bufferLength);
int height = croppedframe.rows;
int width = croppedframe.cols;
auto start = std::chrono::system_clock::now();
/* measured work */
std::string detectionResult = RunInferenceBinary(&infHandle, jpeg_string, width, height);
auto end = std::chrono::system_clock::now();
auto elapsed = std::chrono::duration_cast<std::chrono::milliseconds>(end - start);
printf("Time = %lld ms\n", static_cast<long long int>(elapsed.count()));
delete jpeg_string;
if (!detectionResult.empty()) {
pt.clear();
std::stringstream ss;
ss.clear();
ss << detectionResult;
boost::property_tree::read_json(ss, pt);
BOOST_FOREACH(const boost::property_tree::ptree::value_type & child, pt.get_child("results"))
{
const boost::property_tree::ptree& result = child.second;
const auto class_id = GetData<int>(result, "class_id");
const auto x = GetData<float>(result, "x");
const auto y = GetData<float>(result, "y");
const auto prob = GetData<float>(result, "prob");
const auto width = GetData<float>(result, "width");
const auto height = GetData<float>(result, "height");
cv::rectangle(croppedframe, cv::Rect(x, y, width, height), 123, 2);
cv::putText(croppedframe, cv::format("%s:%d:%.2f", classes[class_id], class_id, prob), cv::Point(x, y - 5),
0, 0.6, cv::Scalar(0, 0, 255), 1, cv::LINE_AA);
}
}
cv::imshow("ANS Object Tracking", croppedframe);
if (cv::waitKey(30) == 27) // Wait for 'esc' key press to exit
{
break;
}
}
capture.release();
cv::destroyAllWindows();
ReleaseANSODHandle(&infHandle);
std::cout << "End of program.\n";
return 0;
}
int Yolov8EngineUnitTest(std::string modelFilePath, std::string videoFilePath) {
boost::property_tree::ptree root;
boost::property_tree::ptree detectionObjects;
boost::property_tree::ptree pt;
std::vector<std::string> classes;
std::filesystem::path currentPath = std::filesystem::current_path();
ANSCENTER::ANSODBase* infHandle;
std::string labelMap;
std::string licenseKey = "";
std::string modelZipFilePassword = "";
float modelThreshold = 0.5;
float modelConfThreshold = 0.5;
float modelNMSThreshold = 0.5;
int modelType = 3;//TENSORRT
int detectorType = 1;
std::string optmizedModelFolder;
// Optimise model
std::cout << "Optimizing model, please wait...." << std::endl;
optmizedModelFolder = OptimizeModelStr(modelFilePath.c_str(), modelZipFilePassword.c_str(), modelType,1, 1);
std::cout << "Model is optmized, run inference...." << std::endl;
labelMap = CreateANSODHandle(&infHandle, licenseKey.c_str(), modelFilePath.c_str(), modelZipFilePassword.c_str(), modelThreshold, modelConfThreshold, modelNMSThreshold, 1, modelType, detectorType);
std::stringstream ss(labelMap);
while (ss.good())
{
std::string substr;
getline(ss, substr, ',');
classes.push_back(substr);
}
std::cout << "classes:" << classes.size();
std::cout << "begin read video" << std::endl;
cv::VideoCapture capture(videoFilePath);
if (!capture.isOpened()) {
printf("could not read this video file...\n");
return -1;
}
std::cout << "end read video" << std::endl;
while (true)
{
cv::Mat frame;
if (!capture.read(frame)) // if not success, break loop
{
std::cout << "\n Cannot read the video file. please check your video.\n";
break;
}
unsigned int bufferLength = 0;
cv::Mat croppedFrame = frame.clone();// frame(cv::Rect(1440, 0, 320, 320)).clone();// frame.clone();//frame(cv::Rect(1250, 0, 640, 640)).clone();//frame.clone();// frame.clone();//
unsigned char* jpeg_string = ANSCENTER::ANSUtilityHelper::CVMatToBytes(croppedFrame, bufferLength);
int height = croppedFrame.rows;
int width = croppedFrame.cols;
auto start = std::chrono::system_clock::now();
/* measured work */
std::string detectionResult = RunInferenceBinary(&infHandle, jpeg_string, width, height);
auto end = std::chrono::system_clock::now();
auto elapsed = std::chrono::duration_cast<std::chrono::milliseconds>(end - start);
printf("Time = %lld ms\n", static_cast<long long int>(elapsed.count()));
delete jpeg_string;
if (!detectionResult.empty()) {
pt.clear();
std::stringstream ss;
ss.clear();
ss << detectionResult;
boost::property_tree::read_json(ss, pt);
BOOST_FOREACH(const boost::property_tree::ptree::value_type & child, pt.get_child("results"))
{
const boost::property_tree::ptree& result = child.second;
const auto class_id = GetData<int>(result, "class_id");
const auto x = GetData<float>(result, "x");
const auto y = GetData<float>(result, "y");
const auto width = GetData<float>(result, "width");
const auto height = GetData<float>(result, "height");
cv::rectangle(croppedFrame, cv::Rect(x, y, width, height), 123, 2);
cv::putText(croppedFrame, cv::format("%s:%d", classes[class_id], class_id), cv::Point(x, y - 5),
0, 0.6, cv::Scalar(0, 0, 255), 1, cv::LINE_AA);
}
}
cv::imshow("ANS Object Tracking", croppedFrame);
if (cv::waitKey(30) == 27) // Wait for 'esc' key press to exit
{
break;
}
croppedFrame.release();
}
capture.release();
cv::destroyAllWindows();
ReleaseANSODHandle(&infHandle);
std::cout << "End of program.\n";
return 0;
}
int Yolov5EngineUnitTest(std::string modelFilePath, std::string videoFilePath) {
boost::property_tree::ptree root;
boost::property_tree::ptree detectionObjects;
boost::property_tree::ptree pt;
std::vector<std::string> classes;
std::filesystem::path currentPath = std::filesystem::current_path();
ANSCENTER::ANSODBase* infHandle;
std::string labelMap;
std::string licenseKey = "";
std::string modelZipFilePassword = "";
float modelThreshold = 0.2;
float modelConfThreshold = 0.2;
float modelNMSThreshold = 0.2;
int modelType = 2;//Yolov5
int detectorType = 1;
std::string optmizedModelFolder;
// Optimise model
std::cout << "Optimizing model, please wait...." << std::endl;
optmizedModelFolder = OptimizeModelStr(modelFilePath.c_str(), modelZipFilePassword.c_str(), modelType,1, 1);
std::cout << "Model is optmized, run inference...." << std::endl;
labelMap = CreateANSODHandle(&infHandle, licenseKey.c_str(), modelFilePath.c_str(), modelZipFilePassword.c_str(), modelThreshold, modelConfThreshold, modelNMSThreshold, 1, modelType, detectorType);
std::stringstream ss(labelMap);
while (ss.good())
{
std::string substr;
getline(ss, substr, ',');
classes.push_back(substr);
}
std::cout << "classes:" << classes.size();
std::cout << "begin read video" << std::endl;
cv::VideoCapture capture(videoFilePath);
if (!capture.isOpened()) {
printf("could not read this video file...\n");
return -1;
}
std::cout << "end read video" << std::endl;
while (true)
{
cv::Mat frame;
if (!capture.read(frame)) // if not success, break loop
{
std::cout << "\n Cannot read the video file. please check your video.\n";
break;
}
unsigned int bufferLength = 0;
cv::Mat croppedFrame = frame.clone();// frame(cv::Rect(1440, 0, 320, 320)).clone();// frame.clone();//frame(cv::Rect(1250, 0, 640, 640)).clone();//frame.clone();// frame.clone();//
unsigned char* jpeg_string = ANSCENTER::ANSUtilityHelper::CVMatToBytes(croppedFrame, bufferLength);
int height = croppedFrame.rows;
int width = croppedFrame.cols;
auto start = std::chrono::system_clock::now();
/* measured work */
std::string detectionResult = RunInferenceBinary(&infHandle, jpeg_string, width, height);
auto end = std::chrono::system_clock::now();
auto elapsed = std::chrono::duration_cast<std::chrono::milliseconds>(end - start);
printf("Time = %lld ms\n", static_cast<long long int>(elapsed.count()));
delete jpeg_string;
if (!detectionResult.empty()) {
pt.clear();
std::stringstream ss;
ss.clear();
ss << detectionResult;
boost::property_tree::read_json(ss, pt);
BOOST_FOREACH(const boost::property_tree::ptree::value_type & child, pt.get_child("results"))
{
const boost::property_tree::ptree& result = child.second;
const auto class_id = GetData<int>(result, "class_id");
const auto x = GetData<float>(result, "x");
const auto y = GetData<float>(result, "y");
const auto width = GetData<float>(result, "width");
const auto height = GetData<float>(result, "height");
cv::rectangle(croppedFrame, cv::Rect(x, y, width, height), 123, 2);
cv::putText(croppedFrame, cv::format("%s:%d", classes[class_id], class_id), cv::Point(x, y - 5),
0, 0.6, cv::Scalar(0, 0, 255), 1, cv::LINE_AA);
}
}
cv::imshow("ANS Object Tracking", croppedFrame);
if (cv::waitKey(30) == 27) // Wait for 'esc' key press to exit
{
break;
}
croppedFrame.release();
}
capture.release();
cv::destroyAllWindows();
ReleaseANSODHandle(&infHandle);
std::cout << "End of program.\n";
return 0;
}
int Yolov12EngineUnitTest(std::string modelFilePath, std::string videoFilePath) {
boost::property_tree::ptree root;
boost::property_tree::ptree detectionObjects;
boost::property_tree::ptree pt;
std::vector<std::string> classes;
std::filesystem::path currentPath = std::filesystem::current_path();
ANSCENTER::ANSODBase* infHandle;
std::string labelMap;
std::string licenseKey = "";
std::string modelZipFilePassword = "";
float modelThreshold = 0.25;
float modelConfThreshold = 0.5;
float modelNMSThreshold = 0.5;
int modelType = 17;//Yolov12 (4 RT)
int detectorType = 1;
std::string optmizedModelFolder;
// Optimise model
std::cout << "Optimizing model, please wait...." << std::endl;
optmizedModelFolder = OptimizeModelStr(modelFilePath.c_str(), modelZipFilePassword.c_str(), modelType,1, 1);
std::cout << "Model is optmized, run inference...." << std::endl;
labelMap = CreateANSODHandle(&infHandle, licenseKey.c_str(), modelFilePath.c_str(), modelZipFilePassword.c_str(), modelThreshold, modelConfThreshold, modelNMSThreshold, 1, modelType, detectorType);
std::stringstream ss(labelMap);
while (ss.good())
{
std::string substr;
getline(ss, substr, ',');
classes.push_back(substr);
}
std::cout << "classes:" << classes.size();
std::cout << "begin read video" << std::endl;
cv::VideoCapture capture(videoFilePath);
if (!capture.isOpened()) {
printf("could not read this video file...\n");
return -1;
}
std::cout << "end read video" << std::endl;
while (true)
{
cv::Mat frame;
if (!capture.read(frame)) // if not success, break loop
{
std::cout << "\n Cannot read the video file. please check your video.\n";
break;
}
unsigned int bufferLength = 0;
cv::Mat croppedFrame = frame.clone();// frame(cv::Rect(1440, 0, 320, 320)).clone();// frame.clone();//frame(cv::Rect(1250, 0, 640, 640)).clone();//frame.clone();// frame.clone();//
unsigned char* jpeg_string = ANSCENTER::ANSUtilityHelper::CVMatToBytes(croppedFrame, bufferLength);
int height = croppedFrame.rows;
int width = croppedFrame.cols;
auto start = std::chrono::system_clock::now();
/* measured work */
std::string detectionResult = RunInferenceBinary(&infHandle, jpeg_string, width, height);
auto end = std::chrono::system_clock::now();
auto elapsed = std::chrono::duration_cast<std::chrono::milliseconds>(end - start);
printf("Time = %lld ms\n", static_cast<long long int>(elapsed.count()));
delete jpeg_string;
if (!detectionResult.empty()) {
pt.clear();
std::stringstream ss;
ss.clear();
ss << detectionResult;
boost::property_tree::read_json(ss, pt);
BOOST_FOREACH(const boost::property_tree::ptree::value_type & child, pt.get_child("results"))
{
const boost::property_tree::ptree& result = child.second;
const auto class_id = GetData<int>(result, "class_id");
const auto x = GetData<float>(result, "x");
const auto y = GetData<float>(result, "y");
const auto width = GetData<float>(result, "width");
const auto height = GetData<float>(result, "height");
cv::rectangle(croppedFrame, cv::Rect(x, y, width, height), 123, 2);
cv::putText(croppedFrame, cv::format("%s:%d", classes[class_id], class_id), cv::Point(x, y - 5),
0, 0.6, cv::Scalar(0, 0, 255), 1, cv::LINE_AA);
}
}
cv::imshow("ANS Object Tracking", croppedFrame);
if (cv::waitKey(30) == 27) // Wait for 'esc' key press to exit
{
break;
}
croppedFrame.release();
}
capture.release();
cv::destroyAllWindows();
ReleaseANSODHandle(&infHandle);
std::cout << "End of program.\n";
return 0;
}
int GPUEngineUnitTest(std::string modelFilePath, std::string videoFilePath) {
boost::property_tree::ptree root;
boost::property_tree::ptree detectionObjects;
boost::property_tree::ptree pt;
std::vector<std::string> classes;
std::filesystem::path currentPath = std::filesystem::current_path();
ANSCENTER::ANSODBase* infHandle;
std::string labelMap;
std::string licenseKey = "";
std::string modelZipFilePassword = "";
float modelThreshold = 0.2;
float modelConfThreshold = 0.2;
float modelNMSThreshold = 0.2;
int modelType = 4;//TENSORRT
int detectorType = 1;
std::string optmizedModelFolder;
// Optimise model
std::cout << "Optimizing model, please wait...." << std::endl;
optmizedModelFolder = OptimizeModelStr(modelFilePath.c_str(), modelZipFilePassword.c_str(), modelType,1, 1);
std::cout << "Model is optmized, run inference...." << std::endl;
labelMap = CreateANSODHandle(&infHandle, licenseKey.c_str(), modelFilePath.c_str(), modelZipFilePassword.c_str(), modelThreshold, modelConfThreshold, modelNMSThreshold, 1, modelType, detectorType);
std::stringstream ss(labelMap);
while (ss.good())
{
std::string substr;
getline(ss, substr, ',');
classes.push_back(substr);
}
std::cout << "classes:" << classes.size();
std::cout << "begin read video" << std::endl;
cv::VideoCapture capture(videoFilePath);
if (!capture.isOpened()) {
printf("could not read this video file...\n");
return -1;
}
std::cout << "end read video" << std::endl;
while (true)
{
cv::Mat frame;
if (!capture.read(frame)) // if not success, break loop
{
std::cout << "\n Cannot read the video file. please check your video.\n";
break;
}
unsigned int bufferLength = 0;
cv::Mat croppedFrame = frame.clone();// frame(cv::Rect(1440, 0, 320, 320)).clone();// frame.clone();//frame(cv::Rect(1250, 0, 640, 640)).clone();//frame.clone();// frame.clone();//
unsigned char* jpeg_string = ANSCENTER::ANSUtilityHelper::CVMatToBytes(croppedFrame, bufferLength);
int height = croppedFrame.rows;
int width = croppedFrame.cols;
auto start = std::chrono::system_clock::now();
/* measured work */
std::string detectionResult = RunInferenceBinary(&infHandle, jpeg_string, width, height);
auto end = std::chrono::system_clock::now();
auto elapsed = std::chrono::duration_cast<std::chrono::milliseconds>(end - start);
printf("Time = %lld ms\n", static_cast<long long int>(elapsed.count()));
delete jpeg_string;
if (!detectionResult.empty()) {
pt.clear();
std::stringstream ss;
ss.clear();
ss << detectionResult;
boost::property_tree::read_json(ss, pt);
BOOST_FOREACH(const boost::property_tree::ptree::value_type & child, pt.get_child("results"))
{
const boost::property_tree::ptree& result = child.second;
const auto class_id = GetData<int>(result, "class_id");
const auto x = GetData<float>(result, "x");
const auto y = GetData<float>(result, "y");
const auto width = GetData<float>(result, "width");
const auto height = GetData<float>(result, "height");
cv::rectangle(croppedFrame, cv::Rect(x, y, width, height), 123, 2);
cv::putText(croppedFrame, cv::format("%s:%d", classes[class_id], class_id), cv::Point(x, y - 5),
0, 0.6, cv::Scalar(0, 0, 255), 1, cv::LINE_AA);
}
}
cv::imshow("ANS Object Tracking", croppedFrame);
if (cv::waitKey(30) == 27) // Wait for 'esc' key press to exit
{
break;
}
croppedFrame.release();
}
capture.release();
cv::destroyAllWindows();
ReleaseANSODHandle(&infHandle);
std::cout << "End of program.\n";
return 0;
}
int ONNXEngineUnitTest(std::string modelFilePath, std::string videoFilePath) {
boost::property_tree::ptree root;
boost::property_tree::ptree detectionObjects;
boost::property_tree::ptree pt;
std::vector<std::string> classes;
std::filesystem::path currentPath = std::filesystem::current_path();
ANSCENTER::ANSODBase* infHandle;
std::string labelMap;
std::string licenseKey = "";
std::string modelZipFilePassword = "";
float modelThreshold = 0.5;
float modelConfThreshold = 0.5;
float modelNMSThreshold = 0.5;
int modelType = 3;//ONNX
int detectorType = 1;
std::string optmizedModelFolder;
// Optimise model
std::cout << "Optimizing model, please wait...." << std::endl;
optmizedModelFolder = OptimizeModelStr(modelFilePath.c_str(), modelZipFilePassword.c_str(), modelType,1, 0);
std::cout << "Model is optmized, run inference...." << std::endl;
labelMap = CreateANSODHandle(&infHandle, licenseKey.c_str(), modelFilePath.c_str(), modelZipFilePassword.c_str(), modelThreshold, modelConfThreshold, modelNMSThreshold, 1, modelType, detectorType);
std::stringstream ss(labelMap);
while (ss.good())
{
std::string substr;
getline(ss, substr, ',');
classes.push_back(substr);
}
std::cout << "classes:" << classes.size();
std::cout << "begin read video" << std::endl;
cv::VideoCapture capture(videoFilePath);
if (!capture.isOpened()) {
printf("could not read this video file...\n");
return -1;
}
std::cout << "end read video" << std::endl;
while (true)
{
cv::Mat frame;
if (!capture.read(frame)) // if not success, break loop
{
std::cout << "\n Cannot read the video file. please check your video.\n";
break;
}
unsigned int bufferLength = 0;
unsigned char* jpeg_string = ANSCENTER::ANSUtilityHelper::CVMatToBytes(frame, bufferLength);
int height = frame.rows;
int width = frame.cols;
auto start = std::chrono::system_clock::now();
/* measured work */
std::string detectionResult = RunInferenceBinary(&infHandle, jpeg_string, width, height);
auto end = std::chrono::system_clock::now();
auto elapsed = std::chrono::duration_cast<std::chrono::milliseconds>(end - start);
printf("Time = %lld ms\n", static_cast<long long int>(elapsed.count()));
delete jpeg_string;
if (!detectionResult.empty()) {
pt.clear();
std::stringstream ss;
ss.clear();
ss << detectionResult;
boost::property_tree::read_json(ss, pt);
BOOST_FOREACH(const boost::property_tree::ptree::value_type & child, pt.get_child("results"))
{
const boost::property_tree::ptree& result = child.second;
const auto class_id = GetData<int>(result, "class_id");
const auto x = GetData<float>(result, "x");
const auto y = GetData<float>(result, "y");
const auto width = GetData<float>(result, "width");
const auto height = GetData<float>(result, "height");
cv::rectangle(frame, cv::Rect(x, y, width, height), 123, 2);
cv::putText(frame, cv::format("%s:%d", classes[class_id], class_id), cv::Point(x, y - 5),
0, 0.6, cv::Scalar(0, 0, 255), 1, cv::LINE_AA);
}
}
cv::imshow("ANS Object Tracking", frame);
if (cv::waitKey(30) == 27) // Wait for 'esc' key press to exit
{
break;
}
}
capture.release();
cv::destroyAllWindows();
ReleaseANSODHandle(&infHandle);
std::cout << "End of program.\n";
return 0;
}
int GPUEngineImageTest(std::string modelFilePath, std::string imageFilePath) {
boost::property_tree::ptree root;
boost::property_tree::ptree detectionObjects;
boost::property_tree::ptree pt;
std::vector<std::string> classes;
std::filesystem::path currentPath = std::filesystem::current_path();
ANSCENTER::ANSODBase* infHandle;
std::string labelMap;
std::string licenseKey = "";
std::string modelZipFilePassword = "";
float modelThreshold = 0.5;
float modelConfThreshold = 0.5;
float modelNMSThreshold = 0.5;
int modelType = 4;//TENSORRT
int detectorType = 1;
std::string optmizedModelFolder;
// Optimise model
std::cout << "Optimizing model, please wait...." << std::endl;
optmizedModelFolder = OptimizeModelStr(modelFilePath.c_str(), modelZipFilePassword.c_str(), modelType,1, 1);
std::cout << "Model is optmized, run inference...." << std::endl;
labelMap = CreateANSODHandle(&infHandle, licenseKey.c_str(), modelFilePath.c_str(), modelZipFilePassword.c_str(), modelThreshold, modelConfThreshold, modelNMSThreshold, 1, modelType, detectorType);
std::stringstream ss(labelMap);
while (ss.good())
{
std::string substr;
getline(ss, substr, ',');
classes.push_back(substr);
}
cv::Mat frame = cv::imread(imageFilePath, cv::IMREAD_COLOR);
unsigned int bufferLength = 0;
unsigned char* jpeg_string = ANSCENTER::ANSUtilityHelper::CVMatToBytes(frame, bufferLength);
int height = frame.rows;
int width = frame.cols;
auto start = std::chrono::system_clock::now();
/* measured work */
std::string detectionResult = RunInferenceBinary(&infHandle, jpeg_string, width, height);
auto end = std::chrono::system_clock::now();
auto elapsed = std::chrono::duration_cast<std::chrono::milliseconds>(end - start);
printf("Time = %lld ms\n", static_cast<long long int>(elapsed.count()));
std::cout << "Result:" << detectionResult << std::endl;
delete jpeg_string;
if (!detectionResult.empty()) {
pt.clear();
std::stringstream ss;
ss.clear();
ss << detectionResult;
boost::property_tree::read_json(ss, pt);
BOOST_FOREACH(const boost::property_tree::ptree::value_type & child, pt.get_child("results"))
{
const boost::property_tree::ptree& result = child.second;
const auto class_id = GetData<int>(result, "class_id");
const auto x = GetData<float>(result, "x");
const auto y = GetData<float>(result, "y");
const auto width = GetData<float>(result, "width");
const auto height = GetData<float>(result, "height");
cv::rectangle(frame, cv::Rect(x, y, width, height), 123, 2);
cv::putText(frame, cv::format("%s:%d", classes[class_id], class_id), cv::Point(x, y - 5),
0, 0.6, cv::Scalar(0, 0, 255), 1, cv::LINE_AA);
std::cout << "Keypoints =[" << GetData<std::string>(result, "extra_info") << "]" << std::endl;
}
}
//cv::imshow("ANS Object Tracking", frame);
//if (cv::waitKey(0) == 0) // Wait for 'esc' key press to exit
//{
// std::cout << "End of facial detection.\n";
//}
cv::destroyAllWindows();
ReleaseANSODHandle(&infHandle);
std::cout << "End of program.\n";
return 0;
}
int GPU11EngineImageTest(std::string modelFilePath, std::string imageFilePath) {
boost::property_tree::ptree root;
boost::property_tree::ptree detectionObjects;
boost::property_tree::ptree pt;
std::vector<std::string> classes;
std::filesystem::path currentPath = std::filesystem::current_path();
ANSCENTER::ANSODBase* infHandle;
std::string labelMap;
std::string licenseKey = "";
std::string modelZipFilePassword = "";
float modelThreshold = 0.5;
float modelConfThreshold = 0.5;
float modelNMSThreshold = 0.5;
int modelType = 4;//TENSORRTyolo11 same as yolov8
int detectorType = 1;
std::string optmizedModelFolder;
// Optimise model
std::cout << "Optimizing model, please wait...." << std::endl;
optmizedModelFolder = OptimizeModelStr(modelFilePath.c_str(), modelZipFilePassword.c_str(), modelType, 1,1);
std::cout << "Model is optmized, run inference...." << std::endl;
labelMap = CreateANSODHandle(&infHandle, licenseKey.c_str(), modelFilePath.c_str(), modelZipFilePassword.c_str(), modelThreshold, modelConfThreshold, modelNMSThreshold, 1, modelType, detectorType,1);
std::stringstream ss(labelMap);
while (ss.good())
{
std::string substr;
getline(ss, substr, ',');
classes.push_back(substr);
}
cv::Mat frame = cv::imread(imageFilePath, cv::IMREAD_COLOR);
unsigned int bufferLength = 0;
unsigned char* jpeg_string = ANSCENTER::ANSUtilityHelper::CVMatToBytes(frame, bufferLength);
int height = frame.rows;
int width = frame.cols;
auto start = std::chrono::system_clock::now();
/* measured work */
std::string detectionResult = RunInferenceBinary(&infHandle, jpeg_string, width, height);
auto end = std::chrono::system_clock::now();
auto elapsed = std::chrono::duration_cast<std::chrono::milliseconds>(end - start);
printf("Time = %lld ms\n", static_cast<long long int>(elapsed.count()));
std::cout << "Result:" << detectionResult << std::endl;
delete jpeg_string;
if (!detectionResult.empty()) {
pt.clear();
std::stringstream ss;
ss.clear();
ss << detectionResult;
boost::property_tree::read_json(ss, pt);
BOOST_FOREACH(const boost::property_tree::ptree::value_type & child, pt.get_child("results"))
{
const boost::property_tree::ptree& result = child.second;
const auto class_id = GetData<int>(result, "class_id");
const auto x = GetData<float>(result, "x");
const auto y = GetData<float>(result, "y");
const auto width = GetData<float>(result, "width");
const auto height = GetData<float>(result, "height");
cv::rectangle(frame, cv::Rect(x, y, width, height), 123, 2);
cv::putText(frame, cv::format("%s:%d", classes[class_id], class_id), cv::Point(x, y - 5),
0, 0.6, cv::Scalar(0, 0, 255), 1, cv::LINE_AA);
std::cout << "Keypoints =[" << GetData<std::string>(result, "extra_info") << "]" << std::endl;
}
}
cv::imshow("ANS Object Tracking", frame);
if (cv::waitKey(0) == 0) // Wait for 'esc' key press to exit
{
std::cout << "End of facial detection.\n";
}
cv::destroyAllWindows();
ReleaseANSODHandle(&infHandle);
std::cout << "End of program.\n";
return 0;
}
int GPU11EngineUnitTest(std::string modelFilePath, std::string videoFilePath) {
boost::property_tree::ptree root;
boost::property_tree::ptree detectionObjects;
boost::property_tree::ptree pt;
std::vector<std::string> classes;
std::filesystem::path currentPath = std::filesystem::current_path();
ANSCENTER::ANSODBase* infHandle;
std::string labelMap;
std::string licenseKey = "";
std::string modelZipFilePassword = "";
float modelThreshold = 0.2;
float modelConfThreshold = 0.2;
float modelNMSThreshold = 0.2;
int modelType = 4;//TENSORRTv11 same as Yolov8
int detectorType = 1;
std::string optmizedModelFolder;
// Optimise model
std::cout << "Optimizing model, please wait...." << std::endl;
optmizedModelFolder = OptimizeModelStr(modelFilePath.c_str(), modelZipFilePassword.c_str(), modelType,1, 1);
std::cout << "Model is optmized, run inference...." << std::endl;
labelMap = CreateANSODHandle(&infHandle, licenseKey.c_str(), modelFilePath.c_str(), modelZipFilePassword.c_str(), modelThreshold, modelConfThreshold, modelNMSThreshold, 1, modelType, detectorType);
std::stringstream ss(labelMap);
while (ss.good())
{
std::string substr;
getline(ss, substr, ',');
classes.push_back(substr);
}
std::cout << "classes:" << classes.size();
std::cout << "begin read video" << std::endl;
cv::VideoCapture capture(videoFilePath);
if (!capture.isOpened()) {
printf("could not read this video file...\n");
return -1;
}
std::cout << "end read video" << std::endl;
while (true)
{
cv::Mat frame;
if (!capture.read(frame)) // if not success, break loop
{
std::cout << "\n Cannot read the video file. please check your video.\n";
break;
}
unsigned int bufferLength = 0;
cv::Mat croppedFrame = frame.clone();// frame(cv::Rect(1440, 0, 320, 320)).clone();// frame.clone();//frame(cv::Rect(1250, 0, 640, 640)).clone();//frame.clone();// frame.clone();//
unsigned char* jpeg_string = ANSCENTER::ANSUtilityHelper::CVMatToBytes(croppedFrame, bufferLength);
int height = croppedFrame.rows;
int width = croppedFrame.cols;
auto start = std::chrono::system_clock::now();
/* measured work */
std::string detectionResult = RunInferenceBinary(&infHandle, jpeg_string, width, height);
auto end = std::chrono::system_clock::now();
auto elapsed = std::chrono::duration_cast<std::chrono::milliseconds>(end - start);
printf("Time = %lld ms\n", static_cast<long long int>(elapsed.count()));
delete jpeg_string;
if (!detectionResult.empty()) {
pt.clear();
std::stringstream ss;
ss.clear();
ss << detectionResult;
boost::property_tree::read_json(ss, pt);
BOOST_FOREACH(const boost::property_tree::ptree::value_type & child, pt.get_child("results"))
{
const boost::property_tree::ptree& result = child.second;
const auto class_id = GetData<int>(result, "class_id");
const auto x = GetData<float>(result, "x");
const auto y = GetData<float>(result, "y");
const auto width = GetData<float>(result, "width");
const auto height = GetData<float>(result, "height");
cv::rectangle(croppedFrame, cv::Rect(x, y, width, height), 123, 2);
cv::putText(croppedFrame, cv::format("%s:%d", classes[class_id], class_id), cv::Point(x, y - 5),
0, 0.6, cv::Scalar(0, 0, 255), 1, cv::LINE_AA);
}
}
cv::imshow("ANS Object Tracking", croppedFrame);
if (cv::waitKey(30) == 27) // Wait for 'esc' key press to exit
{
break;
}
croppedFrame.release();
}
capture.release();
cv::destroyAllWindows();
ReleaseANSODHandle(&infHandle);
std::cout << "End of program.\n";
return 0;
}
int UnitTests() {
std::string defaultDir = "C:\\Programs";
std::string abmodelFilePath = defaultDir + "\\DemoAssets\\ANSAIModels\\anomalibmodel.zip";
std::string cpumodelFilePath = "C:\\ProgramData\\ANSCENTER\\Shared\\ANS_GenericOD(CPU)_v1.0.zip";
std::string gpumodelFilePath = defaultDir + "\\DemoAssets\\ANSAIModels\\OptimisedModels\\ANS_GenericOD(GPU)_v1.0.zip";
std::string Yolov8OpenVINOModelPath = defaultDir + "\\DemoAssets\\Models\\ANS_GenericOD(CPU)YL8_v1.0.zip";
std::string Yolov8OTensorRTModelPath = defaultDir + "\\DemoAssets\\ANSAIModels\\OptimisedModels\\PPEGPU.zip";
std::string odhubModelPath = defaultDir + "\\DemoAssets\\Models\\openflapmulticat_v1.zip";
std::string openposeModelPath = defaultDir + "\\ANSAIModels\\ANS_PoseEstimation_v1.0.zip";
std::string samModelPath = defaultDir + "\\ANSAIModels\\ANS_SAM_v1.0.zip";
std::string customModelPath = defaultDir + "\\ANLS\\AIModels\\ANSCustomModel_v3.zip";
std::string abImageFilePath = defaultDir + "\\TestImages\\brokenlarge.png";
std::string customModelImage = defaultDir + "\\ANLS\\AIModels\\LP2.jpg";
std::string imageDataPath = defaultDir + "\\DemoAssets\\TestImages\\ALPR\\101_EUS664.jpg";
std::string videoDataPath = defaultDir + "\\DemoAssets\\Videos\\road.mp4";
std::string videoPPEPath = defaultDir + "\\DemoAssets\\Videos\\Factory1.mp4";
std::string odhubVideoPath = defaultDir + "\\DemoAssets\\Videos\\openflap.mp4";
std::string openposeVideoPath = defaultDir + "\\DemoAssets\\Videos\\train.mp4";;
std::string openposeImagePath = defaultDir + "\\DemoAssets\\TestImages\\ANSCVAImages\\openpose.jpg";
std::string classroom = defaultDir + "\\DemoAssets\\Videos\\classroom.mp4";
std::string classroomGPUTest = "C:\\ProgramData\\ANSCENTER\\Shared\\classroom.mp4";
std::string modelGPUTest = "C:\\ProgramData\\ANSCENTER\\Shared\\ANS_GenericOD(GPU)_v1.0.zip";
// OpenVINOEngineUnitTest(Yolov8OpenVINOModelPath, videoDataPath); // Yolov8
//GPUEngineUnitTest(Yolov8OTensorRTModelPath, videoPPEPath);// yolov8
// OpenVINOYolov10EngineUnitTestLoop(cpumodelFilePath, classroom);//yolov10
OpenVINOYolov10EngineUnitTest(cpumodelFilePath, classroom);//yolov10
// GPUYolov10EngineUnitTest(modelGPUTest, classroomGPUTest);// yolov10
//ODHUBAPITest(odhubModelPath, odhubVideoPath);
//AnomalibTest(abmodelFilePath, abImageFilePath);
//FacialDetectorTest(cpumodelFilePath, imageDataPath);
//HumanPoseTest(openposeModelPath, openposeVideoPath);
//HumanPoseImageTest(openposeModelPath, openposeImagePath);
//ANSSAMTest(samModelPath, openflapVideoPath);
//CustomCodeImageTest(customModelPath, customModelImage);
//ALPRPipeLineTest(gpumodelFilePath, videoFilePathPipeLine);
return 0;
}
int FacialDetectorTest(std::string modelFilePath, std::string imagePath) {
boost::property_tree::ptree root;
boost::property_tree::ptree detectionObjects;
boost::property_tree::ptree pt;
std::vector<std::string> classes;
std::filesystem::path currentPath = std::filesystem::current_path();
ANSCENTER::ANSODBase* infHandle;
std::string labelMap;
std::string licenseKey = "";
std::string modelZipFilePassword = "";
float modelThreshold = 0.5;
float modelConfThreshold = 0.5;
float modelNMSThreshold = 0.5;
int modelType = 6;//Facial
int detectorType = 1; // Detection
labelMap = CreateANSODHandle(&infHandle, licenseKey.c_str(), modelFilePath.c_str(), modelZipFilePassword.c_str(), modelThreshold, modelConfThreshold, modelNMSThreshold, 1, modelType, detectorType);
std::stringstream ss(labelMap);
while (ss.good())
{
std::string substr;
getline(ss, substr, ',');
classes.push_back(substr);
}
std::cout << "classes:" << classes.size();
cv::Mat frame = cv::imread(imagePath, cv::IMREAD_COLOR);
unsigned int bufferLength = 0;
unsigned char* jpeg_string = ANSCENTER::ANSUtilityHelper::CVMatToBytes(frame, bufferLength);
int height = frame.rows;
int width = frame.cols;
auto start = std::chrono::system_clock::now();
/* measured work */
std::string detectionResult = RunInferenceBinary(&infHandle, jpeg_string, width, height);
auto end = std::chrono::system_clock::now();
auto elapsed = std::chrono::duration_cast<std::chrono::milliseconds>(end - start);
printf("Time = %lld ms\n", static_cast<long long int>(elapsed.count()));
std::cout << "Result:" << detectionResult << std::endl;
delete jpeg_string;
if (!detectionResult.empty()) {
pt.clear();
std::stringstream ss;
ss.clear();
ss << detectionResult;
boost::property_tree::read_json(ss, pt);
BOOST_FOREACH(const boost::property_tree::ptree::value_type & child, pt.get_child("results"))
{
const boost::property_tree::ptree& result = child.second;
const auto class_id = GetData<int>(result, "class_id");
const auto x = GetData<float>(result, "x");
const auto y = GetData<float>(result, "y");
const auto width = GetData<float>(result, "width");
const auto height = GetData<float>(result, "height");
cv::rectangle(frame, cv::Rect(x, y, width, height), 123, 2);
cv::putText(frame, cv::format("%s:%d", classes[class_id], class_id), cv::Point(x, y - 5),
0, 0.6, cv::Scalar(0, 0, 255), 1, cv::LINE_AA);
}
}
cv::imshow("ANS Object Tracking", frame);
if (cv::waitKey(0) == 27) // Wait for 'esc' key press to exit
{
std::cout << "End of facial detection.\n";
}
cv::destroyAllWindows();
ReleaseANSODHandle(&infHandle);
std::cout << "End of program.\n";
return 0;
}
int AnomalibTest(std::string abmodelFilePath, std::string abImageFilePath) {
boost::property_tree::ptree root;
boost::property_tree::ptree detectionObjects;
boost::property_tree::ptree pt;
std::vector<std::string> classes;
ANSCENTER::ANSODBase* infHandle;
std::string labelMap;
std::string licenseKey = "";
std::string modelZipFilePassword = "";
float modelThreshold = 0.5;
float modelConfThreshold = 0.5;
float modelNMSThreshold = 0.5;
int modelType = 10;//Facial
int detectorType = 2; // Segmentation
labelMap = CreateANSODHandle(&infHandle, licenseKey.c_str(), abmodelFilePath.c_str(), modelZipFilePassword.c_str(), modelThreshold, modelConfThreshold, modelNMSThreshold, 1, modelType, detectorType);
std::stringstream ss(labelMap);
while (ss.good())
{
std::string substr;
getline(ss, substr, ',');
classes.push_back(substr);
}
std::cout << "label map:" << labelMap << std::endl;
std::string imagePath = abImageFilePath;
cv::Mat frame = cv::imread(imagePath, cv::IMREAD_COLOR);
unsigned int bufferLength = 0;
unsigned char* jpeg_string = ANSCENTER::ANSUtilityHelper::CVMatToBytes(frame, bufferLength);
int height = frame.rows;
int width = frame.cols;
auto start = std::chrono::system_clock::now();
/* measured work */
std::string detectionResult = RunInferenceBinary(&infHandle, jpeg_string, width, height);
auto end = std::chrono::system_clock::now();
auto elapsed = std::chrono::duration_cast<std::chrono::milliseconds>(end - start);
printf("Time = %lld ms\n", static_cast<long long int>(elapsed.count()));
std::cout << "Result:" << detectionResult << std::endl;
delete jpeg_string;
cv::imshow("ANS Object Tracking", frame);
if (cv::waitKey(0) == 27) // Wait for 'esc' key press to exit
{
std::cout << "End of abnomalib detection.\n";
}
cv::destroyAllWindows();
ReleaseANSODHandle(&infHandle);
std::cout << "End of program.\n";
return 0;
}
int HumanPoseTest(std::string modelFilePath, std::string imagePath) {
boost::property_tree::ptree root;
boost::property_tree::ptree detectionObjects;
boost::property_tree::ptree pt;
std::vector<std::string> classes;
std::filesystem::path currentPath = std::filesystem::current_path();
ANSCENTER::ANSODBase* infHandle;
std::string labelMap;
std::string licenseKey = "";
std::string modelZipFilePassword = "";
float modelThreshold = 0.5;
float modelConfThreshold = 0.5;
float modelNMSThreshold = 0.5;
int modelType = 11;//POSE
int detectorType = 7; // KEYPOINT
labelMap = CreateANSODHandle(&infHandle, licenseKey.c_str(), modelFilePath.c_str(), modelZipFilePassword.c_str(), modelThreshold, modelConfThreshold, modelNMSThreshold, 1, modelType, detectorType);
std::stringstream ss(labelMap);
while (ss.good())
{
std::string substr;
getline(ss, substr, ',');
classes.push_back(substr);
}
std::cout << "classes:" << classes.size();
cv::VideoCapture capture(imagePath);
if (!capture.isOpened()) {
printf("could not read this video file...\n");
return -1;
}
while (true)
{
cv::Mat frame;
if (!capture.read(frame)) // if not success, break loop
{
std::cout << "\n Cannot read the video file. please check your video.\n";
break;
}
unsigned int bufferLength = 0;
unsigned char* jpeg_string = ANSCENTER::ANSUtilityHelper::CVMatToBytes(frame, bufferLength);
int height = frame.rows;
int width = frame.cols;
auto start = std::chrono::system_clock::now();
/* measured work */
std::string detectionResult = RunInferenceBinary(&infHandle, jpeg_string, width, height);
auto end = std::chrono::system_clock::now();
auto elapsed = std::chrono::duration_cast<std::chrono::milliseconds>(end - start);
printf("Time = %lld ms\n", static_cast<long long int>(elapsed.count()));
delete jpeg_string;
if (!detectionResult.empty()) {
pt.clear();
std::stringstream ss;
ss.clear();
ss << detectionResult;
boost::property_tree::read_json(ss, pt);
BOOST_FOREACH(const boost::property_tree::ptree::value_type & child, pt.get_child("results"))
{
const boost::property_tree::ptree& result = child.second;
const auto class_id = GetData<int>(result, "class_id");
const auto x = GetData<float>(result, "x");
const auto y = GetData<float>(result, "y");
const auto width = GetData<float>(result, "width");
const auto height = GetData<float>(result, "height");
cv::rectangle(frame, cv::Rect(x, y, width, height), 123, 2);
cv::putText(frame, cv::format("%s:%d", classes[class_id], class_id), cv::Point(x, y - 5),
0, 0.6, cv::Scalar(0, 0, 255), 1, cv::LINE_AA);
std::cout << "Keypoints =[" << GetData<std::string>(result, "extra_info") << "]" << std::endl;
}
}
cv::imshow("ANS Object Tracking", frame);
if (cv::waitKey(30) == 27) // Wait for 'esc' key press to exit
{
break;
}
}
capture.release();
cv::destroyAllWindows();
ReleaseANSODHandle(&infHandle);
std::cout << "End of program.\n";
return 0;
}
int HumanPoseImageTest(std::string modelFilePath, std::string imagePath) {
boost::property_tree::ptree root;
boost::property_tree::ptree detectionObjects;
boost::property_tree::ptree pt;
std::vector<std::string> classes;
std::filesystem::path currentPath = std::filesystem::current_path();
ANSCENTER::ANSODBase* infHandle;
std::string labelMap;
std::string licenseKey = "";
std::string modelZipFilePassword = "";
float modelThreshold = 0.5;
float modelConfThreshold = 0.5;
float modelNMSThreshold = 0.5;
int modelType = 11;//POSE
int detectorType = 7; // KEYPOINT
labelMap = CreateANSODHandle(&infHandle, licenseKey.c_str(), modelFilePath.c_str(), modelZipFilePassword.c_str(), modelThreshold, modelConfThreshold, modelNMSThreshold, 1, modelType, detectorType);
std::stringstream ss(labelMap);
while (ss.good())
{
std::string substr;
getline(ss, substr, ',');
classes.push_back(substr);
}
std::cout << "classes:" << classes.size();
cv::Mat frame = cv::imread(imagePath, cv::IMREAD_COLOR);
unsigned int bufferLength = 0;
unsigned char* jpeg_string = ANSCENTER::ANSUtilityHelper::CVMatToBytes(frame, bufferLength);
int height = frame.rows;
int width = frame.cols;
auto start = std::chrono::system_clock::now();
/* measured work */
std::string detectionResult = RunInferenceBinary(&infHandle, jpeg_string, width, height);
auto end = std::chrono::system_clock::now();
auto elapsed = std::chrono::duration_cast<std::chrono::milliseconds>(end - start);
printf("Time = %lld ms\n", static_cast<long long int>(elapsed.count()));
std::cout << "Result:" << detectionResult << std::endl;
delete jpeg_string;
if (!detectionResult.empty()) {
pt.clear();
std::stringstream ss;
ss.clear();
ss << detectionResult;
boost::property_tree::read_json(ss, pt);
BOOST_FOREACH(const boost::property_tree::ptree::value_type & child, pt.get_child("results"))
{
const boost::property_tree::ptree& result = child.second;
const auto class_id = GetData<int>(result, "class_id");
const auto x = GetData<float>(result, "x");
const auto y = GetData<float>(result, "y");
const auto width = GetData<float>(result, "width");
const auto height = GetData<float>(result, "height");
cv::rectangle(frame, cv::Rect(x, y, width, height), 123, 2);
cv::putText(frame, cv::format("%s:%d", classes[class_id], class_id), cv::Point(x, y - 5),
0, 0.6, cv::Scalar(0, 0, 255), 1, cv::LINE_AA);
std::cout << "Keypoints =[" << GetData<std::string>(result, "extra_info") << "]" << std::endl;
}
}
cv::imshow("ANS Object Tracking", frame);
if (cv::waitKey(0) == 27) // Wait for 'esc' key press to exit
{
std::cout << "End of facial detection.\n";
}
cv::destroyAllWindows();
ReleaseANSODHandle(&infHandle);
std::cout << "End of program.\n";
return 0;
}
int ANSSAMTest(std::string modelFilePath, std::string videoPath) {
ANSCENTER::ANSSAM infHandle;
std::string licenseKey = "";
std::string labelmap = "";
std::string modelZipFilePassword = "";
ANSCENTER::ModelConfig modelConfig;
modelConfig.modelConfThreshold = 0.5f;
infHandle.Initialize(licenseKey, modelConfig, modelFilePath, modelZipFilePassword, labelmap);
cv::VideoCapture capture(videoPath);
if (!capture.isOpened()) {
printf("could not read this video file...\n");
return -1;
}
while (true)
{
cv::Mat frame;
if (!capture.read(frame)) // if not success, break loop
{
std::cout << "\n Cannot read the video file. please check your video.\n";
break;
}
auto start = std::chrono::system_clock::now();
std::vector<ANSCENTER::Object> masks = infHandle.RunInference(frame);
auto end = std::chrono::system_clock::now();
auto elapsed = std::chrono::duration_cast<std::chrono::milliseconds>(end - start);
printf("Time = %lld ms\n", static_cast<long long int>(elapsed.count()));
for (int i = 0; i < masks.size(); i++) {
cv::rectangle(frame, masks.at(i).box, 123, 2);
//const cv::Point* pts = (const cv::Point*)cv::Mat(masks.at(i).polygon).data;
//int npts = cv::Mat(masks.at(i).polygon).rows;
//polylines(frame, &pts, &npts, 1, true, cv::Scalar(0, 255, 0), 1); // Green color, line thickness 3
}
cv::imshow("ANS Object Tracking", frame);
if (cv::waitKey(30) == 27) // Wait for 'esc' key press to exit
{
break;
}
}
capture.release();
cv::destroyAllWindows();
infHandle.Destroy();
std::cout << "End of program.\n";
return 0;
}
int ODHUBAPITest(std::string modelFilePath, std::string videoFilePath) {
boost::property_tree::ptree root;
boost::property_tree::ptree detectionObjects;
boost::property_tree::ptree pt;
std::vector<std::string> classes;
std::filesystem::path currentPath = std::filesystem::current_path();
ANSCENTER::ANSODBase* infHandle;
std::string labelMap;
std::string modelZipFilePassword = "";
float modelThreshold = 0.7;
float modelConfThreshold = 0.5;
float modelNMSThreshold = 0.5;
int modelType = 13;//ODHUBAPI ;1 is yolov4 opencv
int detectorType = 1;
std::string optmizedModelFolder;
// Optimise model
std::cout << "Optimizing model, please wait...." << std::endl;
optmizedModelFolder = OptimizeModelStr(modelFilePath.c_str(), modelZipFilePassword.c_str(), modelType,1, 1);
std::cout << "Model is optmized, run inference...." << std::endl;
labelMap = CreateANSODHandle(&infHandle, "", modelFilePath.c_str(), modelZipFilePassword.c_str(), modelThreshold, modelConfThreshold, modelNMSThreshold, 1, modelType, detectorType);
std::stringstream ss(labelMap);
while (ss.good())
{
std::string substr;
getline(ss, substr, ',');
classes.push_back(substr);
}
std::cout << "classes:" << classes.size();
std::cout << "begin read video" << std::endl;
cv::VideoCapture capture(videoFilePath);
if (!capture.isOpened()) {
printf("could not read this video file...\n");
return -1;
}
std::cout << "end read video" << std::endl;
while (true)
{
cv::Mat frame;
if (!capture.read(frame)) // if not success, break loop
{
std::cout << "\n Cannot read the video file. please check your video.\n";
break;
}
unsigned int bufferLength = 0;
unsigned char* jpeg_string = ANSCENTER::ANSUtilityHelper::CVMatToBytes(frame, bufferLength);
int height = frame.rows;
int width = frame.cols;
auto start = std::chrono::system_clock::now();
/* measured work */
std::string detectionResult = RunInferenceBinary(&infHandle, jpeg_string, width, height);
auto end = std::chrono::system_clock::now();
auto elapsed = std::chrono::duration_cast<std::chrono::milliseconds>(end - start);
printf("Time = %lld ms\n", static_cast<long long int>(elapsed.count()));
delete jpeg_string;
if (!detectionResult.empty()) {
pt.clear();
std::stringstream ss;
ss.clear();
ss << detectionResult;
boost::property_tree::read_json(ss, pt);
BOOST_FOREACH(const boost::property_tree::ptree::value_type & child, pt.get_child("results"))
{
const boost::property_tree::ptree& result = child.second;
const auto class_id = GetData<int>(result, "class_id");
const auto x = GetData<float>(result, "x");
const auto y = GetData<float>(result, "y");
const auto width = GetData<float>(result, "width");
const auto height = GetData<float>(result, "height");
cv::rectangle(frame, cv::Rect(x, y, width, height), 123, 2);
cv::putText(frame, cv::format("%s:%d", classes[class_id], class_id), cv::Point(x, y - 5),
0, 0.6, cv::Scalar(0, 0, 255), 1, cv::LINE_AA);
}
}
cv::imshow("ANS Object Tracking", frame);
if (cv::waitKey(30) == 27) // Wait for 'esc' key press to exit
{
break;
}
}
capture.release();
cv::destroyAllWindows();
ReleaseANSODHandle(&infHandle);
std::cout << "End of program.\n";
return 0;
}
int ODHUBOpenCVAPITest(std::string modelFilePath, std::string videoFilePath) {
boost::property_tree::ptree root;
boost::property_tree::ptree detectionObjects;
boost::property_tree::ptree pt;
std::vector<std::string> classes;
std::filesystem::path currentPath = std::filesystem::current_path();
ANSCENTER::ANSODBase* infHandle;
std::string labelMap;
std::string modelZipFilePassword = "";
float modelThreshold = 0.7;
float modelConfThreshold = 0.5;
float modelNMSThreshold = 0.5;
int modelType = 13;//ODHUBAPI ;1 is yolov4 opencv
int detectorType = 1;
std::string optmizedModelFolder;
// Optimise model
std::cout << "Optimizing model, please wait...." << std::endl;
optmizedModelFolder = OptimizeModelStr(modelFilePath.c_str(), modelZipFilePassword.c_str(), modelType,1, 1);
std::cout << "Model is optmized, run inference...." << std::endl;
labelMap = CreateANSODHandle(&infHandle, "", modelFilePath.c_str(), modelZipFilePassword.c_str(), modelThreshold, modelConfThreshold, modelNMSThreshold, 1, modelType, detectorType);
std::stringstream ss(labelMap);
while (ss.good())
{
std::string substr;
getline(ss, substr, ',');
classes.push_back(substr);
}
std::cout << "classes:" << classes.size();
std::cout << "begin read video" << std::endl;
cv::VideoCapture capture(videoFilePath);
if (!capture.isOpened()) {
printf("could not read this video file...\n");
return -1;
}
std::cout << "end read video" << std::endl;
while (true)
{
cv::Mat frame;
if (!capture.read(frame)) // if not success, break loop
{
std::cout << "\n Cannot read the video file. please check your video.\n";
break;
}
unsigned int bufferLength = 0;
unsigned char* jpeg_string = ANSCENTER::ANSUtilityHelper::CVMatToBytes(frame, bufferLength);
int height = frame.rows;
int width = frame.cols;
auto start = std::chrono::system_clock::now();
/* measured work */
std::string detectionResult = RunInferenceBinary(&infHandle, jpeg_string, width, height);
auto end = std::chrono::system_clock::now();
auto elapsed = std::chrono::duration_cast<std::chrono::milliseconds>(end - start);
printf("Time = %lld ms\n", static_cast<long long int>(elapsed.count()));
delete jpeg_string;
if (!detectionResult.empty()) {
pt.clear();
std::stringstream ss;
ss.clear();
ss << detectionResult;
boost::property_tree::read_json(ss, pt);
BOOST_FOREACH(const boost::property_tree::ptree::value_type & child, pt.get_child("results"))
{
const boost::property_tree::ptree& result = child.second;
const auto class_id = GetData<int>(result, "class_id");
const auto x = GetData<float>(result, "x");
const auto y = GetData<float>(result, "y");
const auto width = GetData<float>(result, "width");
const auto height = GetData<float>(result, "height");
cv::rectangle(frame, cv::Rect(x, y, width, height), 123, 2);
cv::putText(frame, cv::format("%s:%d", classes[class_id], class_id), cv::Point(x, y - 5),
0, 0.6, cv::Scalar(0, 0, 255), 1, cv::LINE_AA);
}
}
cv::imshow("ANS Object Tracking", frame);
if (cv::waitKey(30) == 27) // Wait for 'esc' key press to exit
{
break;
}
}
capture.release();
cv::destroyAllWindows();
ReleaseANSODHandle(&infHandle);
std::cout << "End of program.\n";
return 0;
}
int ODHUBAPIImageTest(std::string modelFilePath, std::string imageFilePath) {
boost::property_tree::ptree root;
boost::property_tree::ptree detectionObjects;
boost::property_tree::ptree pt;
std::vector<std::string> classes;
std::filesystem::path currentPath = std::filesystem::current_path();
ANSCENTER::ANSODBase* infHandle;
std::string labelMap;
std::string modelZipFilePassword = "";
float modelThreshold = 0.7;
float modelConfThreshold = 0.5;
float modelNMSThreshold = 0.5;
int modelType = 13;//ODHUBAPI ;1 is yolov4 opencv
int detectorType = 1;
std::string optmizedModelFolder;
// Optimise model
std::cout << "Optimizing model, please wait...." << std::endl;
optmizedModelFolder = OptimizeModelStr(modelFilePath.c_str(), modelZipFilePassword.c_str(), modelType,1, 1);
std::cout << "Model is optmized, run inference...." << std::endl;
labelMap = CreateANSODHandle(&infHandle, "", modelFilePath.c_str(), modelZipFilePassword.c_str(), modelThreshold, modelConfThreshold, modelNMSThreshold, 1, modelType, detectorType);
std::stringstream ss(labelMap);
while (ss.good())
{
std::string substr;
getline(ss, substr, ',');
classes.push_back(substr);
}
std::cout << "classes:" << classes.size();
std::cout << "begin read video" << std::endl;
cv::Mat frame = cv::imread(imageFilePath, cv::IMREAD_COLOR);
unsigned int bufferLength = 0;
unsigned char* jpeg_string = ANSCENTER::ANSUtilityHelper::CVMatToBytes(frame, bufferLength);
int height = frame.rows;
int width = frame.cols;
auto start = std::chrono::system_clock::now();
/* measured work */
std::string detectionResult = RunInferenceBinary(&infHandle, jpeg_string, width, height);
auto end = std::chrono::system_clock::now();
auto elapsed = std::chrono::duration_cast<std::chrono::milliseconds>(end - start);
printf("Time = %lld ms\n", static_cast<long long int>(elapsed.count()));
std::cout << "Result:" << detectionResult << std::endl;
delete jpeg_string;
if (!detectionResult.empty()) {
pt.clear();
std::stringstream ss;
ss.clear();
ss << detectionResult;
boost::property_tree::read_json(ss, pt);
BOOST_FOREACH(const boost::property_tree::ptree::value_type & child, pt.get_child("results"))
{
const boost::property_tree::ptree& result = child.second;
const auto class_id = GetData<int>(result, "class_id");
const auto x = GetData<float>(result, "x");
const auto y = GetData<float>(result, "y");
const auto width = GetData<float>(result, "width");
const auto height = GetData<float>(result, "height");
cv::rectangle(frame, cv::Rect(x, y, width, height), 123, 2);
cv::putText(frame, cv::format("%s:%d", classes[class_id], class_id), cv::Point(x, y - 5),
0, 0.6, cv::Scalar(255, 0, 0), 1, cv::LINE_AA);
std::cout << "Keypoints =[" << GetData<std::string>(result, "extra_info") << "]" << std::endl;
}
}
resize(frame, frame, Size(frame.cols / 2, frame.rows / 2)); // to half size or even smaller
namedWindow("Display frame", WINDOW_AUTOSIZE);
cv::imshow("Display frame", frame);
if (cv::waitKey(0) == 3) // Wait for 'esc' key press to exit
{
std::cout << "End of facial detection.\n";
}
cv::destroyAllWindows();
ReleaseANSODHandle(&infHandle);
std::cout << "End of program.\n";
return 0;
}
int ODHUBCVAPIImageTest(std::string modelFilePath, std::string imageFilePath) {
boost::property_tree::ptree root;
boost::property_tree::ptree detectionObjects;
boost::property_tree::ptree pt;
std::vector<std::string> classes;
std::filesystem::path currentPath = std::filesystem::current_path();
ANSCENTER::ANSODBase* infHandle;
std::string labelMap;
std::string modelZipFilePassword = "";
float modelThreshold = 0.7;
float modelConfThreshold = 0.5;
float modelNMSThreshold = 0.5;
int modelType = 1;//ODHUBAPI ;1 is yolov4 opencv
int detectorType = 1;
std::string optmizedModelFolder;
// Optimise model
std::cout << "Optimizing model, please wait...." << std::endl;
optmizedModelFolder = OptimizeModelStr(modelFilePath.c_str(), modelZipFilePassword.c_str(), modelType, 1,1);
std::cout << "Model is optmized, run inference...." << std::endl;
labelMap = CreateANSODHandle(&infHandle, "", modelFilePath.c_str(), modelZipFilePassword.c_str(), modelThreshold, modelConfThreshold, modelNMSThreshold, 1, modelType, detectorType);
std::stringstream ss(labelMap);
while (ss.good())
{
std::string substr;
getline(ss, substr, ',');
classes.push_back(substr);
}
std::cout << "classes:" << classes.size();
std::cout << "begin read video" << std::endl;
cv::Mat frame = cv::imread(imageFilePath, cv::IMREAD_COLOR);
unsigned int bufferLength = 0;
unsigned char* jpeg_string = ANSCENTER::ANSUtilityHelper::CVMatToBytes(frame, bufferLength);
int height = frame.rows;
int width = frame.cols;
auto start = std::chrono::system_clock::now();
/* measured work */
std::string detectionResult = RunInferenceBinary(&infHandle, jpeg_string, width, height);
auto end = std::chrono::system_clock::now();
auto elapsed = std::chrono::duration_cast<std::chrono::milliseconds>(end - start);
printf("Time = %lld ms\n", static_cast<long long int>(elapsed.count()));
std::cout << "Result:" << detectionResult << std::endl;
delete jpeg_string;
if (!detectionResult.empty()) {
pt.clear();
std::stringstream ss;
ss.clear();
ss << detectionResult;
boost::property_tree::read_json(ss, pt);
BOOST_FOREACH(const boost::property_tree::ptree::value_type & child, pt.get_child("results"))
{
const boost::property_tree::ptree& result = child.second;
const auto class_id = GetData<int>(result, "class_id");
const auto x = GetData<float>(result, "x");
const auto y = GetData<float>(result, "y");
const auto width = GetData<float>(result, "width");
const auto height = GetData<float>(result, "height");
cv::rectangle(frame, cv::Rect(x, y, width, height), 123, 2);
cv::putText(frame, cv::format("%s:%d", classes[class_id], class_id), cv::Point(x, y - 5),
0, 0.6, cv::Scalar(255, 0, 0), 1, cv::LINE_AA);
std::cout << "Keypoints =[" << GetData<std::string>(result, "extra_info") << "]" << std::endl;
}
}
resize(frame, frame, Size(frame.cols / 2, frame.rows / 2)); // to half size or even smaller
namedWindow("Display frame", WINDOW_AUTOSIZE);
cv::imshow("Display frame", frame);
if (cv::waitKey(0) == 3) // Wait for 'esc' key press to exit
{
std::cout << "End of facial detection.\n";
}
cv::destroyAllWindows();
ReleaseANSODHandle(&infHandle);
std::cout << "End of program.\n";
return 0;
}
int CustomCodeImageTest(std::string modelFilePath, std::string imageFilePath) {
boost::property_tree::ptree root;
boost::property_tree::ptree detectionObjects;
boost::property_tree::ptree pt;
std::vector<std::string> classes;
std::filesystem::path currentPath = std::filesystem::current_path();
ANSCENTER::ANSODBase* infHandle;
std::string labelMap;
std::string modelZipFilePassword = "";
float modelThreshold = 0.7;
float modelConfThreshold = 0.5;
float modelNMSThreshold = 0.5;
int modelType = 16;//Customized
int detectorType = 1;
std::string optmizedModelFolder;
labelMap = CreateANSODHandle(&infHandle, "", modelFilePath.c_str(), modelZipFilePassword.c_str(), modelThreshold, modelConfThreshold, modelNMSThreshold, 1, modelType, detectorType);
cv::Mat frame = cv::imread(imageFilePath, cv::IMREAD_COLOR);
unsigned int bufferLength = 0;
unsigned char* jpeg_string = ANSCENTER::ANSUtilityHelper::CVMatToBytes(frame, bufferLength);
int height = frame.rows;
int width = frame.cols;
auto start = std::chrono::system_clock::now();
/* measured work */
std::string detectionResult = RunInferenceBinary(&infHandle, jpeg_string, width, height);
auto end = std::chrono::system_clock::now();
auto elapsed = std::chrono::duration_cast<std::chrono::milliseconds>(end - start);
printf("Time = %lld ms\n", static_cast<long long int>(elapsed.count()));
std::cout << "Result:" << detectionResult << std::endl;
delete jpeg_string;
if (!detectionResult.empty()) {
pt.clear();
std::stringstream ss;
ss.clear();
ss << detectionResult;
boost::property_tree::read_json(ss, pt);
BOOST_FOREACH(const boost::property_tree::ptree::value_type & child, pt.get_child("results"))
{
const boost::property_tree::ptree& result = child.second;
const auto class_id = GetData<int>(result, "class_id");
const auto x = GetData<float>(result, "x");
const auto y = GetData<float>(result, "y");
const auto width = GetData<float>(result, "width");
const auto height = GetData<float>(result, "height");
cv::rectangle(frame, cv::Rect(x, y, width, height), 123, 2);
cv::putText(frame, cv::format("%s:%d", "Test", class_id), cv::Point(x, y - 5),
0, 0.6, cv::Scalar(0, 0, 255), 1, cv::LINE_AA);
std::cout << "Keypoints =[" << GetData<std::string>(result, "extra_info") << "]" << std::endl;
}
}
cv::imshow("ANS Object Tracking", frame);
if (cv::waitKey(0) == 27) // Wait for 'esc' key press to exit
{
std::cout << "End of facial detection.\n";
}
cv::destroyAllWindows();
ReleaseANSODHandle(&infHandle);
std::cout << "End of program.\n";
return 0;
}
int FallDetection() {
std::string cpumodelFilePath = "C:\\Projects\\ANSVIS\\Models\\ANS_FallDetection(CPU)_v1.0.zip";
std::string gpumodelFilePath = "C:\\Projects\\ANSVIS\\Models\\ANS_FallDetection(GPU)_v1.0.zip";
std::string videoFile = "C:\\Programs\\TrainingWorkingStation\\Projects\\FallDetection\\video\\Fall.mp4";
std::string MAFallVideo = "C:\\Programs\\DemoAssets\\Videos\\MAFall.mp4";
std::string cpumodelFilePathM = "C:\\Programs\\TrainingWorkingStation\\Projects\\FallDetection\\RawModelModified\\ANS_FallDetectionM(CPU)_v1.0.zip";
std::string gpumodelFilePathM = "C:\\Programs\\TrainingWorkingStation\\Projects\\FallDetection\\RawModelModified\\ANS_FallDetectionM(GPU)_v1.0.zip";
std::string odhubModelPath = "C:\\Programs\\DemoAssets\\Models\\Fall_ODHUB.zip";
//OpenVINOEngineUnitTest(cpumodelFilePathM, videoFile);//yolov8
//GPUEngineUnitTest(gpumodelFilePath, videoFile);// yolov8
ODHUBOpenCVAPITest(odhubModelPath, MAFallVideo);
return 0;
}
int HeadDetection() {
std::string cpumodelFilePath = "C:\\Programs\\DemoAssets\\ANSAIModels\\ANS_PeopleHead(CPU)_v1.zip";
std::string gpumodelFilePath = "C:\\ProgramData\\ANSCENTER\\ANSVIS Server\\Models\\ServerOptimised\\B-IN_ANS_PeopleHead(GPU)_v1.0_6111783b89cda8cf337ad2d60c8b2eea_NVIDIAGeForceRTX4070LaptopGPU.zip";// "C:\\Projects\\ANSVIS\\Models\\ANS_PeopleHead(GPU)_v1.0.zip";
std::string videoFile = "C:\\Programs\\DemoAssets\\Videos\\video_20.mp4";
// OpenVINOEngineUnitTest(gpumodelFilePath, videoFile);//yolov8
//OpenVINOEngineUnitTest(FallModelCPU, FallVideoFile);//yolov8
//OpenVINOEngineUnitTest(PPECPUMOdel, PPEVideoFile);//yolov8
GPUEngineUnitTest(gpumodelFilePath, videoFile);// yolov8
//GPUEngineUnitTest(PPEGPUMOdel, PPEVideoFile);// yolov8
return 0;
}
int FireNSmokeDetection() {
std::string cpumodelFilePath = "C:\\Projects\\ANSVIS\\Models\\ANS_FireSmoke(CPU)_v1.0.zip";
std::string gpumodelFilePath = "C:\\Programs\\ModelExports\\ANS_FireSmoke(GPU)_v1.0\\ANS_FireSmoke(GPU)_v1.0.zip";
std::string gpumodel10FilePath = "C:\\Programs\\ModelExports\\HoangWork\\ANS_FireSmoke(GPU)_v2.0.zip";
std::string optimisedModelPath = "C:\\ProgramData\\ANSCENTER\\ANSVIS Server\\Models\\ServerOptimised\\B-IN_ANS_GenericOD(GPU)_v1.0_d52ffdcc7241b541fdcf17f2eff78b89_NVIDIAGeForceRTX4070LaptopGPU.zip";
std::string optimisedModelPath8 = "C:\\ProgramData\\ANSCENTER\\ANSVIS Server\\Models\\ServerOptimised\\B-IN_ANS_PeopleHead(GPU)_v1.0_6111783b89cda8cf337ad2d60c8b2eea_NVIDIAGeForceRTX4070LaptopGPU.zip";
std::string videoFile = "C:\\Programs\\DemoAssets\\Videos\\FireNSmoke\\Fire1.mp4";
//GPUYolov10EngineUnitTest(optimisedModelPath, videoFile);// yolov10
GPUEngineUnitTest(optimisedModelPath8, videoFile);// yolov8
//OpenVINOEngineUnitTest(cpumodelFilePath, videoFile);//yolov8
//GPUEngineUnitTest(gpumodelFilePath, videoFile);// yolov8
// ONNXEngineUnitTest(gpumodelFilePath, videoFile);
return 0;
}
int VehicleDetection() {
std::string cpumodelFilePath = "C:\\Programs\\DemoAssets\\ANSAIModels\\ANS_GenericVehicle8(CPU)_v1.0.zip";
std::string gpumodelFilePath = "C:\\Programs\\DemoAssets\\AIModels\\ODv8xGPUGeneric.zip";
std::string cpumodel10FilePath = "C:\\Programs\\DemoAssets\\ANSAIModels\\ANS_GenericVehicle(CPU)_v1.0.zip";
std::string gpumodel10FilePath = "C:\\Programs\\AIModels\\ANS_GenericOD(GPU)_v1.0.zip";
std::string videoFile = "C:\\Programs\\DemoAssets\\Videos\\road.mp4";
std::string hotelvideoFile = "C:\\Programs\\DemoAssets\\Videos\\video_20.mp4";
std::string testModel = "C:\\ProgramData\\ANSCENTER\\ANSVIS Server\\Models\\ServerOptimised\\B-IN_ANS_PeopleHead(GPU)_v1.0_6111783b89cda8cf337ad2d60c8b2eea_NVIDIAGeForceRTX4070LaptopGPU.zip";
// std::string testModel = "C:\\ProgramData\\ANSCENTER\\ANSVIS Server\\Models\\ServerOptimised\\B-IN_ANS_PeopleHead(GPU)_v1.0_6111783b89cda8cf337ad2d60c8b2eea_NVIDIARTXA500EmbeddedGPU.zip";
//GPUYolov10EngineUnitTest(gpumodel10FilePath, videoFile);// yolov10
//OpenVINOYolov10EngineUnitTestLoop(cpumodel10FilePath, videoFile);//yolov10
//OpenVINOEngineUnitTest(testModel, hotelvideoFile);//yolov8
GPUEngineUnitTest(testModel, hotelvideoFile);// yolov8
return 0;
}
void TestODHUB() {
std::string odhubModelPath = "C:\\Programs\\DemoAssets\\ANSAIModels\\Models\\openflapmulticat_v1.zip";
std::string odhubVideoPath = "C:\\Programs\\DemoAssets\\Videos\\openflap.mp4";
ODHUBAPITest(odhubModelPath, odhubVideoPath);
//ODHUBOpenCVAPITest(odhubModelPath, odhubVideoPath);
}
void DissemTest() {
std::string odhubModelPath = "C:\\Workstation\\CustomerSupport\\Dissem\\EngineTest\\Test_Model Type\\20240705_Waper_1.zip";
std::string odhubImagePath = "C:\\Workstation\\CustomerSupport\\Dissem\\EngineTest\\Test_Model Type\\0711_10_0051.jpg";
//ODHUBAPIImageTest(odhubModelPath, odhubImagePath);
ODHUBCVAPIImageTest(odhubModelPath, odhubImagePath);
}
int DissemParallelTest(std::string modelFilePath, std::string imageFilePath) {
boost::property_tree::ptree root;
boost::property_tree::ptree detectionObjects;
boost::property_tree::ptree pt;
std::vector<std::string> classes;
std::filesystem::path currentPath = std::filesystem::current_path();
ANSCENTER::ANSODBase* infHandle;
std::string labelMap;
std::string modelZipFilePassword = "";
float modelThreshold = 0.7;
float modelConfThreshold = 0.5;
float modelNMSThreshold = 0.5;
int modelType = 13;//ODHUBAPI ;1 is yolov4 opencv
int detectorType = 1;
std::string optmizedModelFolder;
// Optimise model
std::cout << "Optimizing model, please wait...." << std::endl;
optmizedModelFolder = OptimizeModelStr(modelFilePath.c_str(), modelZipFilePassword.c_str(), modelType, 1,1);
std::cout << "Model is optmized, run inference...." << std::endl;
labelMap = CreateANSODHandle(&infHandle, "", modelFilePath.c_str(), modelZipFilePassword.c_str(), modelThreshold, modelConfThreshold, modelNMSThreshold, 1, modelType, detectorType);
std::stringstream ss(labelMap);
while (ss.good())
{
std::string substr;
getline(ss, substr, ',');
classes.push_back(substr);
}
std::cout << "classes:" << classes.size();
std::cout << "begin read video" << std::endl;
cv::Mat frame = cv::imread(imageFilePath, cv::IMREAD_COLOR);
unsigned int bufferLength = 0;
unsigned char* jpeg_string = ANSCENTER::ANSUtilityHelper::CVMatToBytes(frame, bufferLength);
int height = frame.rows;
int width = frame.cols;
auto start = std::chrono::system_clock::now();
/* measured work */
std::string detectionResult = RunInferenceBinary(&infHandle, jpeg_string, width, height);
auto end = std::chrono::system_clock::now();
auto elapsed = std::chrono::duration_cast<std::chrono::milliseconds>(end - start);
printf("Time = %lld ms\n", static_cast<long long int>(elapsed.count()));
std::cout << "Result:" << detectionResult << std::endl;
delete jpeg_string;
if (!detectionResult.empty()) {
pt.clear();
std::stringstream ss;
ss.clear();
ss << detectionResult;
boost::property_tree::read_json(ss, pt);
BOOST_FOREACH(const boost::property_tree::ptree::value_type & child, pt.get_child("results"))
{
const boost::property_tree::ptree& result = child.second;
const auto class_id = GetData<int>(result, "class_id");
const auto x = GetData<float>(result, "x");
const auto y = GetData<float>(result, "y");
const auto width = GetData<float>(result, "width");
const auto height = GetData<float>(result, "height");
cv::rectangle(frame, cv::Rect(x, y, width, height), 123, 2);
cv::putText(frame, cv::format("%s:%d", classes[class_id], class_id), cv::Point(x, y - 5),
0, 0.6, cv::Scalar(255, 0, 0), 1, cv::LINE_AA);
std::cout << "Keypoints =[" << GetData<std::string>(result, "extra_info") << "]" << std::endl;
}
}
resize(frame, frame, Size(frame.cols / 2, frame.rows / 2)); // to half size or even smaller
namedWindow("Display frame", WINDOW_AUTOSIZE);
cv::imshow("Display frame", frame);
if (cv::waitKey(0) == 3) // Wait for 'esc' key press to exit
{
std::cout << "End of facial detection.\n";
}
cv::destroyAllWindows();
ReleaseANSODHandle(&infHandle);
std::cout << "End of program.\n";
return 0;
}
int CustomTest() {
std::string customModelPath = "C:\\Programs\\DemoAssets\\AIModels\\ANSCustomFaceDetector.zip";
std::string imageDataPath = "C:\\Projects\\ANSVISCustomFunction\\Examples\\FaceDetector\\test.jpg";
CustomCodeImageTest(customModelPath, imageDataPath);
return 0;
}
int CocoTest() {
std::string gpumodelFilePath = "C:\\ProgramData\\ANSCENTER\\Shared\\ANS_Coco_format(GPU)_1.zip";
std::string imageFile = "C:\\ProgramData\\ANSCENTER\\Shared\\20240620_132740_256.jpg";
GPUEngineImageTest(gpumodelFilePath, imageFile);
return 0;
}
int FaceDetector(std::string modelFilePath, std::string videoFilePath) {
boost::property_tree::ptree root;
boost::property_tree::ptree detectionObjects;
boost::property_tree::ptree pt;
std::vector<std::string> classes;
std::filesystem::path currentPath = std::filesystem::current_path();
ANSCENTER::ANSODBase* infHandle;
std::string labelMap;
std::string licenseKey = "";
std::string modelZipFilePassword = "";
float modelThreshold = 0.5;
float modelConfThreshold = 0.5;
float modelNMSThreshold = 0.5;
int modelType = 6;//Facial
int detectorType = 1; // Detection
// Optimise model
std::cout << "Model is optmized, run inference...." << std::endl;
labelMap = CreateANSODHandle(&infHandle, licenseKey.c_str(), modelFilePath.c_str(), modelZipFilePassword.c_str(), modelThreshold, modelConfThreshold, modelNMSThreshold, 1, modelType, detectorType);
std::stringstream ss(labelMap);
while (ss.good())
{
std::string substr;
getline(ss, substr, ',');
classes.push_back(substr);
}
std::cout << "classes:" << classes.size();
std::cout << "begin read video" << std::endl;
cv::VideoCapture capture(videoFilePath);
if (!capture.isOpened()) {
printf("could not read this video file...\n");
return -1;
}
std::cout << "end read video" << std::endl;
while (true)
{
cv::Mat frame;
if (!capture.read(frame)) // if not success, break loop
{
std::cout << "\n Cannot read the video file. please check your video.\n";
break;
}
unsigned int bufferLength = 0;
unsigned char* jpeg_string = ANSCENTER::ANSUtilityHelper::CVMatToBytes(frame, bufferLength);
int height = frame.rows;
int width = frame.cols;
auto start = std::chrono::system_clock::now();
/* measured work */
std::string detectionResult = RunInferenceBinary(&infHandle, jpeg_string, width, height);
auto end = std::chrono::system_clock::now();
auto elapsed = std::chrono::duration_cast<std::chrono::milliseconds>(end - start);
printf("Time = %lld ms\n", static_cast<long long int>(elapsed.count()));
delete jpeg_string;
if (!detectionResult.empty()) {
pt.clear();
std::stringstream ss;
ss.clear();
ss << detectionResult;
boost::property_tree::read_json(ss, pt);
BOOST_FOREACH(const boost::property_tree::ptree::value_type & child, pt.get_child("results"))
{
const boost::property_tree::ptree& result = child.second;
const auto class_id = GetData<int>(result, "class_id");
const auto x = GetData<float>(result, "x");
const auto y = GetData<float>(result, "y");
const auto width = GetData<float>(result, "width");
const auto height = GetData<float>(result, "height");
cv::rectangle(frame, cv::Rect(x, y, width, height), 123, 2);
cv::putText(frame, cv::format("%s:%d", classes[class_id], class_id), cv::Point(x, y - 5),
0, 0.6, cv::Scalar(0, 0, 255), 1, cv::LINE_AA);
}
}
cv::imshow("ANS Object Tracking", frame);
if (cv::waitKey(30) == 27) // Wait for 'esc' key press to exit
{
break;
}
}
capture.release();
cv::destroyAllWindows();
ReleaseANSODHandle(&infHandle);
std::cout << "End of program.\n";
return 0;
}
int TiledInferenceTest(std::string modelFilePath, std::string imageFilePath) {
boost::property_tree::ptree root;
boost::property_tree::ptree detectionObjects;
boost::property_tree::ptree pt;
std::vector<std::string> classes;
std::filesystem::path currentPath = std::filesystem::current_path();
ANSCENTER::ANSODBase* infHandle;
std::string labelMap;
std::string modelZipFilePassword = "";
float modelThreshold = 0.55;
float modelConfThreshold = 5;
float modelNMSThreshold = 0.5;
int modelType = 14;//
int detectorType = 1;
std::string optmizedModelFolder;
// Optimise model
std::cout << "Optimizing model, please wait...." << std::endl;
optmizedModelFolder = OptimizeModelStr(modelFilePath.c_str(), modelZipFilePassword.c_str(), modelType,1, 1);
std::cout << "Model is optmized, run inference...." << std::endl;
labelMap = CreateANSODHandle(&infHandle, "", modelFilePath.c_str(), modelZipFilePassword.c_str(), modelThreshold, modelConfThreshold, modelNMSThreshold, 1, modelType, detectorType);
std::stringstream ss(labelMap);
while (ss.good())
{
std::string substr;
getline(ss, substr, ',');
classes.push_back(substr);
}
cv::Mat frame = cv::imread(imageFilePath, cv::IMREAD_COLOR);
auto start1 = std::chrono::system_clock::now();
std::vector<uchar> imageData;
bool success = cv::imencode(".jpg", frame, imageData);
if (!success) {
std::cout << "Failed to encode the image" << std::endl;
return 0;
}
std::string jpegImage(imageData.begin(), imageData.end());
int height = frame.rows;
int width = frame.cols;
auto start = std::chrono::system_clock::now();
std::string detectionResult = RunTiledInferenceFromJpegString(&infHandle, jpegImage.c_str(), imageData.size(), 640, 640, 0.2, "TestCam");
auto end = std::chrono::system_clock::now();
auto elapsed = std::chrono::duration_cast<std::chrono::milliseconds>(end - start);
printf("Time = %lld ms\n", static_cast<long long int>(elapsed.count()));
std::cout << "Result:" << detectionResult << std::endl;
if (!detectionResult.empty()) {
pt.clear();
std::stringstream ss;
ss.clear();
ss << detectionResult;
boost::property_tree::read_json(ss, pt);
BOOST_FOREACH(const boost::property_tree::ptree::value_type & child, pt.get_child("results"))
{
const boost::property_tree::ptree& result = child.second;
const auto class_id = GetData<int>(result, "class_id");
const auto x = GetData<float>(result, "x");
const auto y = GetData<float>(result, "y");
const auto width = GetData<float>(result, "width");
const auto height = GetData<float>(result, "height");
cv::rectangle(frame, cv::Rect(x, y, width, height), 123, 2);
//cv::putText(frame, cv::format("%s:%d", classes[class_id], class_id), cv::Point(x, y - 5),
// 0, 0.6, cv::Scalar(255, 0, 0), 1, cv::LINE_AA);
// std::cout << "Keypoints =[" << GetData<std::string>(result, "extra_info") << "]" << std::endl;
}
}
//resize(frame, frame, Size(frame.cols / 2, frame.rows / 2)); // to half size or even smaller
//namedWindow("Display frame", WINDOW_AUTOSIZE);
cv::imshow("Display frame", frame);
if (cv::waitKey(0) == 3) // Wait for 'esc' key press to exit
{
std::cout << "End of facial detection.\n";
}
cv::destroyAllWindows();
ReleaseANSODHandle(&infHandle);
std::cout << "End of program.\n";
return 0;
}
int NormalInferenceTest(std::string modelFilePath, std::string imageFilePath) {
boost::property_tree::ptree root;
boost::property_tree::ptree detectionObjects;
boost::property_tree::ptree pt;
std::vector<std::string> classes;
std::filesystem::path currentPath = std::filesystem::current_path();
ANSCENTER::ANSODBase* infHandle;
std::string labelMap;
std::string modelZipFilePassword = "";
float modelThreshold = 0.55;
float modelConfThreshold = 5;
float modelNMSThreshold = 0.5;
int modelType = 14;//
int detectorType = 1;
std::string optmizedModelFolder;
// Optimise model
std::cout << "Optimizing model, please wait...." << std::endl;
optmizedModelFolder = OptimizeModelStr(modelFilePath.c_str(), modelZipFilePassword.c_str(), modelType,1, 1);
std::cout << "Model is optmized, run inference...." << std::endl;
labelMap = CreateANSODHandle(&infHandle, "", modelFilePath.c_str(), modelZipFilePassword.c_str(), modelThreshold, modelConfThreshold, modelNMSThreshold, 1, modelType, detectorType);
std::stringstream ss(labelMap);
while (ss.good())
{
std::string substr;
getline(ss, substr, ',');
classes.push_back(substr);
}
cv::Mat frame = cv::imread(imageFilePath, cv::IMREAD_COLOR);
auto start1 = std::chrono::system_clock::now();
std::vector<uchar> imageData;
bool success = cv::imencode(".jpg", frame, imageData);
if (!success) {
std::cout << "Failed to encode the image" << std::endl;
return 0;
}
std::string jpegImage(imageData.begin(), imageData.end());
int height = frame.rows;
int width = frame.cols;
auto start = std::chrono::system_clock::now();
std::string detectionResult = RunInferenceFromJpegString(&infHandle, jpegImage.c_str(), imageData.size(), "TestCam");
auto end = std::chrono::system_clock::now();
auto elapsed = std::chrono::duration_cast<std::chrono::milliseconds>(end - start);
printf("Time = %lld ms\n", static_cast<long long int>(elapsed.count()));
std::cout << "Result:" << detectionResult << std::endl;
if (!detectionResult.empty()) {
pt.clear();
std::stringstream ss;
ss.clear();
ss << detectionResult;
boost::property_tree::read_json(ss, pt);
BOOST_FOREACH(const boost::property_tree::ptree::value_type & child, pt.get_child("results"))
{
const boost::property_tree::ptree& result = child.second;
const auto class_id = GetData<int>(result, "class_id");
const auto x = GetData<float>(result, "x");
const auto y = GetData<float>(result, "y");
const auto width = GetData<float>(result, "width");
const auto height = GetData<float>(result, "height");
cv::rectangle(frame, cv::Rect(x, y, width, height), 123, 2);
/* cv::putText(frame, cv::format("%s:%d", classes[class_id], class_id), cv::Point(x, y - 5),
0, 0.6, cv::Scalar(255, 0, 0), 1, cv::LINE_AA);*/
// std::cout << "Keypoints =[" << GetData<std::string>(result, "extra_info") << "]" << std::endl;
}
}
//resize(frame, frame, Size(frame.cols / 2, frame.rows / 2)); // to half size or even smaller
namedWindow("Display frame", WINDOW_AUTOSIZE);
cv::imshow("Display frame", frame);
if (cv::waitKey(0) == 3) // Wait for 'esc' key press to exit
{
std::cout << "End of facial detection.\n";
}
cv::destroyAllWindows();
ReleaseANSODHandle(&infHandle);
std::cout << "End of program.\n";
return 0;
}
int TiledInferenceTest() {
std::string modelFilePath = "C:\\ProgramData\\ANSCENTER\\Shared\\ANS_GenericOD(GPU)_v1.0.zip";
std::string imageFilePath = "C:\\Programs\\DemoAssets\\Images\\SAHI\\smallobjects.jpeg";
//TiledInferenceTest(modelFilePath, imageFilePath);
NormalInferenceTest(modelFilePath, imageFilePath);
return 0;
}
int MotionDetection(std::string modelFilePath, std::string videoFilePath) {
boost::property_tree::ptree root;
boost::property_tree::ptree detectionObjects;
boost::property_tree::ptree pt;
std::vector<std::string> classes;
std::filesystem::path currentPath = std::filesystem::current_path();
ANSCENTER::ANSODBase* infHandle;
std::string labelMap;
std::string licenseKey = "";
std::string modelZipFilePassword = "";
float detectionScoreThreshold = 0.2;
float modelConfThreshold = 0.48;
float modelNMSThreshold = 0.48;
int modelType = 17; // ANSFIRESMOKE
int detectorType = 1; // Detection
labelMap = CreateANSODHandle(&infHandle, licenseKey.c_str(), modelFilePath.c_str(), modelZipFilePassword.c_str(), detectionScoreThreshold, modelConfThreshold, modelNMSThreshold, 1, modelType, detectorType);
std::stringstream ss(labelMap);
while (ss.good())
{
std::string substr;
getline(ss, substr, ',');
classes.push_back(substr);
}
std::cout << "classes:" << classes.size();
std::cout << "classes:" << classes.size() << std::endl;
while (true) {
std::cout << "begin read video" << std::endl;
cv::VideoCapture capture(videoFilePath);
if (!capture.isOpened()) {
printf("could not read this video file...\n");
return -1;
}
std::cout << "end read video" << std::endl;
while (true) {
cv::Mat frame;
if (!capture.read(frame)) {
std::cout << "\n Cannot read the video file. Restarting...\n";
capture.set(cv::CAP_PROP_POS_FRAMES, 0); // Reset to the beginning of the video
continue;
}
unsigned int bufferLength = 0;
//cv::Mat croppedFrame = frame(cv::Rect(0, 0, 1920, 1080));
auto start1 = std::chrono::system_clock::now();
//std::vector<uchar> imageData;
//bool success = cv::imencode(".jpg", frame, imageData);
//if (!success) {
// std::cout << "Failed to encode the image" << std::endl;
// break;
//}
//std::string jpegImage(imageData.begin(), imageData.end());
auto end1 = std::chrono::system_clock::now();
auto elapsed1 = std::chrono::duration_cast<std::chrono::milliseconds>(end1 - start1);
//printf("Conversion Time = %lld ms\n", static_cast<long long int>(elapsed1.count()));
int height = frame.rows;
int width = frame.cols;
auto start = std::chrono::system_clock::now();
/* measured work */
std::string detectionResult = RunInferenceFromCV(&infHandle, frame);//RunInferenceFromJpegString(&infHandle, jpegImage.c_str(), imageData.size());// , 100, 100, 0.2);
auto end = std::chrono::system_clock::now();
auto elapsed = std::chrono::duration_cast<std::chrono::milliseconds>(end - start);
printf("Time = %lld ms\n", static_cast<long long int>(elapsed.count()));
if (!detectionResult.empty()) {
pt.clear();
std::stringstream ss;
ss.clear();
ss << detectionResult;
boost::property_tree::read_json(ss, pt);
BOOST_FOREACH(const boost::property_tree::ptree::value_type & child, pt.get_child("results")) {
const boost::property_tree::ptree& result = child.second;
const auto class_id = GetData<int>(result, "class_id");
const auto x = GetData<float>(result, "x");
const auto y = GetData<float>(result, "y");
const auto prob = GetData<float>(result, "prob");
const auto width = GetData<float>(result, "width");
const auto height = GetData<float>(result, "height");
cv::rectangle(frame, cv::Rect(x, y, width, height), 123, 2);
cv::putText(frame, cv::format("%s:%d:%.2f", classes[class_id], class_id, prob), cv::Point(x, y - 5),
0, 0.6, cv::Scalar(0, 0, 255), 1, cv::LINE_AA);
}
}
cv::imshow("ANS Object Tracking", frame);
if (cv::waitKey(30) == 27) { // Wait for 'esc' key press to exit
capture.release();
cv::destroyAllWindows();
ReleaseANSODHandle(&infHandle);
std::cout << "End of program.\n";
return 0;
}
}
}
}
int MotionDetectionForFireNSmoke() {
std::string cpumodelFilePath = "C:\\Projects\\ANSVIS\\Models\\ANS_FireSmoke(CPU)_v1.0.zip";
std::string gpumodelFilePath = "C:\\Projects\\ANSVIS\\Models\\ANS_FireSmoke(GPU)_v1.0.zip";
std::string videoFile = "C:\\Programs\\DemoAssets\\Videos\\FireNSmoke\\BCA2.mp4";
//std::string videoFile = "C:\\Programs\\DemoAssets\\Videos\\FireNSmoke\\Fire25m.mp4";
//std::string videoFile = "C:\\Programs\\DemoAssets\\Videos\\FireNSmoke\\fire2.mp4";
//std::string videoFile = "C:\\Programs\\DemoAssets\\Videos\\FireNSmoke\\ANSFireFull.mp4";
// std::string videoFile = "C:\\Programs\\DemoAssets\\Videos\\video_20.mp4";
// std::string videoFile = "C:\\Programs\\DemoAssets\\Videos\\road.mp4";
//GPUYolov10EngineUnitTest(gpumodel10FilePath, videoFile);// yolov10
MotionDetection(gpumodelFilePath, videoFile);//yolov10
//OpenVINOEngineUnitTest(cpumodelFilePath, videoFile);//yolov8
//GPUEngineUnitTest(gpumodelFilePath, videoFile);// yolov8
return 0;
}
int StressTest() {
std::string gpumodelFilePath = "C:\\Projects\\ANSVIS\\Models\\ANS_PeopleHead(GPU)_v1.0.zip";
std::string imageFile = "C:\\Programs\\DemoAssets\\Images\\bus.jpg";
for (int i = 0; i < 100; i++) {
std::cout << "Test:" << i << std::endl;
GPUEngineImageTest(gpumodelFilePath, imageFile);
}
}
int OpenVINOCLEngineImageTest(std::string modelFilePath, std::string imageFilePath) {
boost::property_tree::ptree root;
boost::property_tree::ptree detectionObjects;
boost::property_tree::ptree pt;
std::vector<std::string> classes;
std::filesystem::path currentPath = std::filesystem::current_path();
ANSCENTER::ANSODBase* infHandle;
std::string labelMap;
std::string licenseKey = "";
std::string modelZipFilePassword = "";
float modelThreshold = 0.5;
float modelConfThreshold = 0.5;
float modelNMSThreshold = 0.5;
int modelType = 5;//OpenVINO
int detectorType = 0;// Classification
std::string optmizedModelFolder;
// Optimise model
std::cout << "Optimizing model, please wait...." << std::endl;
optmizedModelFolder = OptimizeModelStr(modelFilePath.c_str(), modelZipFilePassword.c_str(), modelType,1, 1);
std::cout << "Model is optmized, run inference...." << std::endl;
labelMap = CreateANSODHandle(&infHandle, licenseKey.c_str(), modelFilePath.c_str(), modelZipFilePassword.c_str(), modelThreshold, modelConfThreshold, modelNMSThreshold, 1, modelType, detectorType);
std::stringstream ss(labelMap);
while (ss.good())
{
std::string substr;
getline(ss, substr, ',');
classes.push_back(substr);
}
cv::Mat frame = cv::imread(imageFilePath, cv::IMREAD_COLOR);
unsigned int bufferLength = 0;
unsigned char* jpeg_string = ANSCENTER::ANSUtilityHelper::CVMatToBytes(frame, bufferLength);
int height = frame.rows;
int width = frame.cols;
auto start = std::chrono::system_clock::now();
/* measured work */
std::string detectionResult = RunInferenceBinary(&infHandle, jpeg_string, width, height);
auto end = std::chrono::system_clock::now();
auto elapsed = std::chrono::duration_cast<std::chrono::milliseconds>(end - start);
printf("Time = %lld ms\n", static_cast<long long int>(elapsed.count()));
std::cout << "Result:" << detectionResult << std::endl;
delete jpeg_string;
if (!detectionResult.empty()) {
pt.clear();
std::stringstream ss;
ss.clear();
ss << detectionResult;
boost::property_tree::read_json(ss, pt);
BOOST_FOREACH(const boost::property_tree::ptree::value_type & child, pt.get_child("results"))
{
const boost::property_tree::ptree& result = child.second;
const auto class_id = GetData<int>(result, "class_id");
const auto x = GetData<float>(result, "x");
const auto y = GetData<float>(result, "y");
const auto width = GetData<float>(result, "width");
const auto height = GetData<float>(result, "height");
cv::rectangle(frame, cv::Rect(x, y, width, height), 123, 2);
cv::putText(frame, cv::format("%s:%d", classes[class_id], class_id), cv::Point(x, y - 5),
0, 0.6, cv::Scalar(0, 0, 255), 1, cv::LINE_AA);
std::cout << "Keypoints =[" << GetData<std::string>(result, "extra_info") << "]" << std::endl;
}
}
cv::imshow("ANS Object Tracking", frame);
if (cv::waitKey(0) == 0) // Wait for 'esc' key press to exit
{
std::cout << "End of facial detection.\n";
}
cv::destroyAllWindows();
ReleaseANSODHandle(&infHandle);
std::cout << "End of program.\n";
return 0;
}
int TENSORRTCLEngineImageTest(std::string modelFilePath, std::string imageFilePath) {
boost::property_tree::ptree root;
boost::property_tree::ptree detectionObjects;
boost::property_tree::ptree pt;
std::vector<std::string> classes;
std::filesystem::path currentPath = std::filesystem::current_path();
ANSCENTER::ANSODBase* infHandle;
std::string labelMap;
std::string licenseKey = "";
std::string modelZipFilePassword = "";
float modelThreshold = 0.5;
float modelConfThreshold = 0.5;
float modelNMSThreshold = 0.5;
int modelType = 4;//OpenVINO
int detectorType = 0;// Classification
std::string optmizedModelFolder;
// Optimise model
std::cout << "Optimizing model, please wait...." << std::endl;
optmizedModelFolder = OptimizeModelStr(modelFilePath.c_str(), modelZipFilePassword.c_str(), modelType,1, 1);
std::cout << "Model is optmized, run inference...." << std::endl;
labelMap = CreateANSODHandle(&infHandle, licenseKey.c_str(), modelFilePath.c_str(), modelZipFilePassword.c_str(), modelThreshold, modelConfThreshold, modelNMSThreshold, 1, modelType, detectorType);
std::stringstream ss(labelMap);
while (ss.good())
{
std::string substr;
getline(ss, substr, ',');
classes.push_back(substr);
}
cv::Mat frame = cv::imread(imageFilePath, cv::IMREAD_COLOR);
unsigned int bufferLength = 0;
unsigned char* jpeg_string = ANSCENTER::ANSUtilityHelper::CVMatToBytes(frame, bufferLength);
int height = frame.rows;
int width = frame.cols;
auto start = std::chrono::system_clock::now();
/* measured work */
std::string detectionResult = RunInferenceBinary(&infHandle, jpeg_string, width, height);
auto end = std::chrono::system_clock::now();
auto elapsed = std::chrono::duration_cast<std::chrono::milliseconds>(end - start);
printf("Time = %lld ms\n", static_cast<long long int>(elapsed.count()));
std::cout << "Result:" << detectionResult << std::endl;
delete jpeg_string;
if (!detectionResult.empty()) {
pt.clear();
std::stringstream ss;
ss.clear();
ss << detectionResult;
boost::property_tree::read_json(ss, pt);
BOOST_FOREACH(const boost::property_tree::ptree::value_type & child, pt.get_child("results"))
{
const boost::property_tree::ptree& result = child.second;
const auto class_id = GetData<int>(result, "class_id");
const auto x = GetData<float>(result, "x");
const auto y = GetData<float>(result, "y");
const auto width = GetData<float>(result, "width");
const auto height = GetData<float>(result, "height");
cv::rectangle(frame, cv::Rect(x, y, width, height), 123, 2);
cv::putText(frame, cv::format("%s:%d", classes[class_id], class_id), cv::Point(x, y - 5),
0, 0.6, cv::Scalar(0, 0, 255), 1, cv::LINE_AA);
std::cout << "Keypoints =[" << GetData<std::string>(result, "extra_info") << "]" << std::endl;
}
}
cv::imshow("ANS Object Tracking", frame);
if (cv::waitKey(0) == 0) // Wait for 'esc' key press to exit
{
std::cout << "End of facial detection.\n";
}
cv::destroyAllWindows();
ReleaseANSODHandle(&infHandle);
std::cout << "End of program.\n";
return 0;
}
int TestCL() {
std::string cpumodelFilePath = "C:\\Programs\\DemoAssets\\AIModels\\ANSFireNSmokeCL(CPU).zip";
std::string gpumodelFilePath = "C:\\Programs\\DemoAssets\\AIModels\\ANSFireNSmokeCL(GPU).zip";
std::string imageFile = "C:\\Programs\\DemoAssets\\TestImages\\FireNSmoke\\smoke\\test1.jpg";
//std::string imageFile = "C:\\Programs\\DemoAssets\\Images\\bus.jpg";
TENSORRTCLEngineImageTest(gpumodelFilePath, imageFile);
}
int Engine_Test() {
std::string gpumodelFilePath = "C:\\ProgramData\\ANSCENTER\\Shared\\ANS_GenericOD(GPU)_v1.0.zip";
std::string imageFile = "C:\\ProgramData\\ANSCENTER\\Shared\\bus.jpg";
GPUEngineImageTest(gpumodelFilePath, imageFile);
}
int SegEngineImageTest(std::string modelFilePath, std::string imageFilePath) {
boost::property_tree::ptree root;
boost::property_tree::ptree detectionObjects;
boost::property_tree::ptree pt;
std::vector<std::string> classes;
std::filesystem::path currentPath = std::filesystem::current_path();
ANSCENTER::ANSODBase* infHandle;
std::string labelMap;
std::string licenseKey = "";
std::string modelZipFilePassword = "";
float modelThreshold = 0.5;
float modelConfThreshold = 0.5;
float modelNMSThreshold = 0.5;
int modelType = 5;//OpenVINO
int detectorType = 2;// Segmentation
std::string optmizedModelFolder;
// Optimise model
std::cout << "Optimizing model, please wait...." << std::endl;
optmizedModelFolder = OptimizeModelStr(modelFilePath.c_str(), modelZipFilePassword.c_str(), modelType, 1,1);
std::cout << "Model is optmized, run inference...." << std::endl;
labelMap = CreateANSODHandle(&infHandle, licenseKey.c_str(), modelFilePath.c_str(), modelZipFilePassword.c_str(), modelThreshold, modelConfThreshold, modelNMSThreshold, 1, modelType, detectorType);
std::stringstream ss(labelMap);
while (ss.good())
{
std::string substr;
getline(ss, substr, ',');
classes.push_back(substr);
}
cv::Mat frame = cv::imread(imageFilePath, cv::IMREAD_COLOR);
unsigned int bufferLength = 0;
unsigned char* jpeg_string = ANSCENTER::ANSUtilityHelper::CVMatToBytes(frame, bufferLength);
int height = frame.rows;
int width = frame.cols;
auto start = std::chrono::system_clock::now();
/* measured work */
std::string detectionResult = RunInferenceBinary(&infHandle, jpeg_string, width, height);
auto end = std::chrono::system_clock::now();
auto elapsed = std::chrono::duration_cast<std::chrono::milliseconds>(end - start);
printf("Time = %lld ms\n", static_cast<long long int>(elapsed.count()));
std::cout << "Result:" << detectionResult << std::endl;
delete jpeg_string;
if (!detectionResult.empty()) {
pt.clear();
std::stringstream ss;
ss.clear();
ss << detectionResult;
boost::property_tree::read_json(ss, pt);
BOOST_FOREACH(const boost::property_tree::ptree::value_type & child, pt.get_child("results"))
{
const boost::property_tree::ptree& result = child.second;
const auto class_id = GetData<int>(result, "class_id");
const auto x = GetData<float>(result, "x");
const auto y = GetData<float>(result, "y");
const auto width = GetData<float>(result, "width");
const auto height = GetData<float>(result, "height");
cv::rectangle(frame, cv::Rect(x, y, width, height), 123, 2);
cv::putText(frame, cv::format("%s:%d", classes[class_id], class_id), cv::Point(x, y - 5),
0, 0.6, cv::Scalar(0, 0, 255), 1, cv::LINE_AA);
std::cout << "Keypoints =[" << GetData<std::string>(result, "extra_info") << "]" << std::endl;
}
}
//cv::imshow("ANS Object Tracking", frame);
//if (cv::waitKey(0) == 0) // Wait for 'esc' key press to exit
//{
// std::cout << "End of facial detection.\n";
//}
cv::destroyAllWindows();
ReleaseANSODHandle(&infHandle);
std::cout << "End of program.\n";
return 0;
}
int SegmentationTest() {
std::string segmodelFilePath = "C:\\Programs\\TrainingToolTest\\SegmentationEngine\\SegmeTxtYolo\\Models\\ANS_MySegmentation(CPU)_1.zip";
// std::string segmodelFilePath = "C:\\Programs\\TrainingToolTest\\SegmentationEngine\\SegmeTxtYolo\\Models\\Yolov8\\ANS_MySegmentation(CPU)_1.zip";
std::string imageFile = "C:\\Programs\\TrainingToolTest\\SegmentationEngine\\SegmeTxtYolo\\data\\20241220_173948_695.jpg";
//std::string imageFile = "C:\\Programs\\DemoAssets\\Images\\bus.jpg";
SegEngineImageTest(segmodelFilePath, imageFile);
}
int LocSetTest() {
std::string gpumodelFilePath = "C:\\Programs\\LocSet\\LocSetGPU_v1.0.zip";
std::string cpumodelFilePath = "C:\\Programs\\LocSet\\LocSetCPU_v1.0.zip";
std::string yolov8ModeFilePath = "C:\\Programs\\Yolov8\\Yolov8_General\\ANS_GenericODM.zip";//"C:\\Programs\\LocSet\\LocSet_v1.0.zip";//
std::string videoFilePath = "C:\\Programs\\LocSet\\loc_set 1.mp4";
std::string videoFile = "C:\\Programs\\DemoAssets\\Videos\\video_20.mp4";
Yolov8EngineUnitTest(yolov8ModeFilePath, videoFile);
//GPUEngineUnitTest(gpumodelFilePath, videoFilePath);
//OpenVINOEngineUnitTest(cpumodelFilePath, videoFilePath);
//GPUYolov10EngineUnitTest(cpumodelFilePath, videoFilePath);
}
int PPETest() {
//std::string gpumodelFilePath = "C:\\Programs\\DemoAssets\\ANSAIModels\\Models\\PPEGPU.zip";
std::string gpumodelFilePath = "C:\\Programs\\Yolov8\\ANS_PPE(GPU)_v3.0.zip";
std::string videoFilePath = "C:\\Programs\\DemoAssets\\Videos\\Factory1.mp4";
Yolov8EngineUnitTest(gpumodelFilePath, videoFilePath);
return 1;
}
int RectifierTest() {
std::string Yolov5Model = "C:\\Programs\\Yolov5\\Rectifier_v1.zip";
std::string videoFilePath = "C:\\Programs\\Yolov5\\rectifier.mp4";
//std::string videoFile = "C:\\Programs\\DemoAssets\\Videos\\video_20.mp4";
//GPUEngineUnitTest(yolov5ModeFilePaht, videoFile);//
Yolov5EngineUnitTest(Yolov5Model, videoFilePath);
}
int FaceTest() {
std::string facemodeFile = "C:\\ProgramData\\ANSCENTER\\Shared\\ANS_GenericFD(GPU)_v1.0.zip";
std::string video = "C:\\Programs\\DemoAssets\\Videos\\BMIP.mp4";
FaceDetector(facemodeFile, video);
return 0;
}
int FaceOVTest() {
std::string facemodeFile = "C:\\ProgramData\\ANSCENTER\\Shared\\ANS_GenericFD(CPU)_v1.0.zip";
std::string imagePath = "C:\\Programs\\DemoAssets\\TestImages\\Face\\Hoang2.jpg";// "C:\\Programs\\DemoAssets\\Images\\Tien\\80.jpg";
FacialDetectorTest(facemodeFile, imagePath);// yolov8
return 0;
}
int FaceYoloTest() {
std::string facecpumodeFile = "C:\\Projects\\ANSVIS\\Models\\ANS_Face(CPU)_v1.0.zip";
std::string facegpumodeFile = "C:\\Projects\\ANSVIS\\Models\\ANS_Face(GPU)_v1.0.zip";
std::string video = "C:\\Programs\\DemoAssets\\Videos\\classroom.mp4";
OpenVINOEngineUnitTest(facecpumodeFile, video);//yolov8
// GPUEngineUnitTest(facegpumodeFile, video);// yolov8
return 0;
}
int Yolov11RT_Test() {
std::string gpumodelFilePath = "C:\\Users\\nghia\\Downloads\\Generic11GPU.zip";// "C:\\Programs\\DemoAssets\\AIModels\\ANS_PersonHead(GPU)_1.zip";
std::string cpumodelFilePath = "C:\\Programs\\DemoAssets\\AIModels\\ODv11nCPUGeneric.zip";
std::string imageFile = "C:\\Programs\\DemoAssets\\Images\\bus.jpg";
std::string videoFile = "C:\\Programs\\DemoAssets\\Videos\\video_20.mp4";
std::string videoFilePath = "C:\\Programs\\DemoAssets\\Videos\\classroom.mp4";
// GPU11EngineImageTest(gpumodelFilePath, imageFile);
GPUEngineUnitTest(gpumodelFilePath, videoFile);
//OpenVINOEngineUnitTest(cpumodelFilePath, videoFile);
}
int Yolov10RT_Test() {
std::string gpumodelFilePath = "C:\\ProgramData\\ANSCENTER\\Shared\\ANS_GenericOD(GPU)_v1.0.zip";
std::string videoFilePath = "C:\\Programs\\DemoAssets\\Videos\\classroom.mp4";
GPUYolov10EngineUnitTest(gpumodelFilePath, videoFilePath);
}
int TestYOLOV12() {
std::string modelPath = "C:\\Programs\\Yolov12\\GenericYolov12.zip";
std::string videoFile = "C:\\Programs\\DemoAssets\\Videos\\FireNSmoke\\SimFire.mp4";
Yolov12EngineUnitTest(modelPath, videoFile);
}
int GenericModelTest() {
//std::string cpumodelFilePath = "C:\\ProgramData\\ANSCENTER\\Shared\\ANS_GenericOD(CPU)_v1.0.zip";
std::string gpumodelFilePath = "C:\\ProgramData\\ANSCENTER\\Shared\\ANS_GenericOD(GPU)_v1.0.zip";// "C:\\ProgramData\\ANSCENTER\\ANSVIS Server\\Models\\B-IN_ANS_PeopleHead(GPU)_v1.0_54a7944906d79395a9840945d3c24b9a.zip";// "C:\\ProgramData\\ANSCENTER\\Shared\\ANS_GenericOD(GPU)_v1.0.zip";
//std::string gpumodelFilePath = "C:\\ProgramData\\ANSCENTER\\ANSVIS Server\\Models\\ServerOptimised\\B-IN_ANS_GenericOD(GPU)_v1.0_101944350_NVIDIAGeForceRTX4070LaptopGPU.zip";
std::string videoFile = "E:\\Programs\\DemoAssets\\Videos\\TestFR\\school1.mp4";
//OpenVINOYolov10EngineUnitTest(cpumodelFilePath, videoFile);//yolov10
GPUYolov10EngineUnitTest(gpumodelFilePath, videoFile);//yolov10
return 0;
}
int PersonHead() {
std::string cpumodelFilePath = "C:\\Projects\\ANSVIS\\Models\\ANS_PeopleHead(CPU)_v1.0.zip";
std::string gpumodelFilePath = "C:\\Projects\\ANSVIS\\Models\\ANS_PeopleHead(CPU)_v1.0.zip";
std::string videoFile = "C:\\Programs\\DemoAssets\\Videos\\video_20.mp4";
OpenVINOEngineUnitTest(cpumodelFilePath, videoFile);//yolov8
return 0;
}
int RVATest() {
std::string rvamodelFilePath = "C:\\Programs\\Braemac\\BR_RVA\\Models\\ANS_BR_RVA(GPU)_1.zip";
std::string rvaImageFile = "C:\\Programs\\Braemac\\TestData\\2025-07-29-122338.jpg";
GPU11EngineImageTest(rvamodelFilePath, rvaImageFile);
return 0;
}