更新,完善检测算法

This commit is contained in:
2024-05-27 00:22:42 +08:00
parent e901966409
commit dc7983bcaf
24 changed files with 305 additions and 150 deletions
+129 -56
View File
@@ -1,5 +1,6 @@
#include <back/threadPoolManager.h>
#include <halconAlgo/Inspection.h>
static HalconCpp::HObject MatToHObject(cv::Mat& image)
{
HalconCpp::HObject Hobj;
@@ -210,70 +211,142 @@ static void MatToHObjectV(cv::Mat& image, HalconCpp::HObject& Hobj)
}
}
void ALGO_Inspection(std::shared_ptr <detData> data)
void pinHandleAiEvaluate(cv::Mat& src, cv::Mat& Paint,
handdleAI::pSegmentation *segPtr, handdleAI::pClassification* clsPtr)
{
cv::Mat segRes = ~segPtr->Evaluate(src);
std::vector<std::vector<cv::Point>> contours;
cv::findContours(segRes, contours, cv::RETR_EXTERNAL,cv::CHAIN_APPROX_NONE);
for (auto contour : contours)
{
cv::Rect rect = cv::boundingRect(contour);
rect += cv::Size(1, 1);
rect = cv::Rect(
max(0, rect.x),
max(0, rect.y),
min(rect.x + rect.width, src.rows),
min(rect.y + rect.height, src.cols)
);
int clsRes = clsPtr->Evaluate(src(rect));
cv::Scalar color;
switch (clsRes)
{
case 0:
color = cv::Scalar(0, 255, 0, 128);
break;
case 1:
color = cv::Scalar(255, 0, 0, 128);
break;
default:
color = cv::Scalar(255, 255, 255, 128);
}
cv::rectangle(Paint, rect, color, 2);
}
}
void pinHalconEvaluate(std::vector<cv::Rect>& Result,cv::Mat& src, cv::Mat& Paint)
{
//hv_in_Parameter
//[0]-产品种类; 1A正面 2A反面 3B正面 4C正面
//[1]-图像序号第一位;
//[2]-图像序号第二位;
//[3]-3d相机精度(mm);
//[4]-ping针偏移判NG阈值(mm);
//[5]-切图存图开关
#pragma region halcon变量定义
//测量
HObject ho_in_Image;
HObject ho_in_Image2;
HTuple hv_in_ShapePath;
HTuple hv_in_Parameter;
HTuple hv_out_Pings_X;
HTuple hv_out_Pings_Y;
HTuple hv_out_NG_Pings_X;
HTuple hv_out_NG_Pings_Y;
HTuple hv_out_Pings_Num;
HTuple hv_out_NG_Pings_Num;
HTuple hv_out_Flag_INS;
//ROI
HTuple hv_out_ROI_Value;
HTuple hv_out_Flag_ROI;
#pragma endregion
ho_in_Image = MatToHObject(src);
hv_in_Parameter.Append(3);
hv_in_Parameter.Append(5);
hv_in_Parameter.Append(1);
hv_in_Parameter.Append(0.0135);
hv_in_Parameter.Append(0.2);
hv_in_Parameter.Append(2);
hv_in_ShapePath = "./halconModel";
Pings_Inspection(ho_in_Image, hv_in_ShapePath, hv_in_Parameter, &hv_out_Pings_X,
&hv_out_Pings_Y, &hv_out_NG_Pings_X, &hv_out_NG_Pings_Y, &hv_out_Pings_Num,
&hv_out_NG_Pings_Num, &hv_out_Flag_INS);
Pings_ROI(ho_in_Image, hv_in_ShapePath, hv_in_Parameter, &hv_out_ROI_Value, &hv_out_Flag_ROI);
for (int i = 0; i < hv_out_ROI_Value.Length() / 4; i++)
{
Result.push_back(
cv::Rect(
hv_out_ROI_Value[i * 4 + 1].D(),
hv_out_ROI_Value[i * 4].D(),
hv_out_ROI_Value[i * 4 + 3].D() - hv_out_ROI_Value[i * 4 + 1].D(),
hv_out_ROI_Value[i * 4 + 2].D() - hv_out_ROI_Value[i * 4].D()
));
}
}
void ALGO_Inspection(std::shared_ptr <detData> data, handleAiModelManager* _handleAiModelManager)
{
if (data->oriImgs.size() < 1)
{
qDebug() << __FUNCDNAME__ << __LINE__ << "camera Mat size is Error!";
return;
}
//hv_in_Parameter
//[0]-产品种类; 1A正面 2A反面 3B正面 4C正面
//[1]-图像序号第一位;
//[2]-图像序号第二位;
//[3]-3d相机精度(mm);
//[4]-ping针偏移判NG阈值(mm);
//[5]-切图存图开关
#pragma region halcon变量定义
//测量
HObject ho_in_Image;
HObject ho_in_Image2;
HTuple hv_in_ShapePath;
HTuple hv_in_Parameter;
HTuple hv_out_Pings_X;
HTuple hv_out_Pings_Y;
HTuple hv_out_NG_Pings_X;
HTuple hv_out_NG_Pings_Y;
HTuple hv_out_Pings_Num;
HTuple hv_out_NG_Pings_Num;
HTuple hv_out_Flag_INS;
cv::Mat src = data->oriImgs[0];
cv::Mat Paint;
cvtColor(src, Paint, cv::COLOR_GRAY2BGR);
std::vector<cv::Rect>halconResult;
//hv_in_Parameter
//[0]-产品种类; 1A正面 2A反面 3B正面 4C正面
//[1]-图像序号第一位;
//[2]-图像序号第二位;
//[3]-3d相机精度(mm);
//[4]-ping针偏移判NG阈值(mm);
//[5]-切图存图开关
//ROI
HTuple hv_out_ROI_Value;
HTuple hv_out_Flag_ROI;
#pragma endregion
//HALCON
pinHalconEvaluate(halconResult,src, Paint);
cv::Mat mat = cv::imread("C://NHMJDHNN78474-5_1-ASR1006X20240320-150822.BMP", -1);
ho_in_Image = MatToHObject(mat);
MatToHObjectV(mat, ho_in_Image);
hv_in_Parameter.Append(3);
hv_in_Parameter.Append(5);
hv_in_Parameter.Append(1);
hv_in_Parameter.Append(0.0135);
hv_in_Parameter.Append(0.2);
hv_in_Parameter.Append(2);
//HANDLEAI
int customIndex = 0;
switch(customIndex)
{
case 0:
pinHandleAiEvaluate(src(halconResult[0]), Paint(halconResult[0]),
_handleAiModelManager->largeSeg, _handleAiModelManager->largeCls);
break;
case 1:
pinHandleAiEvaluate(src(halconResult[0]), Paint(halconResult[0]),
_handleAiModelManager->largeSeg, _handleAiModelManager->largeCls);
break;
case 2:
pinHandleAiEvaluate(src(halconResult[0]), Paint(halconResult[0]),
_handleAiModelManager->midSeg, _handleAiModelManager->midCls);
break;
case 3:
pinHandleAiEvaluate(src(halconResult[0]), Paint(halconResult[0]),
_handleAiModelManager->smallSeg, _handleAiModelManager->smallCls);
break;
}
hv_in_ShapePath = "./halconModel";
Pings_Inspection(ho_in_Image, hv_in_ShapePath, hv_in_Parameter, &hv_out_Pings_X,
&hv_out_Pings_Y, &hv_out_NG_Pings_X, &hv_out_NG_Pings_Y, &hv_out_Pings_Num,
&hv_out_NG_Pings_Num, &hv_out_Flag_INS);
Pings_ROI(ho_in_Image, hv_in_ShapePath, hv_in_Parameter, &hv_out_ROI_Value, &hv_out_Flag_ROI);
std::vector<cv::Rect>Result;
for (int i = 0; i < hv_out_ROI_Value.Length() / 4; i++)
{
Result.push_back(
cv::Rect(
hv_out_ROI_Value[i * 4 + 1].D(),
hv_out_ROI_Value[i * 4].D(),
hv_out_ROI_Value[i * 4 + 3].D() - hv_out_ROI_Value[i * 4 + 1].D(),
hv_out_ROI_Value[i * 4 + 2].D() - hv_out_ROI_Value[i * 4].D()
));
}
cv::Mat Paint;
cvtColor(mat, Paint, cv::COLOR_GRAY2BGR);
rectangle(Paint, Result[0], cv::Scalar(0, 0, 255), 4);
rectangle(Paint, halconResult[0], cv::Scalar(0, 0, 255), 4);
data->resultImgs.push_back(Paint);
_sleep(100);
}
+32
View File
@@ -0,0 +1,32 @@
#include <algo/ALGO_Test.h>
#include <algo/ALGO_Correction.h>
#include <algo/ALGO_Inspection.h>
#include <handleAi/handleAiModel.h>
bool processAlgo(std::shared_ptr <detData> data, handleAiModelManager* _handleAiModelManager)
{
try
{
switch (data->algoThreadIndex)
{
case -1:
pinAioEvalute(data);
break;
case 0:
ALGO_Correction(data);
break;
case 1:
ALGO_Inspection(data, _handleAiModelManager);
break;
}
qDebug() << "algo end";
return true;
}
catch (const std::exception& e)
{
std::cerr << "Caught exception: " << e.what() << std::endl;
return false;
}
return false;
}
#pragma once
Binary file not shown.
@@ -34,7 +34,7 @@ public:
while (this->isRunning() == true);
}
void getImgQueueSize();
void Process(std::shared_ptr <detData> dataIn)
void captureImage(std::shared_ptr <detData> dataIn)
{
requestQueue.enqueue(dataIn);
}
@@ -109,6 +109,13 @@ public:
void init(backEndManager*);
~cameraManager();
std::unordered_map<std::string, camera*>cameras;//key 相机名
camera* getCamera(std::string cameraName)
{
auto camera = cameras.find(cameraName);
if (camera != cameras.end())
return camera->second;
return nullptr;
}
void run()
{
//while (1)
+1 -1
View File
@@ -1,4 +1,4 @@
#include "logmsg.h"
#include "logmsg.h"
#include<QThread>
key_sendMsg m_key_callback = NULL;
@@ -2,12 +2,9 @@
#include <FrontendBackendBridge.h>
#include <sqlManager/sqlManager.h>
#include <imgSaveThreadManager.h>
#include <triggerManager.h>
#include <algo/ALGO_MAIN.h>
#include <algo/ALGO_Test.h>
#include <algo/ALGO_Correction.h>
#include <algo/ALGO_Inspection.h>
using namespace std;
void createDirectoryIfNotExists_2(const std::string& path) {
// 检查路径是否存在
if (!std::filesystem::exists(path)) {
@@ -50,6 +47,8 @@ void threadManager::init(backEndManager* _backEndManagerIn)
_backEndManager = _backEndManagerIn;
sql = &_backEndManager->_sqlManager;
_imgSaveThreadManager = _backEndManagerIn->_imgSaveThreadManager;
_triggerManager = _backEndManagerIn->_triggerManager;
_handleAiModelManager = _backEndManager->_handleAiModelManager;
this->start();
}
void threadManager::process()
@@ -67,7 +66,7 @@ void threadManager::process()
std::shared_ptr<detData> ptr = *it;
if (ptr->oriImgs.size() >= ptr->imgAmountMin)
{
algoFutures.insert(std::make_pair(ptr->timeCode, std::async(std::launch::async, ALGO_Inspection, ptr)));
algoFutures.insert(std::make_pair(ptr->timeCode, std::async(std::launch::async, processAlgo, ptr,_handleAiModelManager)));
processData.push_back(ptr);
it = waitImgData.erase(it);
@@ -81,10 +80,12 @@ void threadManager::process()
{
std::shared_ptr<detData> ptr = *it;
futrueIte = algoFutures.find(ptr->timeCode);
if (futrueIte->second.wait_for(zeroSec)== std::future_status::ready)
if (futrueIte->second.wait_for(zeroSec) == std::future_status::ready)
{
resultData.push_back(ptr);
resultFutures.insert(std::make_pair(ptr->timeCode, std::async(std::launch::async, &threadManager::resultHandle, this, ptr)));
bool res= futrueIte->second.get();
//resultData.push_back(ptr);
//resultFutures.insert(std::make_pair(ptr->timeCode, std::async(std::launch::async, &threadManager::resultHandle, this, ptr)));
std::async(std::launch::async, &threadManager::resultHandle, this, ptr);
it = processData.erase(it);
algoFutures.erase(futrueIte);
@@ -94,19 +95,19 @@ void threadManager::process()
}
#pragma endregion
#pragma region 等待结果并执行显示图片等操作
for (auto it = resultData.begin(); it != resultData.end();)
{
std::shared_ptr<detData> ptr = *it;
futrueIte = resultFutures.find(ptr->timeCode);
if (futrueIte->second.wait_for(zeroSec) == std::future_status::ready)
{
//for (auto it = resultData.begin(); it != resultData.end();)
//{
// std::shared_ptr<detData> ptr = *it;
// futrueIte = resultFutures.find(ptr->timeCode);
// if (futrueIte->second.wait_for(zeroSec) == std::future_status::ready)
// {
it = resultData.erase(it);
resultFutures.erase(futrueIte);
}
else
++it;
}
// it = resultData.erase(it);
// resultFutures.erase(futrueIte);
// }
// else
// ++it;
//}
#pragma endregion
}
@@ -115,13 +116,16 @@ void threadManager::resultHandle(std::shared_ptr <detData> data)
//储存结果图
_imgSaveThreadManager->resSaveThread->imgDataQueue.append(data);
//发送图片
QPixmap pixmap;
cvMatToQPixMap(data->resultImgs[0], pixmap);
showImgPack* pack = new showImgPack();
pack->img = pixmap;
pack->type = imgWidgetRes;
pack->index = data->oriShowIndex;
emit _backEndManager->sendPixmapImageWidget(pack);
if(data->resultImgs.size()>0)
{
QPixmap pixmap;
cvMatToQPixMap(data->resultImgs[0], pixmap);
showImgPack* pack = new showImgPack();
pack->img = pixmap;
pack->type = imgWidgetRes;
pack->index = data->oriShowIndex;
emit _backEndManager->sendPixmapImageWidget(pack);
}
//SQL
std::vector<sqlData> sqlDatas;
@@ -129,6 +133,10 @@ void threadManager::resultHandle(std::shared_ptr <detData> data)
sqlDatas.push_back({ sqlData.first, std::to_string(sqlData.second) });
sql->addData(data->SNcode, sqlDatas);
//写入plc
for (auto writeBackStr : data->writeBackData)
_triggerManager->sendFinsMsg(writeBackStr);
//提交清理申请
detDataManager* dManager = data->dManager;
data->dManager->deleteDetData(data->timeCode);
@@ -143,14 +151,9 @@ void threadManager::run()
}
void threadManager::addTask(std::shared_ptr <detData> data)
{
//{
// CameraListCls::datastruct _struct = bridge.back.json.camera.getData(data->cameraKeyName);
// data->oriShowIndex = _struct.showIndex;
//}
insertQueueMutex.lock();
insertQueue.enqueue(data);
insertQueueMutex.unlock();
//this->start();
}
threadManager::~threadManager()
{
@@ -182,12 +185,12 @@ bool sncodeCls::clearSameSnRequestData()
}
return true;
}
void sncodeCls::checkSnFromWaittingVec(QByteArray byte)
void sncodeCls::checkSnFromWaittingVec(QByteArray plcByte)
{
while (clearSameSnRequestData() == false);
for (int i = 0; i < snWaittingVec.size(); i++)
{//第一位是hash,第二位是index
string SN = readSnFromQByteArray(byte, snWaittingVec[i].startpos, false, true, 0);
std::string SN = readSnFromQByteArray(plcByte, snWaittingVec[i].startpos, false, true, 0);
if (SN.compare(snErrorsnError))//不为空
{
snResList.push_back({ snWaittingVec[i].timecode,SN,snWaittingVec[i].startpos });
@@ -199,28 +202,28 @@ void sncodeCls::checkSnFromWaittingVec(QByteArray byte)
}
//FINSEDIT
string sncodeCls::readSnFromQByteArray(QByteArray byte, int dmPos,
std::string sncodeCls::readSnFromQByteArray(QByteArray plcByte, int dmPos,
bool highLowConversion, bool clearAfterRead, long long timeCode, int Size)
{
int triggerPos = (dmPos - tcpStartPos) * 2;
if (triggerPos < 0)
{
cout << "Read SN error,trigger is DM:" << dmPos << ",but read start at DM:" << tcpStartPos << endl;
std::cout << "Read SN error,trigger is DM:" << dmPos << ",but read start at DM:" << tcpStartPos << endl;
return snErrorsnError;
}
QString str;
if (byte.at(triggerPos + 1) == 0 && byte.at(triggerPos) == 0)
if (plcByte.at(triggerPos + 1) == 0 && plcByte.at(triggerPos) == 0)
return snErrorsnError;
int snCount = 0;
while (byte.at(snCount + triggerPos) != 0 || byte.at(snCount + triggerPos + 1) != 0)
while (plcByte.at(snCount + triggerPos) != 0 || plcByte.at(snCount + triggerPos + 1) != 0)
{
if (byte.at(snCount + triggerPos) == 0)
if (plcByte.at(snCount + triggerPos) == 0)
{
snCount++;
continue;
}
str += QChar(byte.at(snCount + triggerPos));
str += QChar(plcByte.at(snCount + triggerPos));
snCount++;
}
if (highLowConversion == true)
@@ -244,7 +247,7 @@ QString sncodeCls::snHex(QString sn)
}
return resultStr;
}
string sncodeCls::getData(unsigned long long timeCode)
std::string sncodeCls::getData(unsigned long long timeCode)
{
for (int i = snResList.size() - 1; i >= 0; i--)
{
@@ -253,10 +256,10 @@ string sncodeCls::getData(unsigned long long timeCode)
}
return snErrorsnError;
}
string sncodeCls::waitForSn(unsigned long long timeCode, int timeOut)
std::string sncodeCls::waitForSn(unsigned long long timeCode, int timeOut)
{
int cnt = 0;
string sn = getData(timeCode);
std::string sn = getData(timeCode);
if (!sn.compare(snErrorsnError))
{
@@ -21,7 +21,8 @@ class threadManager;
class algoThread;
class subThread;
class detDataManager;
//class detData;
class triggerManager;
class backEndManager;
class detData
{
@@ -37,6 +38,7 @@ public:
double camera1Width = 0, camera1Height = 0;
int cameraIndex = -1; //是第几次拍照
int imgAmountMin = 1;
int algoThreadIndex = -1;
std::vector<std::pair<std::string, double>> sqlVec;
@@ -79,22 +81,7 @@ public:
//algoThreadIndex = _struct.threadIndex;
//resShowIndex = _struct.showIndex;
}
static std::shared_ptr <detData> CreateDetData(QString IN_cameraKeyName, QString IN_algoThreadName,
std::string IN_SN, int IN_oriShowIndex)
{
std::shared_ptr <detData> data(new detData(IN_cameraKeyName, IN_algoThreadName, IN_SN, IN_oriShowIndex));
return data;
}
detData(QString IN_cameraKeyName, QString IN_algoThreadName,
std::string IN_SN, int IN_oriShowIndex)
{
cameraKeyName = IN_cameraKeyName;
algoThreadName = IN_algoThreadName;
oriShowIndex = IN_oriShowIndex;
SNcode = IN_SN;
//imgMutex = new QMutex();
}
~detData()
{
for (auto img : oriImgs)
@@ -107,35 +94,40 @@ class detDataManager
{
public:
std::unordered_map<unsigned long long, std::shared_ptr<detData>>map;
//QLinkedList<detData> detDatas;
QMutex dataMutex;
//std::shared_ptr <detData> insertDetData(QString IN_cameraKeyName, QString IN_algoThreadName,
// std::string IN_SN, int IN_oriShowIndex)
//{
// dataMutex.lock();
// std::shared_ptr <detData> data = new detData(IN_cameraKeyName, IN_algoThreadName, IN_SN, IN_oriShowIndex);
// data->dManager = this;
// //detDatas.push_back(data);
// map.insert({ data->timeCode,data });
// dataMutex.unlock();
// std::shared_ptr <detData> dataPtr = getDetData(data->timeCode);
//
// if (dataPtr == nullptr)
// qDebug() << "创建新容器失败";
// return dataPtr;
//}
std::shared_ptr <detData> insertDetData(QString IN_cameraKeyName, QString IN_algoThreadName,
/* std::shared_ptr <detData> insertDetData(QString IN_cameraKeyName, QString IN_algoThreadName,
std::string IN_SN, int IN_oriShowIndex)
{
dataMutex.lock();
std::shared_ptr <detData>data(new detData(IN_cameraKeyName, IN_algoThreadName, IN_SN, IN_oriShowIndex));
data->dManager = this;
//detDatas.push_back(data);
map.insert({ data->timeCode,data });
dataMutex.unlock();
std::shared_ptr <detData> dataPtr = getDetData(data->timeCode);
if (dataPtr == nullptr)
qDebug() << "创建新容器失败";
return dataPtr;
}*/
std::shared_ptr <detData> insertDetData(
QString IN_cameraKeyName,
std::string IN_SN,
int IN_oriShowIndex,
int IN_algoThreadIndex)
{
dataMutex.lock();
std::shared_ptr <detData>dataPtr(new detData());
dataPtr->cameraKeyName = IN_cameraKeyName;
dataPtr->SNcode = IN_SN;
dataPtr->oriShowIndex = IN_oriShowIndex;
dataPtr->algoThreadIndex = IN_algoThreadIndex;
dataPtr->dManager = this;
map.insert({ dataPtr->timeCode,dataPtr });
dataMutex.unlock();
if (dataPtr == nullptr)
qDebug() << "创建新容器失败";
return dataPtr;
@@ -201,6 +193,9 @@ public:
sqlManager* sql;
imgSaveThreadManager* _imgSaveThreadManager;
triggerManager* _triggerManager;
handleAiModelManager* _handleAiModelManager;
QQueue<std::shared_ptr <detData>> detDataQueue;
autoDelete* autoDeleteThread;
void init(backEndManager* _backEndManagerIn);
@@ -227,11 +222,11 @@ private:
std::list<std::shared_ptr <detData>> processData;//处理中
std::list<std::shared_ptr <detData>> resultData;//等待结果
std::unordered_map<unsigned long long, std::future<void>> algoFutures;
std::unordered_map<unsigned long long, std::future<bool>> algoFutures;
std::unordered_map<unsigned long long, std::future<void>> resultFutures;
std::chrono::seconds zeroSec = std::chrono::seconds(0);
std::unordered_map<unsigned long long, std::future<void>>::iterator futrueIte;
std::unordered_map<unsigned long long, std::future<bool>>::iterator futrueIte;
bool runFlag = true;
QList<std::shared_ptr <detData>>imgWaitList;
@@ -11,21 +11,22 @@ void triggerManager::decodeCameraCMD(QByteArray byte)
#if debugTesting
//if (checkTrigger(1, 2, byte) == true)
{
std::shared_ptr <detData> data = dManager->insertDetData("Camera1", "Thread3", "TEST", 0);
data->correctionData = correctionData;
_threadManager->addTask(data);//添加任务
auto camera = _cameraManager->cameras.find("123");
if(camera != _cameraManager->cameras.end())
camera->second->Process(data);
//std::shared_ptr <detData> data = dManager->insertDetData("Camera1" , "TEST", 0 , 0);
//data->correctionData = correctionData;
//_threadManager->addTask(data);//添加任务
//auto camera = _cameraManager->getCamera("123");
//if(camera != nullptr)
// camera->captureImage(data);
}
//if (checkTrigger(2, 2, byte) == true)
{
std::shared_ptr <detData> data = dManager->insertDetData("Camera1", "Thread2", "TEST", 1);
std::shared_ptr <detData> data = dManager->insertDetData("Camera1", "TEST", 1, 1);
data->correctionData = correctionData;
data->oriImgs.push_back(cv::imread("C://Users//RCi//Downloads//20240526-202606.bmp",-1));
_threadManager->addTask(data);//添加任务
//auto camera = _cameraManager->cameras.find("456");
//if (camera != _cameraManager->cameras.end())
// camera->second->Process(data);
//auto camera = _cameraManager->getCamera("123");
//if (camera != nullptr)
// camera->captureImage(data);
}
return;
#endif
@@ -7,7 +7,6 @@
#include <globalStruct.h>
#include <backStruct.h>
using namespace std;
class backEndManager;
class cameraManager;
class jsonConfiguration;
@@ -4,6 +4,8 @@
#include <future>
#include <qobject.h>
#include <backEndManager.h>
#if 0
class handleAiModelBase
{
public:
@@ -120,4 +122,47 @@ private:
std::vector<std::mutex*>gpuMutex;
int gpuCnt = 1;//gpu数量
};
#endif
class handleAiModelManager :public QObject
{
public:
handdleAI::pSegmentation* largeSeg;
handdleAI::pClassification* largeCls;
handdleAI::pSegmentation* midSeg;
handdleAI::pClassification* midCls;
handdleAI::pSegmentation* smallSeg;
handdleAI::pClassification* smallCls;
////////模型放这里///////
handleAiModelManager()
{
}
///////////END/////////
void init(backEndManager* _backEndManagerIn)
{
return;
largeSeg = handdleAI::CreateSegObj("./HandleAiModels/large-seg.BHD", 0);
midSeg = handdleAI::CreateSegObj("./HandleAiModels/mid-seg.BHD", 0);
smallSeg = handdleAI::CreateSegObj("./HandleAiModels/small-seg.BHD", 0);
largeCls = handdleAI::CreateClsObjVT("./HandleAiModels/large-cls.BHD", 0);
midCls = handdleAI::CreateClsObjVT("./HandleAiModels/mid-cls.BHD", 0);
smallCls = handdleAI::CreateClsObjVT("./HandleAiModels/small_cls.BHD", 0);
}
~handleAiModelManager()
{
handdleAI::DestroySegObj(largeSeg);
handdleAI::DestroySegObj(midSeg);
handdleAI::DestroySegObj(smallSeg);
handdleAI::DestroyClsObj(largeCls);
handdleAI::DestroyClsObj(midCls);
handdleAI::DestroyClsObj(smallCls);
}
};
#pragma once
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.