You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

305 lines
10 KiB

/*
* @Author: xiewenji 527774126@qq.com
* @Date: 2025-07-04 16:18:48
* @LastEditors: xiewenji 527774126@qq.com
* @LastEditTime: 2025-09-06 22:37:59
* @FilePath: /AI_SO_Test/AIEngineModule/example/test_example.cpp
* @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
*/
#include <iostream>
#include <string>
#include <signal.h>
#include "deal.h"
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <string.h>
#include <thread>
#include "AI_Factory.h"
#include <chrono>
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <string>
#include <sstream>
#include <sys/time.h>
#include <sys/statfs.h>
long getcurTime()
{
struct timeval tv;
gettimeofday(&tv, NULL);
return ((long)tv.tv_sec) * 1000 + ((long)tv.tv_usec) / 1000;
}
void handler(int sig)
{
printf("Get handler sig");
std::string strcmd = "ps -ef | grep test_JBL_Check| awk '{print $2}' | xargs kill -9 ";
const char *cmd = strcmd.c_str();
printf("delete test_JBL_Check success");
if (-1 == system(cmd))
{
std::cout << "error" << std::endl;
}
// delete UnderCarriageCoreLogic::GetInstance();
exit(0);
}
int _sysmkdir(const std::string &dir)
{
int ret = mkdir(dir.c_str(), S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH);
if (ret && errno == EEXIST)
{
// printf("dir[%s] already exist.\n", dir.c_str());
}
else if (ret)
{
printf("create dir[%s] error: %d %s\n", dir.c_str(), ret, strerror(errno));
return -1;
}
else
{
printf("create dir[%s] success.\n", dir.c_str());
}
return 0;
}
std::string __getParentDir(const std::string &dir)
{
std::string pdir = dir;
if (pdir.length() < 1 || (pdir[0] != '/'))
{
return "";
}
while (pdir.length() > 1 && (pdir[pdir.length() - 1] == '/'))
pdir = pdir.substr(0, pdir.length() - 1);
pdir = pdir.substr(0, pdir.find_last_of('/'));
return pdir;
}
int _sysmkdirs(const std::string &dir)
{
int ret = 0;
if (dir.empty())
return -1;
std::string pdir;
if ((ret = _sysmkdir(dir)) == -1)
{
pdir = __getParentDir(dir);
if ((ret = _sysmkdirs(pdir)) == 0)
{
ret = _sysmkdirs(dir);
}
}
return ret;
}
int main(int argc, char *argv[])
{
std::shared_ptr<AIFactory> AI_Factory;
AI_Factory = AIFactory::GetInstance();
GPU_Config gpu;
gpu.gpu_0 = true;
gpu.gpu_1 = true;
AI_Factory->InitALLAIModle(gpu);
std::shared_ptr<AIModel_Base> BOE_Edge_Detect = AI_Factory->BOE_Edge_Detect;
BOE_Edge_Detect->input_0.print();
BOE_Edge_Detect->input_1.print();
BOE_Edge_Detect->output_0.print();
BOE_Edge_Detect->output_1.print();
BOE_Edge_Detect->output_2.print();
std::shared_ptr<AIModel_Base> JBL_Detect = AI_Factory->JBL_Detect;
JBL_Detect->input_0.print();
JBL_Detect->input_1.print();
JBL_Detect->output_0.print();
JBL_Detect->output_1.print();
JBL_Detect->output_2.print();
cv::Mat temimg = cv::imread("../data/20250319_192154_Main_0_2_L255_Org.tif", 0);
cv::Mat dealImg;
printf("src img %d %d \n", temimg.cols, temimg.rows);
cv::Size sz = cv::Size(BOE_Edge_Detect->input_0.width, BOE_Edge_Detect->input_0.height);
cv::resize(temimg, dealImg, cv::Size(BOE_Edge_Detect->input_0.width, BOE_Edge_Detect->input_0.height));
cv::Mat outimg;
BOE_Edge_Detect->AIDet(dealImg, outimg);
cv::imwrite("outimg.png", outimg);
{
long t1 = getcurTime();
cv::Mat output;
for (int i = 0; i < 1000; ++i)
{
cv::resize(temimg, dealImg, sz);
BOE_Edge_Detect->AIDet(dealImg, outimg);
}
long t2 = getcurTime();
// std::cout << "== run 1000 : " << t2 - t1 << " 毫秒" << std::endl;
// cv::imwrite(name + "_output.jpg", output);
// std::cout << "[" << name << "] done\n";
};
printf("========================\n");
{
long t1 = getcurTime();
// Lambda 线程函数
auto run_detection = [](std::shared_ptr<AIModel_Base> engine, const cv::Mat &input, const cv::Size sz, const std::string &name)
{
cv::Mat output;
for (int i = 0; i < 250; ++i)
{
cv::Mat dealImg123;
cv::resize(input, dealImg123, sz);
// printf("%s ---- \n",name.c_str());
engine->AIDet(dealImg123, output);
// cv::imwrite(name + "_" + std::to_string(i) + "_output.jpg", output);
}
// cv::imwrite(name + "_output.jpg", output);
// std::cout << "[" << name << "] done\n";
};
// 启动两个线程
std::thread thread1(run_detection, BOE_Edge_Detect, temimg, sz, "manager1");
std::thread thread2(run_detection, BOE_Edge_Detect, temimg, sz, "manager2");
std::thread thread3(run_detection, BOE_Edge_Detect, temimg, sz, "manager3");
std::thread thread4(run_detection, BOE_Edge_Detect, temimg, sz, "manager4");
// std::thread thread5(run_detection, BOE_Edge_Detect, dealImg, "manager1");
// std::thread thread6(run_detection, BOE_Edge_Detect, dealImg, "manager2");
// std::thread thread7(run_detection, BOE_Edge_Detect, dealImg, "manager3");
// std::thread thread8(run_detection, BOE_Edge_Detect, dealImg, "manager4");
// 等待线程结束
thread1.join();
thread2.join();
thread3.join();
thread4.join();
// thread5.join();
// thread6.join();
// thread7.join();
// thread8.join();
long t2 = getcurTime();
// std::cout << "run 1000 = thread 4 * 250 耗时: " << t2 - t1 << " 毫秒" << std::endl;
}
cv::Mat dealImg123;
cv::resize(temimg, dealImg123, cv::Size(JBL_Detect->input_0.width, JBL_Detect->input_0.height));
float fss = 0;
int rclass = JBL_Detect->AIClass(dealImg123, &fss);
printf("test ------------rclass %d score %f\n", rclass, fss);
// printf("%d %d\n", manager_1->BOE_Edge_Detect->m_img_In_0.width, manager_1->BOE_Edge_Detect->m_img_In_0.height);
// std::string strModelPath = "/home/aidlux/BOE/UseModel/Edge_Big.engine";
// std::string strModelPath_jbl = "/home/aidlux/BOE/UseModel/class_14.engine";
// std::shared_ptr<AIManagerBase> manager_1 = AIManagerBase::GetInstance(0);
// std::shared_ptr<AIManagerBase> manager_2 = AIManagerBase::GetInstance(1);
// std::shared_ptr<AIManagerBase> manager_3 = AIManagerBase::GetInstance(0);
// std::cout << "manager_1 instance address: " << manager_1.get() << std::endl;
// std::cout << "manager_2 instance address: " << manager_2.get() << std::endl;
// std::cout << "manager_3 instance address: " << manager_3.get() << std::endl;
// std::cout << "manager_1->BOE_Edge_Detect instance address: " << manager_1->BOE_Edge_Detect.get() << std::endl;
// std::cout << "manager_2->BOE_Edge_Detect instance address: " << manager_2->BOE_Edge_Detect.get() << std::endl;
// std::cout << "manager_3->BOE_Edge_Detect instance address: " << manager_3->BOE_Edge_Detect.get() << std::endl;
// std::cout << "manager_1->JBL_Detect instance address: " << manager_1->JBL_Detect.get() << std::endl;
// std::cout << "manager_2->JBL_Detect instance address: " << manager_2->JBL_Detect.get() << std::endl;
// std::cout << "manager_3->JBL_Detect instance address: " << manager_3->JBL_Detect.get() << std::endl;
// manager_1->BOE_Edge_Detect->Init(strModelPath);
// manager_2->BOE_Edge_Detect->Init(strModelPath);
// manager_3->BOE_Edge_Detect->Init(strModelPath);
// manager_1->JBL_Detect->Init(strModelPath_jbl);
// manager_2->JBL_Detect->Init(strModelPath_jbl);
// manager_3->JBL_Detect->Init(strModelPath_jbl);
// cv::Mat temimg = cv::imread("/home/aidlux/xwj/AI_SO_Test/data/img/20250319_192154_Main_0_2_L255_Org.tif", 0);
// cv::Mat dealImg;
// printf("%d %d\n", manager_1->BOE_Edge_Detect->m_img_In_0.width, manager_1->BOE_Edge_Detect->m_img_In_0.height);
// if (manager_1->BOE_Edge_Detect)
// {
// cv::resize(temimg, dealImg, cv::Size(manager_1->BOE_Edge_Detect->m_img_In_0.width, manager_1->BOE_Edge_Detect->m_img_In_0.height));
// cv::Mat outimg;
// manager_1->BOE_Edge_Detect->AIDet(dealImg, outimg);
// manager_2->BOE_Edge_Detect->AIDet(dealImg, outimg);
// {
// long t1 = getcurTime();
// cv::Mat output;
// for (int i = 0; i < 500; ++i)
// {
// manager_1->BOE_Edge_Detect->AIDet(dealImg, output);
// }
// for (int i = 0; i < 500; ++i)
// {
// manager_1->BOE_Edge_Detect->AIDet(dealImg, output);
// }
// long t2 = getcurTime();
// std::cout << "run 1000 : " << t2 - t1 << " 毫秒" << std::endl;
// // cv::imwrite(name + "_output.jpg", output);
// // std::cout << "[" << name << "] done\n";
// };
// long t1 = getcurTime();
// // Lambda 线程函数
// auto run_detection = [](std::shared_ptr<AIEngineBase> engine, const cv::Mat &input, const std::string &name)
// {
// cv::Mat output;
// for (int i = 0; i < 500; ++i)
// {
// engine->AIDet(input, output);
// }
// // cv::imwrite(name + "_output.jpg", output);
// // std::cout << "[" << name << "] done\n";
// };
// // 启动两个线程
// std::thread thread1(run_detection, manager_1->BOE_Edge_Detect, dealImg, "manager1");
// std::thread thread2(run_detection, manager_1->BOE_Edge_Detect, dealImg, "manager3");
// // 等待线程结束
// thread1.join();
// thread2.join();
// // for (int i = 0; i < 1000; i++)
// // {
// // manager_1->BOE_Edge_Detect->AIDet(dealImg, outimg);
// // // manager_3->BOE_Edge_Detect->AIDet(dealImg, outimg);
// // }
// long t2 = getcurTime();
// std::cout << "run 1000 = thread 2 * 500 耗时: " << t2 - t1 << " 毫秒" << std::endl;
// cv::imwrite("dealImg.jpg", dealImg);
// cv::imwrite("outimg.jpg", outimg);
// }
// cv::Mat dealImg123;
// cv::resize(temimg, dealImg123, cv::Size(manager_1->JBL_Detect->m_img_In_0.width, manager_1->JBL_Detect->m_img_In_0.height));
// float fss = 0;
// int rclass = manager_1->JBL_Detect->AIClass(dealImg, &fss);
// long t11 = getcurTime();
// rclass = manager_1->JBL_Detect->AIClass(dealImg, &fss);
// long t12 = getcurTime();
// printf("test ------------rclass %d score %f------- time %ld\n", rclass, fss, t12 - t11);
// printf("test ------------------- \n");
getchar();
return 0;
}