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.

255 lines
7.0 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

#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 "LoadImage.hpp"
void handler(int sig)
{
printf("Get handler sig");
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;
}
exit(0);
}
int _sysmkdir(const std::string &dir)
{
int ret = mkdir(dir.c_str(), S_IRWXU | S_IRWXG | S_IRWXG | S_IROTH | S_IXOTH);
if (ret && errno == EEXIST)
{
}
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;
}
/// @brief LoadImage 测试函数
void test_LoadImage()
{
printf("\n");
printf("╔═══════════════════════════════════════════════════════════\n");
printf("║ LoadImage 测试函数 \n");
printf("╚═══════════════════════════════════════════════════════════\n");
printf("\n");
std::string root_dir = "/home/aidlux/BOE_CELL_ET/Image/20250718";
printf("测试目录:%s\n\n", root_dir.c_str());
LoadImage loader;
LoadConfig config;
config.Init();
printf("开始加载图片...\n\n");
std::vector<LoadProductImages> products = loader.LoadALLImg(root_dir, config);
if (products.empty())
{
printf("未找到任何图片!\n");
printf("错误信息:%s\n", loader.getLastError().c_str());
return;
}
printf("加载完成!\n");
printf("产品数量:%zu\n", products.size());
printf("图片总数:%zu\n\n", loader.getTotalLoaded());
for (size_t i = 0; i < products.size(); i++)
{
products[i].print("产品" + std::to_string(i + 1));
}
printf("\n");
printf("╔═══════════════════════════════════════════════════════════\n");
printf("║ 测试完成 \n");
printf("╚═══════════════════════════════════════════════════════════\n");
printf("\n");
}
int main(int argc, char *argv[])
{
// // LoadImage 测试
// test_LoadImage();
// getchar();
deal test;
if (argc > 1 && string(argv[1]) == "-h")
{
cout << "******************************************************" << endl;
cout << "*** 1 ./test_JBL_Check: 默认处理一套图 图片文件夹位于 ../data/img/t1结果位于/home/aidlux/BOE/testresult" << endl;
cout << "*** 2 ./test_JBL_Check -s: 1 的基础上增加 过程存图,包括 edge 和字符检测的中间结果存图,图片位于 当前文件夹。" << endl;
cout << "*** 3 ./test_JBL_Check -fjc filepath: 处理精测套图大图 结果位于/home/aidlux/BOE/ResultImg" << endl;
cout << "*** 4 ./test_JBL_Check -feai filepath num: 批量测试边缘检测算法num 至多处理张数,结果:/home/aidlux/BOE/Edge" << endl;
cout << "*** 5 ./test_JBL_Check -falign filepath num : 批量测试定位算法num 至多处理张数,结果:/home/aidlux/BOE/Align" << endl;
cout << "*** 6 ./test_JBL_Check -rjson filepath: 单张复测filepath xx/xx/3A3K380001B1DK_20240408_152157_Main_0_2_L255" << endl;
cout << "*** 6 ./test_JBL_Check -rjsonall filepath: 一套图复测filepath xx/xx/" << endl;
cout << "******************************************************" << endl;
return 0;
}
printf("argc = %d\n", argc);
for (int i = 0; i < argc; i++)
{
printf("argv[%d]=%s\n", i, argv[i]);
}
if (argc > 1 && string(argv[1]) != "-h")
{
for (int i = 1; i < argc; i++)
{
if (string(argv[i]) == "-rs")
{
test.runConfig.run_Type = Process_Run_SaveImg;
}
else if (string(argv[i]) == "-rd")
{
test.runConfig.run_Type = Process_Run_Detect;
}
else if (string(argv[i]) == "-rjson")
{
if (i + 1 >= argc)
{
printf("error Not Path \n");
return -1;
}
test.runConfig.run_Type = Process_Run_ReJson;
test.runConfig.filePath = string(argv[i + 1]);
}
else if (string(argv[i]) == "-f" && i + 1 < argc)
{
test.runConfig.det_Type = RUNTYPE_RUN_File;
test.runConfig.filePath = string(argv[i + 1]);
}
else if (string(argv[i]) == "-feai" && i + 1 < argc)
{
test.runConfig.det_Type = RUNTYPE_RUN_File_AI_TEST;
if (argc == 3)
{
test.runConfig.filePath = string(argv[2]);
test.runConfig.m_nTestNum == 9999999;
}
else if (argc == 4)
{
test.runConfig.filePath = string(argv[2]);
std::string strnum = string(argv[3]);
test.runConfig.m_nTestNum = atoi(strnum.c_str());
}
else
{
cout << "参数错误 ------- " << endl;
return 0;
}
}
else if (string(argv[i]) == "-feqx" && i + 1 < argc)
{
test.runConfig.det_Type = RUNTYPE_RUN_File_Edge_Test_Save_Qx;
if (argc == 3)
{
test.runConfig.filePath = string(argv[2]);
test.m_nTestNum == 9999999;
}
else if (argc == 4)
{
test.runConfig.filePath = string(argv[2]);
std::string strnum = string(argv[3]);
test.m_nTestNum = atoi(strnum.c_str());
}
else
{
cout << "参数错误 ------- " << endl;
return 0;
}
}
else if (string(argv[i]) == "-feallqx" && i + 1 < argc)
{
test.runConfig.det_Type = RUNTYPE_RUN_File_Edge_Test_Save_ALL;
if (argc == 3)
{
test.runConfig.filePath = string(argv[2]);
test.m_nTestNum == 9999999;
}
else if (argc == 4)
{
test.runConfig.filePath = string(argv[2]);
std::string strnum = string(argv[3]);
test.m_nTestNum = atoi(strnum.c_str());
}
else
{
cout << "参数错误 ------- " << endl;
return 0;
}
}
if (string(argv[i]) == "-s")
{
test.runConfig.bDebugSaveImg = true;
}
if (string(argv[i]) == "-n" && i + 1 < argc)
{
std::string strnum = string(argv[i + 1]);
test.m_nTestNum = atoi(strnum.c_str());
}
}
}
test.runConfig.print("config");
signal(SIGINT, handler);
test.start();
while (true)
{
usleep(10 * 1000);
}
return 0;
}