backup
This commit is contained in:
@@ -0,0 +1,71 @@
|
||||
# 获取获取当前目录名
|
||||
get_filename_component(CURRENT_FOLDER ${CMAKE_CURRENT_SOURCE_DIR} NAME)
|
||||
string(TIMESTAMP RUN_TIME)
|
||||
message( " model start : " ${CURRENT_FOLDER}:${RUN_TIME})
|
||||
|
||||
set(DLL_NAMES "opencv" "halcon" "halconAlgo" "myTools" "handdleAI")
|
||||
foreach(child ${DLL_NAMES})
|
||||
LIST(APPEND ENV_INCLUDE ${${child}_include})
|
||||
LIST(APPEND ENV_LIB ${${child}_lib})
|
||||
LIST(APPEND ENV_TARGET ${${child}_target_link})
|
||||
endforeach()
|
||||
message(" ENV_INCLUDE : " ${ENV_INCLUDE} )
|
||||
message(" ENV_LIB : " ${ENV_LIB} )
|
||||
message(" ENV_TARGET : " ${ENV_TARGET} )
|
||||
include_directories(
|
||||
|
||||
${ENV_INCLUDE}
|
||||
)
|
||||
|
||||
link_directories (
|
||||
${ENV_LIB}
|
||||
|
||||
)
|
||||
|
||||
|
||||
set(CMAKE_INCLUDE_CURRENT_DIR ON)
|
||||
SET(CMAKE_CXX_STANDARD 11)
|
||||
SET(CMAKE_CXX_STANDARD_REQUIRED ON)
|
||||
|
||||
set(CMAKE_AUTOMOC ON)
|
||||
SET(CMAKE_AUTOUIC ON)
|
||||
set(CMAKE_AUTORCC ON)
|
||||
|
||||
FILE(GLOB HEAD_FILES "./*.h" )
|
||||
FILE(GLOB SRC_FILES "./*.cpp")
|
||||
FILE(GLOB UI_FILES "./*.ui")
|
||||
|
||||
|
||||
#find_package(Qt5 COMPONENTS Core REQUIRED)
|
||||
find_package(QT NAMES Qt6 Qt5 COMPONENTS Core REQUIRED)
|
||||
find_package(Qt${QT_VERSION_MAJOR} COMPONENTS Core REQUIRED)
|
||||
find_package(Qt${QT_VERSION_MAJOR} COMPONENTS network REQUIRED)
|
||||
add_library(${CURRENT_FOLDER} SHARED
|
||||
${HEAD_FILES}
|
||||
${SRC_FILES}
|
||||
${UI_FILES}
|
||||
)
|
||||
|
||||
|
||||
|
||||
set_target_properties(${CURRENT_FOLDER} PROPERTIES LINKER_LANGUAGE C
|
||||
RUNTIME_OUTPUT_DIRECTORY ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}
|
||||
LIBRARY_OUTPUT_DIRECTORY ${CMAKE_LIBRARY_OUTPUT_DIRECTORY}
|
||||
ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_ARCHIVE_OUTPUT_DIRECTORY}
|
||||
)
|
||||
|
||||
|
||||
target_link_libraries(${CURRENT_FOLDER} PRIVATE
|
||||
${ENV_TARGET}
|
||||
Qt${QT_VERSION_MAJOR}::Core
|
||||
Qt${QT_VERSION_MAJOR}::Network
|
||||
)
|
||||
|
||||
|
||||
# target_compile_definitions(${CURRENT_FOLDER} PRIVATE HD_AIDEMO_MODULE_LIBRARY)
|
||||
|
||||
|
||||
|
||||
|
||||
string(TIMESTAMP RUN_TIME)
|
||||
message( " model end : " ${CURRENT_FOLDER}:${RUN_TIME})
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,166 @@
|
||||
#ifndef Hd_AI_algo_fanMianTieJiao_H
|
||||
#define Hd_AI_algo_fanMianTieJiao_H
|
||||
|
||||
#include <assert.h>
|
||||
#include <atlstr.h>
|
||||
#include <chrono>
|
||||
#include <QtCore/qglobal.h>
|
||||
|
||||
#include <QByteArray>
|
||||
#include <iostream>
|
||||
#include <QDebug>
|
||||
#include <qqueue.h>
|
||||
#include <opencv2/imgproc.hpp>
|
||||
#include <string.h>
|
||||
#include <fstream>
|
||||
#include <string>
|
||||
#include <ctime>
|
||||
#include <halconcpp/HalconCpp.h>
|
||||
#include <opencv2/opencv.hpp>
|
||||
#include "imgproc/imgproc_c.h"
|
||||
#include "base.h"
|
||||
#include "handleAI.h"
|
||||
#pragma execution_character_set("utf-8")
|
||||
using namespace handdleAI;
|
||||
|
||||
|
||||
//保存图片的结构体
|
||||
struct saveImgStruct;
|
||||
//{
|
||||
// cv::Mat out_Mat;
|
||||
// std::string saveKey; //关键字,用于LOG日志
|
||||
// std::string savePath; //保存路径
|
||||
//};
|
||||
|
||||
//初始化流程(一次):Hd_AI_algo_fanMianTieJiao,initParas
|
||||
//运行流程:writeData主线程把数据传过来,run,readData此线程把数据传主线程
|
||||
class Hd_AI_algo_fanMianTieJiao :public Base
|
||||
{
|
||||
Q_OBJECT
|
||||
public:
|
||||
Hd_AI_algo_fanMianTieJiao();
|
||||
virtual ~Hd_AI_algo_fanMianTieJiao();
|
||||
//从类中读数据到实例对象
|
||||
bool readData(std::vector<cv::Mat>&,QByteArray&);
|
||||
//实例对象把数据写入到类
|
||||
bool writeData(std::vector<cv::Mat>&, QByteArray&);
|
||||
bool initParas(QByteArray&);
|
||||
//运行(Logic_taskthread.cpp)
|
||||
bool run();
|
||||
//线程状态
|
||||
bool checkStatus();// { return true; };
|
||||
|
||||
bool encodeResultValue(QVector<std::string> append_value,QByteArray &resultByte);
|
||||
bool decodeAiValue(QByteArray byte,QVector<QByteArray> &vec_ret);
|
||||
//---------检测流程,根据实际项目修改---------
|
||||
bool AIdetect(std::vector<cv::Mat>& img2D, QString saveKey, QString Dir2D, QString SN, QString DataTime);
|
||||
|
||||
|
||||
private:
|
||||
pSegmentation* seg_yicizhuyeCanye;
|
||||
pClassification* cls_yicizhuyeCanye;
|
||||
int allNum = 0;
|
||||
int StationNo=0;
|
||||
int img2D = 2;
|
||||
|
||||
bool moduleStatus = true;
|
||||
|
||||
//输入图片队列
|
||||
QQueue<cv::Mat> HikMat;
|
||||
//输入关键字队列
|
||||
QString saveKey="saveKey";
|
||||
//结果路径文件夹队列
|
||||
QString Dir2D="Dir2D";
|
||||
//产品SN队列
|
||||
QString SN="SN";
|
||||
//产品时间戳队列
|
||||
QString DateTime1="DateTime1";
|
||||
|
||||
int paramNum;
|
||||
|
||||
//是否使用线程检测方式
|
||||
bool ifThreadRunDetect = false;
|
||||
//检测结果图
|
||||
std::vector<cv::Mat> resMat;
|
||||
//检测结果
|
||||
bool resIfNg = false;
|
||||
|
||||
QQueue<QByteArray> resByte;
|
||||
|
||||
//检测线程
|
||||
void detectThread();
|
||||
//存图线程
|
||||
void saveImgThread();
|
||||
|
||||
//保存图片队列
|
||||
QQueue<saveImgStruct> saveStruct;
|
||||
|
||||
//判断文件夹是否存在,不存在则创建
|
||||
void isDirExist(QString fullDirName);
|
||||
|
||||
//存图加入队列
|
||||
void addImgToSaveStruct(cv::Mat img2D, QString saveKey, QString savePath);
|
||||
};
|
||||
|
||||
extern "C"
|
||||
{
|
||||
Q_DECL_EXPORT Hd_AI_algo_fanMianTieJiao * create();
|
||||
Q_DECL_EXPORT void destory(Hd_AI_algo_fanMianTieJiao * ptr);
|
||||
}
|
||||
//保存图片的结构体
|
||||
struct saveImgStruct
|
||||
{
|
||||
cv::Mat out_Mat;
|
||||
std::string saveKey; //关键字,用于LOG日志
|
||||
std::string savePath; //保存路径
|
||||
};
|
||||
static cv::Mat LocalCutImg_DET(pDetection* pDet, cv::Mat src, float zoom, int checkNameId, cv::Rect& cutRoi)
|
||||
{
|
||||
cv::Mat dst;
|
||||
cv::resize(src, dst, cv::Size(src.cols / zoom, src.rows / zoom));
|
||||
vector<Bbox> resultBox = pDet->Evaluate(dst); //结果为中心点+宽高
|
||||
|
||||
cv::Mat contourImg;
|
||||
std::vector<std::vector<cv::Point>> contours;
|
||||
//cv::threshold(dstImg, contourImg, pSeg->m_classes, 255, cv::THRESH_BINARY_INV);
|
||||
//cv::findContours(contourImg, contours, cv::noArray(), cv::RETR_EXTERNAL, cv::CHAIN_APPROX_NONE);
|
||||
|
||||
cv::Mat roiImg;
|
||||
|
||||
if (resultBox.size() <= 0)
|
||||
{
|
||||
cv::Mat rstMat = cv::Mat(100, 100, CV_8UC1, cv::Scalar(0, 0, 0));
|
||||
cutRoi = cv::Rect(0, 0, 100, 100);
|
||||
return rstMat;
|
||||
}
|
||||
|
||||
double maxArea = 0;
|
||||
int index = -1;
|
||||
for (int j = 0; j < resultBox.size(); j++)
|
||||
{
|
||||
double area = resultBox[j].w * resultBox[j].h;
|
||||
if (area >= maxArea)
|
||||
{
|
||||
maxArea = area;
|
||||
index = j;
|
||||
}
|
||||
}
|
||||
|
||||
//cv::Rect rect = cv::boundingRect(contours[index]);
|
||||
|
||||
int addpixel = 15;
|
||||
|
||||
cutRoi.x = ((resultBox[index].x - resultBox[index].w / 2) * zoom);
|
||||
cutRoi.y = ((resultBox[index].y - resultBox[index].h / 2) * zoom);
|
||||
cutRoi.width = (resultBox[index].w * zoom);
|
||||
cutRoi.height = (resultBox[index].h * zoom);
|
||||
//cv::rectangle(src, cutRoi, cv::Scalar(0, 0, 255), 2, 8);
|
||||
//cutRoi.x = rect.x * zoom;
|
||||
//cutRoi.y = rect.y * zoom;
|
||||
//cutRoi.width = rect.width * zoom;
|
||||
//cutRoi.height = rect.height * zoom;
|
||||
|
||||
src(cutRoi).copyTo(roiImg);
|
||||
return roiImg;
|
||||
}
|
||||
#endif // Hd_AI_927_2D_module_H
|
||||
@@ -0,0 +1,69 @@
|
||||
#ifndef __BASECLASS_H__
|
||||
#define __BASECLASS_H__
|
||||
|
||||
#include <iostream>
|
||||
#include <QObject>
|
||||
#include <QByteArray>
|
||||
#include <opencv2/opencv.hpp>
|
||||
#include <opencv2/core.hpp>
|
||||
#include <opencv2/imgproc.hpp>
|
||||
#include<QJsonDocument>
|
||||
#include<QJsonObject>
|
||||
#include<QJsonArray>
|
||||
|
||||
class Base :public QObject
|
||||
{
|
||||
Q_OBJECT
|
||||
public:
|
||||
bool init_flag; //是否初始化,false,true
|
||||
bool status = true; //相机状态(判断相机是否断开连接)
|
||||
std::string paras; //传输数据
|
||||
std::vector<cv::Mat> m_mat; //传输图片
|
||||
std::string moduleName; //模块名称
|
||||
public:
|
||||
Base(){}
|
||||
virtual ~Base(){}
|
||||
virtual bool readData(std::vector<cv::Mat>&,QByteArray&){return true;}
|
||||
virtual bool writeData(std::vector<cv::Mat>&,QByteArray&){return true;}
|
||||
virtual bool initParas(QByteArray&){return true;}
|
||||
virtual bool run() {return true;}
|
||||
virtual bool checkStatus() { return true; }
|
||||
|
||||
//signals:
|
||||
//QByteArrayList,根据实际项目进行解析;因不确定每个参数的长度,固用队列的方式。每个QByteArray表示一个值,使用时先转换为QString
|
||||
//参数,例:返回结果图;相机关键字(SN或userID)+保存路径+缺陷信息列表(缺陷名称,缺陷位置int(x,y,w,h),画框颜色Scalar(a,b,c),缺陷面积double)
|
||||
//void sendResultData(cv::Mat resMat, QJsonObject resQbj);
|
||||
};
|
||||
|
||||
/*
|
||||
//QJsonObject 转QByteArray
|
||||
{
|
||||
QJsonDocument document;
|
||||
QJsonObject obj;
|
||||
obj.insert(password, "pwd");
|
||||
obj.insert(userName, "usr");
|
||||
document.setObject(obj);
|
||||
QByteArray abyte = document.toJson(QJsonDocument::Compact);
|
||||
}
|
||||
|
||||
//QByteArray转QJsonObject
|
||||
{
|
||||
QByteArray ba = reply->readAll();
|
||||
QJsonDocument doc = QJsonDocument::fromJson(ba);
|
||||
QJsonObject obj = doc.object();
|
||||
}
|
||||
*/
|
||||
/*
|
||||
//从类中读数据到实例对象
|
||||
virtual bool readData(std::vector<cv::Mat>&,QByteArray&){return true;}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
*/
|
||||
|
||||
#endif
|
||||
Reference in New Issue
Block a user