This commit is contained in:
2025-11-10 00:27:17 +08:00
parent b6444b388d
commit c7f13138f5
125 changed files with 2954 additions and 5704 deletions
@@ -28,7 +28,7 @@ SET(CMAKE_CXX_STANDARD 11)
SET(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_AUTOMOC ON)
SET(CMAKE_AUTOUIC ON)
SET(CMAKE_AUTOUIC OFF)
set(CMAKE_AUTORCC ON)
FILE(GLOB HEAD_FILES "./*.h" )
@@ -36,7 +36,16 @@ QString byteArrayToUnicode(const QByteArray array) {
}
return text;
}
static MV_CC_DEVICE_INFO_LIST QByteArrayToMV_CC_DeviceInfoList(const QByteArray& byteArray) {
MV_CC_DEVICE_INFO_LIST deviceInfoList;
if (byteArray.size() == sizeof(MV_CC_DEVICE_INFO_LIST)) {
memcpy(&deviceInfoList, byteArray.constData(), sizeof(MV_CC_DEVICE_INFO_LIST));
}
else {
qDebug() << "Invalid size of QByteArray for MV_CC_DEVICE_INFO_LIST!";
}
return deviceInfoList;
}
#pragma execution_character_set("utf-8")
QMutex* n_mutex;// = new QMutex();
@@ -93,9 +102,15 @@ bool IsColor(MvGvspPixelType enType)
//搜索所有设备
int SearchDevice()
{
memset(&m_stDevList, 0, sizeof(MV_CC_DEVICE_INFO_LIST));
// ch:枚举子网内所有设备 | en:Enumerate all devices within subnet
int nRet = MV_CC_EnumDevices(MV_USB_DEVICE , &m_stDevList);
if (m_stDevList.nDeviceNum == 0) {
memset(&m_stDevList, 0, sizeof(MV_CC_DEVICE_INFO_LIST));
// ch:枚举子网内所有设备 | en:Enumerate all devices within subnet
int nRet = MV_CC_EnumDevices(MV_GIGE_DEVICE | MV_USB_DEVICE, &m_stDevList);
if (MV_OK != nRet)
{
return 0;
}
}
for (int i = 0; i < m_stDevList.nDeviceNum; i++)
{
//SN
@@ -109,21 +124,17 @@ int SearchDevice()
break;
}
}
if (MV_OK != nRet)
{
return 0;
}
return -1;
}
bool connctDevice()
bool connectDevice()
{
index = -1;
SearchDevice();
if (index == -1)
{
//未匹配到相机
qDebug() << "[Waring] " << "Hd_CameraModule_HIK_soft not match --CameraName:" << QString::fromStdString(Username);
qDebug() << "[Waring] " << "Hd_CameraModule_HIK_hard_USB not match --CameraName:" << QString::fromStdString(Username);
return false;
}
unsigned char* name = m_stDevList.pDeviceInfo[index]->SpecialInfo.stGigEInfo.chUserDefinedName;
@@ -177,9 +188,9 @@ void __stdcall ReconnectDevice(unsigned int nMsgType, void* pUser)
while (1)
{
Sleep(100);
if (connctDevice() == true)
if (connectDevice() == true)
{
qWarning() << "[Hd_CameraModule_HIK_soft] " << " Hd_CameraModule_HIK_soft create success again! ";
qWarning() << "[Hd_CameraModule_HIK_hard_USB] " << " Hd_CameraModule_HIK_hard_USB create success again! ";
moduleStatus = true;
break;
}
@@ -215,20 +226,20 @@ int RGB2BGR(unsigned char* pRgbData, unsigned int nWidth, unsigned int nHeight)
}
Hd_CameraModule_HIK_soft* create()
Hd_CameraModule_HIK_hard_USB* create()
{
qDebug() << "[INFO] " << "Hd_CameraModule_HIK_soft create success!" ;
return new Hd_CameraModule_HIK_soft;
qDebug() << "[INFO] " << "Hd_CameraModule_HIK_hard_USB create success!" ;
return new Hd_CameraModule_HIK_hard_USB;
}
void destory(Hd_CameraModule_HIK_soft * ptr)
void destory(Hd_CameraModule_HIK_hard_USB * ptr)
{
if(ptr)
{
delete ptr;
ptr = nullptr;
}
qDebug() << "[INFO] " << "Hd_CameraModule_HIK_soft destory success!";
qDebug() << "[INFO] " << "Hd_CameraModule_HIK_hard_USB destory success!";
}
//回调函数;
//经测试,相机像素格式Mono8、RGB8是可以正常转换的,YUV422还需要优化;RGB8格式比YUV422帧率低;BGR格式会导致异色问题
@@ -339,7 +350,7 @@ void SetGain(float GainValue)
MV_CC_SetEnumValue(handle, "GainAuto", 0);
MV_CC_SetFloatValue(handle, "Gain", GainValue);
}
Hd_CameraModule_HIK_soft::Hd_CameraModule_HIK_soft()
Hd_CameraModule_HIK_hard_USB::Hd_CameraModule_HIK_hard_USB()
{
n_mutex = new QMutex();
m_thread = new MyThread;
@@ -353,7 +364,7 @@ void CloseDevice()
handle = nullptr; //此处注释掉的话,软件断开再连接,回调函数不出图
}
Hd_CameraModule_HIK_soft::~Hd_CameraModule_HIK_soft()
Hd_CameraModule_HIK_hard_USB::~Hd_CameraModule_HIK_hard_USB()
{
m_flag = true;
Sleep(10);
@@ -374,7 +385,7 @@ Hd_CameraModule_HIK_soft::~Hd_CameraModule_HIK_soft()
qDebug() << "[INFO] " << " delete success!";
}
//从类中读数据到实例对象
bool Hd_CameraModule_HIK_soft::readData(std::vector<cv::Mat> &mat,QByteArray &data)
bool Hd_CameraModule_HIK_hard_USB::readData(std::vector<cv::Mat> &mat,QByteArray &data)
{
if (queuepic.isEmpty())
{
@@ -392,9 +403,16 @@ bool Hd_CameraModule_HIK_soft::readData(std::vector<cv::Mat> &mat,QByteArray &da
return true;
}
//实例对象把数据写入到类
bool Hd_CameraModule_HIK_soft::writeData(std::vector<cv::Mat> &mat,QByteArray &data)
bool Hd_CameraModule_HIK_hard_USB::writeData(std::vector<cv::Mat> &mat,QByteArray &data)
{
//2024.02.18更新,相机对应的读SN信号时,表示新产品进入,设置初始值
if (data.contains("deviceList")) {
auto result = QByteArrayToMV_CC_DeviceInfoList(data.mid(10));
if (result.nDeviceNum != 0) {
m_stDevList = result;
return true;
}
}
if (data == "rest_newProductIn")
{
//根据实际项目,设置初始值:曝光、增益,ROI区域等
@@ -476,7 +494,7 @@ bool Hd_CameraModule_HIK_soft::writeData(std::vector<cv::Mat> &mat,QByteArray &d
data.append("TriggerMode_" + ui.comboBox_triggerMode->currentText());*/
qDebug() << "Hd_CameraModule_HIK_soft::writeData::" << data;
qDebug() << "Hd_CameraModule_HIK_hard_USB::writeData::" << data;
m_flag = false;
//Username = data.toStdString();
@@ -485,7 +503,7 @@ bool Hd_CameraModule_HIK_soft::writeData(std::vector<cv::Mat> &mat,QByteArray &d
//传入initParas函数,格式为:相机key+参数名1#参数值1#参数值2+参数名2#参数值1...
bool Hd_CameraModule_HIK_soft::initParas(QByteArray& initData)
bool Hd_CameraModule_HIK_hard_USB::initParas(QByteArray& initData)
{
QByteArrayList valueList = initData.split('+');
Username = valueList[0];
@@ -497,7 +515,7 @@ bool Hd_CameraModule_HIK_soft::initParas(QByteArray& initData)
bool ifOk = true;
if (handle == NULL)
ifOk = connctDevice();
ifOk = connectDevice();
if (ifOk == false)
return false;
if (valueList.size() > 1)
@@ -618,7 +636,7 @@ bool Hd_CameraModule_HIK_soft::initParas(QByteArray& initData)
return ifOk;
}
bool Hd_CameraModule_HIK_soft::run()
bool Hd_CameraModule_HIK_hard_USB::run()
{
if (imgIndex == expourseTimeList.size())
imgIndex = 0;
@@ -664,7 +682,7 @@ bool Hd_CameraModule_HIK_soft::run()
break;
}
if (cnt > 150) {
queuepic.push_back(cv::Mat(200, 200, CV_8UC3, cv::Scalar(0, 255, 0))); //返回空图
queuepic.push_back(cv::Mat(200, 200, CV_8UC1, cv::Scalar(0))); //返回空图
std::cout << "timeout" << std::endl;
n_mutex->unlock();
return true;
@@ -709,7 +727,7 @@ bool Hd_CameraModule_HIK_soft::run()
}
//相机连接状态:正常连接或断开
bool Hd_CameraModule_HIK_soft::checkStatus()
bool Hd_CameraModule_HIK_hard_USB::checkStatus()
{
//status = moduleStatus;
return moduleStatus;
@@ -1,5 +1,5 @@
#ifndef Hd_CameraModule_HIK_soft_H
#define Hd_CameraModule_HIK_soft_H
#ifndef Hd_CameraModule_HIK_hard_USB_H
#define Hd_CameraModule_HIK_hard_USB_H
#include <QtCore/qglobal.h>
@@ -22,11 +22,11 @@ using namespace cv;
class MyThread;
class Hd_CameraModule_HIK_soft :public dsModuleBase
class Hd_CameraModule_HIK_hard_USB :public dsModuleBase
{
public:
Hd_CameraModule_HIK_soft();
virtual ~Hd_CameraModule_HIK_soft();
Hd_CameraModule_HIK_hard_USB();
virtual ~Hd_CameraModule_HIK_hard_USB();
//从类中读数据到实例对象
bool readData(std::vector<cv::Mat>& mat, QByteArray& data);
//实例对象把数据写入到类
@@ -52,8 +52,8 @@ signals:
extern "C"
{
Q_DECL_EXPORT Hd_CameraModule_HIK_soft * create();
Q_DECL_EXPORT void destory(Hd_CameraModule_HIK_soft * ptr);
Q_DECL_EXPORT Hd_CameraModule_HIK_hard_USB * create();
Q_DECL_EXPORT void destory(Hd_CameraModule_HIK_hard_USB * ptr);
}
#endif // Hd_CameraModule_HIK_soft_H
#endif // Hd_CameraModule_HIK_hard_USB_H