Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
G
gamera_videos_no_ui
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
1
Merge Requests
1
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
liusq
gamera_videos_no_ui
Commits
b2696176
Commit
b2696176
authored
Jan 10, 2025
by
“liusq”
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
新增NVR处理抓图失败
parent
bb126533
Hide whitespace changes
Inline
Side-by-side
Showing
10 changed files
with
199 additions
and
35 deletions
+199
-35
CameraHandle.cpp
+44
-21
CameraHandle.h
+5
-2
HttpService.cpp
+6
-0
MediaFaceImage.cpp
+81
-1
MediaFaceImage.h
+8
-0
ScopeSemaphoreExit.h
+1
-1
VidesData.h
+7
-3
gamera_videos.pro
+5
-2
mainwindow.cpp
+37
-4
mainwindow.h
+5
-1
No files found.
CameraHandle.cpp
View file @
b2696176
...
...
@@ -223,6 +223,10 @@ int CameraHandle::sdkDevSetAlarmListener(XSDK_HANDLE hDevice, int bListener) {
return
XSDK_DevSetAlarmListener
(
hDevice
,
bListener
);
}
void
CameraHandle
::
setHkDevice
(
int
hk_Device
){
this
->
hk_Device
=
hk_Device
;
}
int
CameraHandle
::
getChannel
(){
return
channel
;
}
...
...
@@ -405,8 +409,19 @@ int CameraHandle::callbackFunction(XSDK_HANDLE hObject, QString &szString) {
if
(
image
.
empty
())
{
qInfo
()
<<
"Failed to read the image"
;
return
-
1
;
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
;
}
}
if
(
image
.
rows
<=
0
||
image
.
cols
<=
0
||
image
.
channels
()
<=
0
)
{
qInfo
()
<<
"图像尺寸或通道数不正确,需排查原因"
;
...
...
@@ -423,7 +438,7 @@ void CameraHandle::sdkDevSnapSyn(XSDK_HANDLE hDevice, int nChannel){
return
;
}
if
(
!
semaphore
.
tryAcquire
())
{
qInfo
()
<<
QString
(
"SN(%1): callbackFunction:正在执行线程"
).
arg
(
sSn
);
;
qInfo
()
<<
QString
(
"SN(%1): callbackFunction:正在执行线程"
).
arg
(
sSn
);
return
;
}
ScopeSemaphoreExit
guard
([
this
]()
{
...
...
@@ -434,31 +449,40 @@ void CameraHandle::sdkDevSnapSyn(XSDK_HANDLE hDevice, int nChannel){
if
(
algorithmPermissions
==
0x00
){
return
;
}
cv
::
Mat
image
;
MediaFaceImage
*
mediaFaceImage
=
MediaFaceImage
::
getInstance
();
qint64
currentTime
=
QDateTime
::
currentSecsSinceEpoch
();
int
ret
=
mediaFaceImage
->
FaceImageCallBack
(
hDevice
,
nChannel
,
image
,
sSn
);
if
(
ret
<
0
)
{
offlineCount
++
;
// 累加计数器
if
(
offlineCount
>=
3
)
{
// 判断是否连续3次返回0
qInfo
()
<<
QString
(
"SN(%1):
设备离线
"
).
arg
(
sSn
);
QString
ip
=
QString
::
fromUtf8
(
loginParam
->
sDevId
)
;
bool
is_ping
=
instace
.
pingAddress
(
ip
);
qInfo
()
<<
sSn
<<
":ping 的结果"
<<
is_ping
;
if
(
is_ping
){
deviceReboot
();
}
else
{
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
++
;
// 累加计数器
if
(
offlineCount
>=
3
)
{
// 判断是否连续3次返回0
qInfo
()
<<
QString
(
"SN(%1): 设备离线"
).
arg
(
sSn
);
QString
ip
=
QString
::
fromUtf8
(
loginParam
->
sDevId
);
MainWindow
::
sp_this
->
clearOfflineCameraHandle
(
ip
,
loginParam
->
nDevPort
);
bool
is_ping
=
instace
.
pingAddress
(
ip
);
qInfo
()
<<
sSn
<<
":ping 的结果"
<<
is_ping
;
if
(
is_ping
){
deviceReboot
();
}
else
{
QString
ip
=
QString
::
fromUtf8
(
loginParam
->
sDevId
);
MainWindow
::
sp_this
->
clearOfflineCameraHandle
(
ip
,
loginParam
->
nDevPort
);
}
// 执行离线处理逻辑
// TODO: 可以在此处更新设备状态、发送告警通知等
// 重置计数器,以便下次再次检测连续离线
offlineCount
=
0
;
return
;
}
// 执行离线处理逻辑
// TODO: 可以在此处更新设备状态、发送告警通知等
// 重置计数器,以便下次再次检测连续离线
}
else
{
// 如果不连续,则重置计数器
offlineCount
=
0
;
return
;
}
}
else
{
// 如果不连续,则重置计数器
...
...
@@ -471,7 +495,6 @@ void CameraHandle::sdkDevSnapSyn(XSDK_HANDLE hDevice, int nChannel){
}
if
(
image
.
rows
<=
0
||
image
.
cols
<=
0
||
image
.
channels
()
<=
0
)
{
qInfo
()
<<
QString
(
"SN(%1): 图像尺寸或通道数不正确,需排查原因"
).
arg
(
sSn
);
return
;
}
updateImage
(
image
,
currentTime
);
...
...
CameraHandle.h
View file @
b2696176
...
...
@@ -49,10 +49,10 @@ public:
CameraHandle
();
~
CameraHandle
();
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
);
void
setHkDevice
(
int
hk_Device
);
int
getHdevice
();
int
getChannel
();
...
...
@@ -185,7 +185,10 @@ private slots:
private
:
int
hDevice
;
int
hk_Device
;
int
channel
;
QString
httpUrl
;
SXSDKLoginParam
*
loginParam
;
...
...
HttpService.cpp
View file @
b2696176
...
...
@@ -562,6 +562,12 @@ vides_data::response *HttpService::httpDeviceConfig(const QString &serialNumber,
config
.
humanConfig
.
isOn
=
humanConfigObj
[
"isOn"
].
toBool
();
config
.
humanConfig
.
updateAt
=
humanConfigObj
[
"updateAt"
].
toVariant
().
toULongLong
();
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
QJsonObject
devicesConfigObj
=
dataObj
[
"camera"
].
toObject
();
config
.
camera
.
password
=
devicesConfigObj
[
"password"
].
toString
();
...
...
MediaFaceImage.cpp
View file @
b2696176
...
...
@@ -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
)
{
SXSDKInitParam
*
pParam
=
new
SXSDKInitParam
();
pParam
->
nLogLevel
=
8
;
...
...
@@ -255,13 +270,78 @@ int MediaFaceImage::FaceImageCallBack(XSDK_HANDLE hMedia, int nChannel, cv::Mat
}
image
=
std
::
move
(
decodedImage
);
}
catch
(
const
cv
::
Exception
&
e
)
{
qInfo
()
<<
QString
(
"SN(%1): 图像解码过程中捕获异常:%2"
).
arg
(
sSn
).
arg
(
e
.
what
());
qInfo
()
<<
QString
(
"SN(%1): 图像解码过程中捕获异常:%2"
).
arg
(
sSn
).
arg
(
e
.
what
());
return
-
1
;
}
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
){
static
const
int
BufferSize
=
1024
*
1024
*
2
;
// 2MB buffer size
static
unsigned
char
pOutBuffer
[
BufferSize
];
...
...
MediaFaceImage.h
View file @
b2696176
...
...
@@ -6,6 +6,7 @@
#include "VidesData.h"
#include "Common.h"
#include "TaskRunnable.h"
#include "HCNetSDK.h"
#include <memory>
#include <map>
#include <QDebug>
...
...
@@ -19,6 +20,9 @@ public:
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
FaceHkImageCallBack
(
int
userID
,
int
channelID
,
cv
::
Mat
&
image
,
QString
&
sSn
);
int
CameraImage
(
XSDK_HANDLE
hMedia
,
int
nChannel
,
std
::
vector
<
uchar
>
&
buffer
);
int
ToFile
(
const
char
*
pFileName
,
const
void
*
pData
,
int
nLenght
);
...
...
@@ -26,6 +30,10 @@ public:
int
AbFile
(
const
char
*
pFileName
,
const
void
*
pData
,
int
nLenght
);
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
);
...
...
ScopeSemaphoreExit.h
View file @
b2696176
...
...
@@ -6,7 +6,7 @@ class ScopeSemaphoreExit {
public
:
explicit
ScopeSemaphoreExit
(
std
::
function
<
void
()
>
onExit
);
~
ScopeSemaphoreExit
();
~
ScopeSemaphoreExit
();
private
:
std
::
function
<
void
()
>
onExit_
;
...
...
VidesData.h
View file @
b2696176
...
...
@@ -311,7 +311,12 @@ struct MqttConfig {
QString
password
;
quint64
updateAt
;
};
struct
NvrConfig
{
QString
ip
;
QString
username
;
QString
password
;
uint16_t
port
;
};
struct
responseConfig
{
...
...
@@ -323,7 +328,7 @@ struct responseConfig {
UniformConfig
uniformConfig
;
Camera
camera
;
MqttConfig
mqttConfig
;
NvrConfig
nvrConfig
;
HumanConfig
humanConfig
;
};
...
...
@@ -358,7 +363,6 @@ struct DetectionParams {
float
recConfidenceThreshold
;
///< 识别置信度阈值
};
inline
bool
isVirtualMachine
()
{
QString
dmiPath
;
...
...
gamera_videos.pro
View file @
b2696176
...
...
@@ -17,7 +17,9 @@ DEFINES += APP_VERSION=\\\"1.3.2\\\"
DEFINES
+=
QT_MESSAGELOGCONTEXT
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
/
hyperface
...
...
@@ -27,7 +29,7 @@ INCLUDEPATH+=/usr/local/include/human
INCLUDEPATH
+=/
usr
/
local
/
include
/
CImg
INCLUDEPATH
+=/
usr
/
local
/
include
/
mqtt
INCLUDEPATH
+=/
usr
/
local
/
include
/
stb_image
INCLUDEPATH
+=/
usr
/
local
/
include
/
hkws
...
...
@@ -88,6 +90,7 @@ LIBS += -lopencv_core \
-
lopencv_objdetect
\
-
lsohuman
\
-
lpaho
-
mqtt3a
\
-
lhcnetsdk
\
# -lssl \
# -lcrypto \ sudo apt-get install libjpeg-dev libpng-dev
-
lc
\
...
...
mainwindow.cpp
View file @
b2696176
...
...
@@ -92,6 +92,9 @@ MainWindow::MainWindow():isResetting(false)
qInfo
()
<<
"sdk初始化失败"
;
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
);
...
...
@@ -141,6 +144,36 @@ void MainWindow::runOrRebootMqtt(vides_data::MqttConfig &mqtt_config,QString &ht
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
){
bool
faceAlgorithm
=
false
,
licensePlateAlgorithm
=
false
,
uniformAlgorithm
=
false
,
timeChange
=
false
;
AlgorithmTaskManage
&
algorithmTaskManage
=
AlgorithmTaskManage
::
getInstance
();
...
...
@@ -504,6 +537,7 @@ void MainWindow::clearOfflineCameraHandle(QString sDevId, int nDevPort) {
void
MainWindow
::
setIsResetting
(
bool
running
)
{
this
->
isResetting
.
store
(
running
,
std
::
memory_order_release
);
}
//平台没有 盒子有 盒子关闭
void
MainWindow
::
startCamera
(
const
QString
&
httpurl
){
if
(
this
->
isResetting
.
load
(
std
::
memory_order_acquire
)){
...
...
@@ -1058,7 +1092,7 @@ void MainWindow::initCameras(vides_data::cameraParameters ¶meter,vides_data:
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
);
q
Debug
()
<<
QString
(
"SN(%1): 句柄为%2"
).
arg
(
parameter
.
sSn
).
arg
(
sdk_handle
);
q
Info
()
<<
QString
(
"SN(%1): 句柄为%2"
).
arg
(
parameter
.
sSn
).
arg
(
sdk_handle
);
if
(
sdk_handle
<=
0
){
qInfo
()
<<
QString
(
"SN(%1): 登录失败"
).
arg
(
parameter
.
sSn
);
...
...
@@ -1066,12 +1100,11 @@ void MainWindow::initCameras(vides_data::cameraParameters ¶meter,vides_data:
}
mediaFaceImage
->
setMap
(
sdk_handle
,
cameraHandle
);
initDevConfigSyn
(
cameraHandle
,
devConfig
);
cameraHandle
->
sdkDevSetAlarmListener
(
sdk_handle
,
0
);
cameraHandle
->
setHkDevice
(
hk_Device
);
int
synTime
=
devConfig
.
camera
.
devSnapSynTimer
;
uint64
face_frequency
=
devConfig
.
humanConfig
.
faceFrequency
;
float
carConfidenceMax
=
devConfig
.
licensePlateConfig
.
carConfidenceMax
;
...
...
mainwindow.h
View file @
b2696176
...
...
@@ -8,6 +8,7 @@
#include "MediaFaceImage.h"
#include "AlgorithmTaskManage.h"
#include "MqttSubscriber.h"
#include "HCNetSDK.h"
#include <algorithm>
#include <QString>
#include <QTextCodec>
...
...
@@ -85,7 +86,8 @@ public:
const
std
::
list
<
vides_data
::
responseDeviceStatus
>&
devices
);
void
setIsResetting
(
bool
running
);
int
loginNetDvr
(
QString
ip
,
QString
userName
,
QString
passWord
,
uint16_t
port
);
~
MainWindow
();
signals
:
...
...
@@ -126,6 +128,8 @@ private:
vides_data
::
MqttConfig
mqttConfig
;
std
::
atomic
<
bool
>
isResetting
;
int
hk_Device
;
};
#endif // MAINWINDOW_H
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment