Commit b2696176 by “liusq”

新增NVR处理抓图失败

parent bb126533
...@@ -223,6 +223,10 @@ int CameraHandle::sdkDevSetAlarmListener(XSDK_HANDLE hDevice, int bListener) { ...@@ -223,6 +223,10 @@ int CameraHandle::sdkDevSetAlarmListener(XSDK_HANDLE hDevice, int bListener) {
return XSDK_DevSetAlarmListener(hDevice,bListener); return XSDK_DevSetAlarmListener(hDevice,bListener);
} }
void CameraHandle::setHkDevice(int hk_Device){
this->hk_Device=hk_Device;
}
int CameraHandle::getChannel(){ int CameraHandle::getChannel(){
return channel; return channel;
} }
...@@ -405,9 +409,20 @@ int CameraHandle::callbackFunction(XSDK_HANDLE hObject, QString &szString) { ...@@ -405,9 +409,20 @@ int CameraHandle::callbackFunction(XSDK_HANDLE hObject, QString &szString) {
if (image.empty()) if (image.empty())
{ {
qInfo() << "Failed to read the image"; qInfo() << "FaceImageCallBack抓图失败,尝试调用FaceHkImageCallBack";
int hk_channel= mediaFaceImage->getIPChannelInfo(hk_Device,QString(loginParam->sDevId));
if(hk_channel<0){
qInfo() <<QString("SN(%1): callbackFunction通过IP获取到对应通道号失败").arg(sSn);
return -1;
}
// 调用FaceHkImageCallBack抓图
mediaFaceImage->FaceHkImageCallBack(hk_Device, hk_channel, image, sSn);
// 再次检查抓图是否成功
if (image.empty()) {
qInfo() << "FaceHkImageCallBack抓图也失败";
return -1; return -1;
} }
}
if (image.rows <= 0 || image.cols <= 0 || image.channels() <= 0) { if (image.rows <= 0 || image.cols <= 0 || image.channels() <= 0) {
qInfo() << "图像尺寸或通道数不正确,需排查原因"; qInfo() << "图像尺寸或通道数不正确,需排查原因";
return -1; return -1;
...@@ -423,7 +438,7 @@ void CameraHandle::sdkDevSnapSyn(XSDK_HANDLE hDevice, int nChannel){ ...@@ -423,7 +438,7 @@ void CameraHandle::sdkDevSnapSyn(XSDK_HANDLE hDevice, int nChannel){
return; return;
} }
if (!semaphore.tryAcquire()) { if (!semaphore.tryAcquire()) {
qInfo() << QString("SN(%1): callbackFunction:正在执行线程").arg(sSn);; qInfo() << QString("SN(%1): callbackFunction:正在执行线程").arg(sSn);
return ; return ;
} }
ScopeSemaphoreExit guard([this]() { ScopeSemaphoreExit guard([this]() {
...@@ -434,12 +449,18 @@ void CameraHandle::sdkDevSnapSyn(XSDK_HANDLE hDevice, int nChannel){ ...@@ -434,12 +449,18 @@ void CameraHandle::sdkDevSnapSyn(XSDK_HANDLE hDevice, int nChannel){
if(algorithmPermissions ==0x00){ if(algorithmPermissions ==0x00){
return ; return ;
} }
cv::Mat image; cv::Mat image;
MediaFaceImage* mediaFaceImage= MediaFaceImage::getInstance(); MediaFaceImage* mediaFaceImage= MediaFaceImage::getInstance();
qint64 currentTime= QDateTime::currentSecsSinceEpoch(); qint64 currentTime= QDateTime::currentSecsSinceEpoch();
int ret=mediaFaceImage->FaceImageCallBack(hDevice,nChannel, image,sSn); int ret=mediaFaceImage->FaceImageCallBack(hDevice,nChannel, image,sSn);
if (ret < 0) { if (ret < 0) {
int hk_channel= mediaFaceImage->getIPChannelInfo(hk_Device,QString(loginParam->sDevId));
if(hk_channel<0){
qInfo() <<QString("SN(%1): sdkDevSnapSyn 通过IP获取到对应通道号失败").arg(sSn);
return ;
}
int retHk = mediaFaceImage->FaceHkImageCallBack(hk_Device, hk_channel, image, sSn);
if(retHk<0){
offlineCount++; // 累加计数器 offlineCount++; // 累加计数器
if (offlineCount >= 3) { // 判断是否连续3次返回0 if (offlineCount >= 3) { // 判断是否连续3次返回0
qInfo() <<QString("SN(%1): 设备离线").arg(sSn); qInfo() <<QString("SN(%1): 设备离线").arg(sSn);
...@@ -457,9 +478,12 @@ void CameraHandle::sdkDevSnapSyn(XSDK_HANDLE hDevice, int nChannel){ ...@@ -457,9 +478,12 @@ void CameraHandle::sdkDevSnapSyn(XSDK_HANDLE hDevice, int nChannel){
// TODO: 可以在此处更新设备状态、发送告警通知等 // TODO: 可以在此处更新设备状态、发送告警通知等
// 重置计数器,以便下次再次检测连续离线 // 重置计数器,以便下次再次检测连续离线
offlineCount = 0; offlineCount = 0;
return; return;
} }
}else {
// 如果不连续,则重置计数器
offlineCount = 0;
}
} else { } else {
// 如果不连续,则重置计数器 // 如果不连续,则重置计数器
offlineCount = 0; offlineCount = 0;
...@@ -471,7 +495,6 @@ void CameraHandle::sdkDevSnapSyn(XSDK_HANDLE hDevice, int nChannel){ ...@@ -471,7 +495,6 @@ void CameraHandle::sdkDevSnapSyn(XSDK_HANDLE hDevice, int nChannel){
} }
if (image.rows <= 0 || image.cols <= 0 || image.channels() <= 0) { if (image.rows <= 0 || image.cols <= 0 || image.channels() <= 0) {
qInfo()<<QString("SN(%1): 图像尺寸或通道数不正确,需排查原因").arg(sSn); qInfo()<<QString("SN(%1): 图像尺寸或通道数不正确,需排查原因").arg(sSn);
return ; return ;
} }
updateImage(image, currentTime); updateImage(image, currentTime);
......
...@@ -50,9 +50,9 @@ public: ...@@ -50,9 +50,9 @@ public:
~CameraHandle(); ~CameraHandle();
int sdkDevLoginSyn(QString sDevId, int nDevPort, QString sUserName, QString sPassword, int nTimeout); int sdkDevLoginSyn(QString sDevId, int nDevPort, QString sUserName, QString sPassword, int nTimeout);
//int SdkMediaGetFaceImage(int hDevice, int nSeq, int nTimeout); //int SdkMediaGetFaceImage(int hDevice, int nSeq, int nTimeout);
int sdkDevSetAlarmListener(XSDK_HANDLE hDevice, int bListener); int sdkDevSetAlarmListener(XSDK_HANDLE hDevice, int bListener);
void setHkDevice(int hk_Device);
int getHdevice(); int getHdevice();
int getChannel(); int getChannel();
...@@ -185,7 +185,10 @@ private slots: ...@@ -185,7 +185,10 @@ private slots:
private : private :
int hDevice; int hDevice;
int hk_Device;
int channel; int channel;
QString httpUrl; QString httpUrl;
SXSDKLoginParam *loginParam; SXSDKLoginParam *loginParam;
......
...@@ -562,6 +562,12 @@ vides_data::response *HttpService::httpDeviceConfig(const QString &serialNumber, ...@@ -562,6 +562,12 @@ vides_data::response *HttpService::httpDeviceConfig(const QString &serialNumber,
config.humanConfig.isOn=humanConfigObj["isOn"].toBool(); config.humanConfig.isOn=humanConfigObj["isOn"].toBool();
config.humanConfig.updateAt = humanConfigObj["updateAt"].toVariant().toULongLong(); config.humanConfig.updateAt = humanConfigObj["updateAt"].toVariant().toULongLong();
config.humanConfig.faceFrequency = humanConfigObj["faceFrequency"].toVariant().toUInt(); config.humanConfig.faceFrequency = humanConfigObj["faceFrequency"].toVariant().toUInt();
//解析nvrConfig;
QJsonObject nvrConfigObj= dataObj["nvrConfig;"].toObject();
config.nvrConfig.ip=nvrConfigObj["ip"].toString();
config.nvrConfig.port=(unsigned short) nvrConfigObj["port"].toInt();
config.nvrConfig.password=nvrConfigObj["password"].toString();
config.nvrConfig.username=nvrConfigObj["username"].toString();
// 解析 devicesConfig // 解析 devicesConfig
QJsonObject devicesConfigObj = dataObj["camera"].toObject(); QJsonObject devicesConfigObj = dataObj["camera"].toObject();
config.camera.password = devicesConfigObj["password"].toString(); config.camera.password = devicesConfigObj["password"].toString();
......
...@@ -117,6 +117,21 @@ int MediaFaceImage::SdkSearchDevicesSyn(std::map<QString, vides_data::localDevic ...@@ -117,6 +117,21 @@ int MediaFaceImage::SdkSearchDevicesSyn(std::map<QString, vides_data::localDevic
} }
int MediaFaceImage::SdkIpcSearchDevicesSyn( int lUserID, NET_DVR_IPPARACFG_V40 *reqParams){
int iRet = -1;
DWORD uiReturnLen = 0;
LONG lChannel = 0;
//get
iRet = NET_DVR_GetDVRConfig(lUserID, NET_DVR_GET_IPPARACFG_V40, lChannel, \
reqParams, sizeof(NET_DVR_IPPARACFG_V40), &uiReturnLen);
if (!iRet){
qInfo() <<QString("pyd---NET_DVR_GetDVRConfig NET_DVR_GET_IPPARACFG_V40 error.%1\n").arg(NET_DVR_GetLastError());
return -1;
}
return 0;
}
int MediaFaceImage::SdkInit(QString &szConfigPath, QString &szTempPath) { int MediaFaceImage::SdkInit(QString &szConfigPath, QString &szTempPath) {
SXSDKInitParam *pParam=new SXSDKInitParam(); SXSDKInitParam *pParam=new SXSDKInitParam();
pParam->nLogLevel=8; pParam->nLogLevel=8;
...@@ -262,6 +277,71 @@ int MediaFaceImage::FaceImageCallBack(XSDK_HANDLE hMedia, int nChannel, cv::Mat ...@@ -262,6 +277,71 @@ int MediaFaceImage::FaceImageCallBack(XSDK_HANDLE hMedia, int nChannel, cv::Mat
return pInOutBufferSize; return pInOutBufferSize;
} }
int MediaFaceImage::getIPChannelInfo(int hk_Device,const QString& ip){
NET_DVR_IPPARACFG_V40 m_strIpparaCfg = {0};
m_strIpparaCfg.dwSize = sizeof(m_strIpparaCfg);
bool bRet =SdkIpcSearchDevicesSyn(hk_Device, &m_strIpparaCfg);
if (!bRet) {
qInfo() << "获取IP接入配置参数失败,错误码:" << NET_DVR_GetLastError();
return -1;
}
for (int iChannum = 0; iChannum < m_strIpparaCfg.dwDChanNum; ++iChannum) {
if (m_strIpparaCfg.struStreamMode[iChannum].byGetStreamType == 0) {
int channel = m_strIpparaCfg.struStreamMode[iChannum].uGetStream.struChanInfo.byIPID +
(m_strIpparaCfg.struStreamMode[iChannum].uGetStream.struChanInfo.byIPIDHigh * 256);
if (channel > 0 && m_strIpparaCfg.struStreamMode[iChannum].uGetStream.struChanInfo.byEnable == 1) {
char ip_addr[16] = {0};
strncpy(ip_addr, m_strIpparaCfg.struIPDevInfo[channel - 1].struIP.sIpV4, sizeof(ip_addr) - 1);
QString key = QString::fromUtf8(ip_addr).trimmed();
if (key == ip) {
qInfo() << "找到匹配的IP:" << key << ",通道号:" << channel;
return channel; // 返回找到的第一个匹配的通道号
}
}
}
}
qInfo() << "未找到匹配的IP:" << ip;
return -1; // 没有找到匹配的IP地址
}
int MediaFaceImage::FaceHkImageCallBack(int userID,int channelID,cv::Mat &image,QString &sSn){
image.release();
NET_DVR_JPEGPARA jpegpara = {0};
jpegpara.wPicQuality = 0;
jpegpara.wPicSize = 0xff; // 自动选择图片大小
const size_t M1 = 8 << 20; // 8 MB 缓冲区大小
std::unique_ptr<char[]> buffer(new char[M1]); // 使用智能指针管理缓冲区
unsigned int imageLen = 0;
bool result = NET_DVR_CaptureJPEGPicture_NEW(userID, 32 + channelID, &jpegpara,
buffer.get(), M1, &imageLen);
if (!result || imageLen == 0) {
qInfo() << "抓图失败, 错误码:" << NET_DVR_GetLastError();
return -1;
}
// 使用 std::vector 管理缓冲区数据
std::vector<uchar> imageBuffer(imageLen);
memcpy(imageBuffer.data(), buffer.get(), imageLen);
try {
// 解码 JPEG 数据为 cv::Mat
cv::Mat decodedImage = cv::imdecode(imageBuffer, cv::IMREAD_UNCHANGED);
if (decodedImage.empty()) {
qInfo() << QString("SN(%1): 图像解码失败").arg(sSn);
return -1;
}
// 转移解码后的图像到输出参数
image = std::move(decodedImage);
} catch (const cv::Exception &e) {
qInfo() << QString("SN(%1): 图像解码过程中捕获异常:%2").arg(sSn).arg(e.what());
return -1;
}
return imageLen; // 返回图像数据长度
}
int MediaFaceImage::CameraImage(XSDK_HANDLE hMedia,int nChannel,std::vector<uchar> &buffer){ int MediaFaceImage::CameraImage(XSDK_HANDLE hMedia,int nChannel,std::vector<uchar> &buffer){
static const int BufferSize = 1024 * 1024 * 2; // 2MB buffer size static const int BufferSize = 1024 * 1024 * 2; // 2MB buffer size
static unsigned char pOutBuffer[BufferSize]; static unsigned char pOutBuffer[BufferSize];
......
...@@ -6,6 +6,7 @@ ...@@ -6,6 +6,7 @@
#include "VidesData.h" #include "VidesData.h"
#include "Common.h" #include "Common.h"
#include "TaskRunnable.h" #include "TaskRunnable.h"
#include "HCNetSDK.h"
#include <memory> #include <memory>
#include <map> #include <map>
#include <QDebug> #include <QDebug>
...@@ -19,6 +20,9 @@ public: ...@@ -19,6 +20,9 @@ public:
void ParserImageData(const unsigned char* pData, int nDataLen, char* pJpg, int* nJpgLen, char* pJson); void ParserImageData(const unsigned char* pData, int nDataLen, char* pJpg, int* nJpgLen, char* pJson);
int FaceImageCallBack(XSDK_HANDLE hMedia,int nChannel,cv::Mat &image,QString &sSn); int FaceImageCallBack(XSDK_HANDLE hMedia,int nChannel,cv::Mat &image,QString &sSn);
int FaceHkImageCallBack(int userID,int channelID,cv::Mat &image,QString &sSn);
int CameraImage(XSDK_HANDLE hMedia,int nChannel,std::vector<uchar> &buffer); int CameraImage(XSDK_HANDLE hMedia,int nChannel,std::vector<uchar> &buffer);
int ToFile(const char* pFileName, const void* pData, int nLenght); int ToFile(const char* pFileName, const void* pData, int nLenght);
...@@ -27,6 +31,10 @@ public: ...@@ -27,6 +31,10 @@ public:
int SdkSearchDevicesSyn(std::map< QString,vides_data::localDeviceStatus*>& devices); int SdkSearchDevicesSyn(std::map< QString,vides_data::localDeviceStatus*>& devices);
int SdkIpcSearchDevicesSyn(int lUserID, NET_DVR_IPPARACFG_V40 *reqParams);
//通过IP获取到对应通道号
int getIPChannelInfo(int hk_Device,const QString& ip);
int SdkInit(QString &szConfigPath, QString &szTempPath); int SdkInit(QString &szConfigPath, QString &szTempPath);
std::map<int,CameraHandle*>getCurrentDevice(); std::map<int,CameraHandle*>getCurrentDevice();
......
...@@ -311,7 +311,12 @@ struct MqttConfig { ...@@ -311,7 +311,12 @@ struct MqttConfig {
QString password; QString password;
quint64 updateAt; quint64 updateAt;
}; };
struct NvrConfig{
QString ip;
QString username;
QString password;
uint16_t port;
};
struct responseConfig { struct responseConfig {
...@@ -323,7 +328,7 @@ struct responseConfig { ...@@ -323,7 +328,7 @@ struct responseConfig {
UniformConfig uniformConfig; UniformConfig uniformConfig;
Camera camera; Camera camera;
MqttConfig mqttConfig; MqttConfig mqttConfig;
NvrConfig nvrConfig;
HumanConfig humanConfig; HumanConfig humanConfig;
}; };
...@@ -358,7 +363,6 @@ struct DetectionParams { ...@@ -358,7 +363,6 @@ struct DetectionParams {
float recConfidenceThreshold; ///< 识别置信度阈值 float recConfidenceThreshold; ///< 识别置信度阈值
}; };
inline bool isVirtualMachine() inline bool isVirtualMachine()
{ {
QString dmiPath; QString dmiPath;
......
...@@ -17,7 +17,9 @@ DEFINES += APP_VERSION=\\\"1.3.2\\\" ...@@ -17,7 +17,9 @@ DEFINES += APP_VERSION=\\\"1.3.2\\\"
DEFINES += QT_MESSAGELOGCONTEXT DEFINES += QT_MESSAGELOGCONTEXT
DEFINES += QT_NO_DEBUG_OUTPUT DEFINES += QT_NO_DEBUG_OUTPUT
QMAKE_LIBDIR += /usr/local/lib # 设置库路径
QMAKE_LIBDIR += /usr/local/lib \
/usr/local/lib/HCNetSDKCom
INCLUDEPATH+=/usr/local/include/opencv4 INCLUDEPATH+=/usr/local/include/opencv4
INCLUDEPATH+=/usr/local/include/hyperface INCLUDEPATH+=/usr/local/include/hyperface
...@@ -27,7 +29,7 @@ INCLUDEPATH+=/usr/local/include/human ...@@ -27,7 +29,7 @@ INCLUDEPATH+=/usr/local/include/human
INCLUDEPATH+=/usr/local/include/CImg INCLUDEPATH+=/usr/local/include/CImg
INCLUDEPATH+=/usr/local/include/mqtt INCLUDEPATH+=/usr/local/include/mqtt
INCLUDEPATH+=/usr/local/include/stb_image INCLUDEPATH+=/usr/local/include/stb_image
INCLUDEPATH+=/usr/local/include/hkws
...@@ -88,6 +90,7 @@ LIBS += -lopencv_core \ ...@@ -88,6 +90,7 @@ LIBS += -lopencv_core \
-lopencv_objdetect \ -lopencv_objdetect \
-lsohuman \ -lsohuman \
-lpaho-mqtt3a \ -lpaho-mqtt3a \
-lhcnetsdk \
# -lssl \ # -lssl \
# -lcrypto \ sudo apt-get install libjpeg-dev libpng-dev # -lcrypto \ sudo apt-get install libjpeg-dev libpng-dev
-lc \ -lc \
......
...@@ -92,6 +92,9 @@ MainWindow::MainWindow():isResetting(false) ...@@ -92,6 +92,9 @@ MainWindow::MainWindow():isResetting(false)
qInfo() << "sdk初始化失败"; qInfo() << "sdk初始化失败";
return; return;
} }
//QString ip,QString userName,QString passWord,uint16_t port
loginNetDvr(config.nvrConfig.ip,config.nvrConfig.username,config.nvrConfig.password,config.nvrConfig.port);
connect(this, SIGNAL(shutdownSignals(QString,int)), this, SLOT(clearHandle(QString,int)),Qt::QueuedConnection); connect(this, SIGNAL(shutdownSignals(QString,int)), this, SLOT(clearHandle(QString,int)),Qt::QueuedConnection);
...@@ -141,6 +144,36 @@ void MainWindow::runOrRebootMqtt(vides_data::MqttConfig &mqtt_config,QString &ht ...@@ -141,6 +144,36 @@ void MainWindow::runOrRebootMqtt(vides_data::MqttConfig &mqtt_config,QString &ht
subscriber->start(); subscriber->start();
} }
int MainWindow::loginNetDvr(QString ip,QString userName,QString passWord,uint16_t port){
NET_DVR_USER_LOGIN_INFO loginInfo;
NET_DVR_DEVICEINFO_V40 deviceInfo;
loginInfo.wPort=port;
QByteArray bIp = ip.toUtf8();
char* cDevid=bIp.data();
memcpy(loginInfo.sDeviceAddress,cDevid,129);
QByteArray byteName = userName.toUtf8();
char* cName=byteName.data();
memcpy(loginInfo.sUserName, cName,32);
QByteArray bytePassword = passWord.toUtf8();
char* cPassword=bytePassword.data();
memcpy(loginInfo.sPassword, cPassword,32);
LONG lUserID = NET_DVR_Login_V40(&loginInfo, &deviceInfo);
if (lUserID < 0) {
qInfo() << QString("登录设备失败,错误编码:%1").arg(NET_DVR_GetLastError());
return lUserID;
}
this->hk_Device=lUserID;
return lUserID;
}
void MainWindow::divParameterUpdate(vides_data::responseConfig &cloudConfig,QString &httpUrl,QString &serialNumber ){ void MainWindow::divParameterUpdate(vides_data::responseConfig &cloudConfig,QString &httpUrl,QString &serialNumber ){
bool faceAlgorithm = false, licensePlateAlgorithm = false, uniformAlgorithm = false, timeChange = false; bool faceAlgorithm = false, licensePlateAlgorithm = false, uniformAlgorithm = false, timeChange = false;
AlgorithmTaskManage &algorithmTaskManage= AlgorithmTaskManage::getInstance(); AlgorithmTaskManage &algorithmTaskManage= AlgorithmTaskManage::getInstance();
...@@ -504,6 +537,7 @@ void MainWindow::clearOfflineCameraHandle(QString sDevId, int nDevPort) { ...@@ -504,6 +537,7 @@ void MainWindow::clearOfflineCameraHandle(QString sDevId, int nDevPort) {
void MainWindow::setIsResetting(bool running) { void MainWindow::setIsResetting(bool running) {
this->isResetting.store(running, std::memory_order_release); this->isResetting.store(running, std::memory_order_release);
} }
//平台没有 盒子有 盒子关闭 //平台没有 盒子有 盒子关闭
void MainWindow::startCamera(const QString &httpurl){ void MainWindow::startCamera(const QString &httpurl){
if(this->isResetting.load(std::memory_order_acquire)){ if(this->isResetting.load(std::memory_order_acquire)){
...@@ -1058,7 +1092,7 @@ void MainWindow::initCameras(vides_data::cameraParameters &parameter,vides_data: ...@@ -1058,7 +1092,7 @@ void MainWindow::initCameras(vides_data::cameraParameters &parameter,vides_data:
CameraHandle * cameraHandle =new CameraHandle(parameter.sDevId,parameter.httpUrl,parameter.sSn,parameter.channel,image_save,heightReference,devConfig); CameraHandle * cameraHandle =new CameraHandle(parameter.sDevId,parameter.httpUrl,parameter.sSn,parameter.channel,image_save,heightReference,devConfig);
int sdk_handle=cameraHandle->sdkDevLoginSyn(parameter.sDevId,parameter.nDevPort,parameter.sUserName,parameter.sPassword,3000); int sdk_handle=cameraHandle->sdkDevLoginSyn(parameter.sDevId,parameter.nDevPort,parameter.sUserName,parameter.sPassword,3000);
qDebug() << QString("SN(%1): 句柄为%2").arg(parameter.sSn).arg(sdk_handle); qInfo() << QString("SN(%1): 句柄为%2").arg(parameter.sSn).arg(sdk_handle);
if(sdk_handle<=0){ if(sdk_handle<=0){
qInfo() << QString("SN(%1): 登录失败").arg(parameter.sSn); qInfo() << QString("SN(%1): 登录失败").arg(parameter.sSn);
...@@ -1070,8 +1104,7 @@ void MainWindow::initCameras(vides_data::cameraParameters &parameter,vides_data: ...@@ -1070,8 +1104,7 @@ void MainWindow::initCameras(vides_data::cameraParameters &parameter,vides_data:
initDevConfigSyn(cameraHandle,devConfig); initDevConfigSyn(cameraHandle,devConfig);
cameraHandle->sdkDevSetAlarmListener(sdk_handle,0); cameraHandle->sdkDevSetAlarmListener(sdk_handle,0);
cameraHandle->setHkDevice(hk_Device);
int synTime=devConfig.camera.devSnapSynTimer; int synTime=devConfig.camera.devSnapSynTimer;
uint64 face_frequency=devConfig.humanConfig.faceFrequency; uint64 face_frequency=devConfig.humanConfig.faceFrequency;
float carConfidenceMax=devConfig.licensePlateConfig.carConfidenceMax; float carConfidenceMax=devConfig.licensePlateConfig.carConfidenceMax;
......
...@@ -8,6 +8,7 @@ ...@@ -8,6 +8,7 @@
#include "MediaFaceImage.h" #include "MediaFaceImage.h"
#include "AlgorithmTaskManage.h" #include "AlgorithmTaskManage.h"
#include "MqttSubscriber.h" #include "MqttSubscriber.h"
#include "HCNetSDK.h"
#include <algorithm> #include <algorithm>
#include <QString> #include <QString>
#include <QTextCodec> #include <QTextCodec>
...@@ -86,6 +87,7 @@ public: ...@@ -86,6 +87,7 @@ public:
void setIsResetting(bool running); void setIsResetting(bool running);
int loginNetDvr(QString ip,QString userName,QString passWord,uint16_t port);
~MainWindow(); ~MainWindow();
signals: signals:
...@@ -127,5 +129,7 @@ private: ...@@ -127,5 +129,7 @@ private:
std::atomic<bool> isResetting; std::atomic<bool> isResetting;
int hk_Device;
}; };
#endif // MAINWINDOW_H #endif // MAINWINDOW_H
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment