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
0
Merge Requests
0
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
e2bbbbe3
Commit
e2bbbbe3
authored
Sep 11, 2024
by
“liusq”
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
人形检测关闭算法
parent
b86676af
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
115 additions
and
99 deletions
+115
-99
CameraHandle.cpp
+96
-92
HttpService.cpp
+4
-1
VidesData.h
+8
-0
mainwindow.cpp
+6
-5
mainwindow.h
+1
-1
moc_predefs.h
+0
-0
No files found.
CameraHandle.cpp
View file @
e2bbbbe3
...
...
@@ -599,118 +599,122 @@ void CameraHandle::updateImage(const cv::Mat & frame,qint64 currentTime){
int
uniforms
=
0x00
;
std
::
map
<
int
,
int
>
resMap
;
//穿工服算法
if
((
algorithmPermissions
&
0x01
<<
2
)
!=
0
)
{
uniforms
=
algorithmTaskManage
.
executeFindHuManCar
(
frame
,
0x02
,
currentPlates
,
resMap
,
sSn
,
heightReference
);
if
(
resMap
.
size
()
>
0x00
){
faSize
=
resMap
.
at
(
0x00
);
uniforms
=
resMap
.
at
(
0x02
);
if
((
algorithmPermissions
&
0x01
<<
3
)
!=
0
)
{
//穿工服算法
if
((
algorithmPermissions
&
0x01
<<
2
)
!=
0
)
{
uniforms
=
algorithmTaskManage
.
executeFindHuManCar
(
frame
,
0x02
,
currentPlates
,
resMap
,
sSn
,
heightReference
);
if
(
resMap
.
size
()
>
0x00
){
faSize
=
resMap
.
at
(
0x00
);
uniforms
=
resMap
.
at
(
0x02
);
}
}
else
{
//人形
uniforms
=
algorithmTaskManage
.
executeFindHuManCar
(
frame
,
0x00
,
currentPlates
,
resMap
,
sSn
,
heightReference
);
if
(
resMap
.
size
()
>
0x00
){
faSize
=
resMap
.
at
(
0x00
);
uniforms
=
faSize
;
}
}
}
else
{
//人形
uniforms
=
algorithmTaskManage
.
executeFindHuManCar
(
frame
,
0x00
,
currentPlates
,
resMap
,
sSn
,
heightReference
);
if
(
resMap
.
size
()
>
0x00
){
faSize
=
resMap
.
at
(
0x00
);
uniforms
=
faSize
;
if
(
uniforms
==-
2
||
faSize
==-
2
){
qInfo
()
<<
"没有可用的HumanDetection对象可以调度"
;
return
;
}
}
if
(
uniforms
==-
2
||
faSize
==-
2
){
qInfo
()
<<
"没有可用的HumanDetection对象可以调度"
;
return
;
}
QPoint
point_info
(
faSize
,
uniforms
);
if
(
isChanged
(
point_info
,
faceMapWorker
)){
if
(
faceCount
.
load
(
std
::
memory_order_relaxed
)
%
face_frequency
==
0
){
int
worker
=
0x00
;
if
((
algorithmPermissions
&
0x01
<<
2
)
!=
0
)
{
worker
=
(
faSize
-
uniforms
>
0
)
?
(
faSize
-
uniforms
)
:
0
;
}
qInfo
()
<<
"工作人数==>"
<<
worker
;
vides_data
::
response
*
resp
=
httpService
.
httpPostFacePopulation
(
imgs
,
faSize
,
worker
,
sSn
,
currentTime
);
if
(
resp
->
code
!=
0
)
{
if
(
resp
->
msg
==
"TimeoutError"
)
{
QByteArray
num_imgs
;
httpService
.
setHttpUrl
(
httpUrl
);
vides_data
::
response
*
img_resp
=
httpService
.
httpPostFacePopulation
(
num_imgs
,
faSize
,
worker
,
sSn
,
currentTime
);
if
(
img_resp
->
code
!=
0
)
{
qInfo
()
<<
"不加图片人数变化推送信息推送失败"
;
}
instace
.
deleteObj
(
img_resp
);
QPoint
point_info
(
faSize
,
uniforms
);
if
(
isChanged
(
point_info
,
faceMapWorker
)){
if
(
faceCount
.
load
(
std
::
memory_order_relaxed
)
%
face_frequency
==
0
){
int
worker
=
0x00
;
if
((
algorithmPermissions
&
0x01
<<
2
)
!=
0
)
{
worker
=
(
faSize
-
uniforms
>
0
)
?
(
faSize
-
uniforms
)
:
0
;
}
}
qInfo
()
<<
"工作人数==>"
<<
worker
;
vides_data
::
response
*
resp
=
httpService
.
httpPostFacePopulation
(
imgs
,
faSize
,
worker
,
sSn
,
currentTime
);
instace
.
deleteObj
(
resp
);
faceMapWorker
.
setX
(
faSize
);
faceMapWorker
.
setY
(
uniforms
);
}
}
if
(
faSize
>
0
&&
(
algorithmPermissions
&
0x01
<<
1
)
!=
0
){
std
::
list
<
vides_data
::
faceRecognitionResult
>
faces
;
algorithmTaskManage
.
executeFindDoesItExistEmployee
(
frame
,
faces
,
sSn
);
if
(
faces
.
size
()
>
0
)
{
for
(
auto
face
:
faces
){
vides_data
::
requestFaceReconition
faceReconition
;
faceReconition
.
id
=
face
.
id
;
faceReconition
.
img
=
imgs
;
faceReconition
.
sn
=
sSn
;
faceReconition
.
time
=
currentTime
;
faceReconition
.
area
.
top_left_corner_x
=
face
.
x
;
faceReconition
.
area
.
top_left_corner_y
=
face
.
y
;
faceReconition
.
area
.
bottom_right_corner_x
=
face
.
x
+
face
.
width
;
faceReconition
.
area
.
bottom_right_corner_y
=
face
.
y
+
face
.
height
;
faceReconition
.
area
.
bottom_left_corner_x
=
face
.
x
;
faceReconition
.
area
.
bottom_left_corner_y
=
face
.
y
+
face
.
height
;
faceReconition
.
area
.
top_right_corner_x
=
face
.
x
+
face
.
width
;
faceReconition
.
area
.
top_right_corner_y
=
face
.
y
;
httpService
.
setHttpUrl
(
httpUrl
);
vides_data
::
response
*
resp
=
httpService
.
httpPostFaceReconition
(
faceReconition
);
mapFaces
.
insert
(
std
::
make_pair
(
face
.
id
,
faceReconition
));
if
(
resp
->
code
!=
0
)
{
if
(
resp
->
msg
==
"TimeoutError"
)
{
faceReconition
.
img
.
clear
()
;
QByteArray
num_imgs
;
httpService
.
setHttpUrl
(
httpUrl
);
vides_data
::
response
*
img_resp
=
httpService
.
httpPostFace
Reconition
(
faceReconition
);
vides_data
::
response
*
img_resp
=
httpService
.
httpPostFace
Population
(
num_imgs
,
faSize
,
worker
,
sSn
,
currentTime
);
if
(
img_resp
->
code
!=
0
)
{
qInfo
()
<<
"不加图片人脸信息推送失败"
;
qInfo
()
<<
"不加图片识别人code"
<<
resp
->
code
;
qInfo
()
<<
"不加图片识别人msg"
<<
resp
->
msg
;
qInfo
()
<<
"不加图片识别人脸信息推送失败"
<<
face
.
id
;
qInfo
()
<<
"不加图片人数变化推送信息推送失败"
;
}
instace
.
deleteObj
(
img_resp
);
}
}
instace
.
deleteObj
(
resp
);
faceMapWorker
.
setX
(
faSize
);
faceMapWorker
.
setY
(
uniforms
);
}
}
}
if
((
algorithmPermissions
&
0x01
<<
2
)
!=
0
)
{
if
(
uniforms
>
0
){
//未穿工服的人数
std
::
list
<
QString
>
outUniforms
;
faceUniformOverlap
(
mapFaces
,
currentPlates
,
outUniforms
);
for
(
auto
strUniform
:
outUniforms
){
httpService
.
setHttpUrl
(
httpUrl
);
vides_data
::
response
*
resp
=
httpService
.
httpPostUniforms
(
imgs
,
strUniform
,
sSn
,
currentTime
);
if
(
resp
->
code
!=
0
)
{
if
(
resp
->
msg
==
"TimeoutError"
)
{
QByteArray
num_imgs
;
httpService
.
setHttpUrl
(
httpUrl
);
vides_data
::
response
*
img_resp
=
httpService
.
httpPostUniforms
(
num_imgs
,
strUniform
,
sSn
,
currentTime
);
if
(
img_resp
->
code
!=
0
)
{
qInfo
()
<<
"不加图片推送未穿工服人数失败"
;
if
(
faSize
>
0
&&
(
algorithmPermissions
&
0x01
<<
1
)
!=
0
){
std
::
list
<
vides_data
::
faceRecognitionResult
>
faces
;
algorithmTaskManage
.
executeFindDoesItExistEmployee
(
frame
,
faces
,
sSn
);
if
(
faces
.
size
()
>
0
)
{
for
(
auto
face
:
faces
){
vides_data
::
requestFaceReconition
faceReconition
;
faceReconition
.
id
=
face
.
id
;
faceReconition
.
img
=
imgs
;
faceReconition
.
sn
=
sSn
;
faceReconition
.
time
=
currentTime
;
faceReconition
.
area
.
top_left_corner_x
=
face
.
x
;
faceReconition
.
area
.
top_left_corner_y
=
face
.
y
;
faceReconition
.
area
.
bottom_right_corner_x
=
face
.
x
+
face
.
width
;
faceReconition
.
area
.
bottom_right_corner_y
=
face
.
y
+
face
.
height
;
faceReconition
.
area
.
bottom_left_corner_x
=
face
.
x
;
faceReconition
.
area
.
bottom_left_corner_y
=
face
.
y
+
face
.
height
;
faceReconition
.
area
.
top_right_corner_x
=
face
.
x
+
face
.
width
;
faceReconition
.
area
.
top_right_corner_y
=
face
.
y
;
httpService
.
setHttpUrl
(
httpUrl
);
vides_data
::
response
*
resp
=
httpService
.
httpPostFaceReconition
(
faceReconition
);
mapFaces
.
insert
(
std
::
make_pair
(
face
.
id
,
faceReconition
));
if
(
resp
->
code
!=
0
)
{
if
(
resp
->
msg
==
"TimeoutError"
)
{
faceReconition
.
img
.
clear
();
httpService
.
setHttpUrl
(
httpUrl
);
vides_data
::
response
*
img_resp
=
httpService
.
httpPostFaceReconition
(
faceReconition
);
if
(
img_resp
->
code
!=
0
)
{
qInfo
()
<<
"不加图片人脸信息推送失败"
;
qInfo
()
<<
"不加图片识别人code"
<<
resp
->
code
;
qInfo
()
<<
"不加图片识别人msg"
<<
resp
->
msg
;
qInfo
()
<<
"不加图片识别人脸信息推送失败"
<<
face
.
id
;
}
instace
.
deleteObj
(
img_resp
);
}
instace
.
deleteObj
(
img_resp
);
}
instace
.
deleteObj
(
resp
);
}
instace
.
deleteObj
(
resp
);
}
}
if
((
algorithmPermissions
&
0x01
<<
2
)
!=
0
)
{
if
(
uniforms
>
0
){
//未穿工服的人数
std
::
list
<
QString
>
outUniforms
;
faceUniformOverlap
(
mapFaces
,
currentPlates
,
outUniforms
);
for
(
auto
strUniform
:
outUniforms
){
httpService
.
setHttpUrl
(
httpUrl
);
vides_data
::
response
*
resp
=
httpService
.
httpPostUniforms
(
imgs
,
strUniform
,
sSn
,
currentTime
);
if
(
resp
->
code
!=
0
)
{
if
(
resp
->
msg
==
"TimeoutError"
)
{
QByteArray
num_imgs
;
httpService
.
setHttpUrl
(
httpUrl
);
vides_data
::
response
*
img_resp
=
httpService
.
httpPostUniforms
(
num_imgs
,
strUniform
,
sSn
,
currentTime
);
if
(
img_resp
->
code
!=
0
)
{
qInfo
()
<<
"不加图片推送未穿工服人数失败"
;
}
instace
.
deleteObj
(
img_resp
);
}
}
instace
.
deleteObj
(
resp
);
}
}
}
}
else
{
qInfo
()
<<
"人形识别算法关闭,只有车牌算法了"
;
}
//关闭车牌识别
if
((
algorithmPermissions
&
0x01
)
==
0
)
{
...
...
HttpService.cpp
View file @
e2bbbbe3
...
...
@@ -538,7 +538,10 @@ vides_data::response *HttpService::httpDeviceConfig(const QString &serialNumber,
config
.
uniformConfig
.
humanDetectionLen
=
uniformConfigObj
[
"humanDetectionLen"
].
toInt
();
config
.
uniformConfig
.
updateAt
=
uniformConfigObj
[
"updateAt"
].
toVariant
().
toULongLong
();
config
.
uniformConfig
.
carShapeConfidence
=
uniformConfigObj
[
"carShapeConfidence"
].
toVariant
().
toFloat
();
//解析 humanConfig
QJsonObject
humanConfigObj
=
dataObj
[
"humanConfig"
].
toObject
();
config
.
humanConfig
.
isOn
=
humanConfigObj
[
"isOn"
].
toBool
();
config
.
humanConfig
.
updateAt
=
humanConfigObj
[
"updateAt"
].
toVariant
().
toULongLong
();
// 解析 devicesConfig
QJsonObject
devicesConfigObj
=
dataObj
[
"camera"
].
toObject
();
...
...
VidesData.h
View file @
e2bbbbe3
...
...
@@ -279,6 +279,12 @@ struct UniformConfig {
quint64
updateAt
;
};
struct
HumanConfig
{
bool
isOn
;
int
humanDetectionLen
;
quint64
updateAt
;
};
struct
MqttConfig
{
QString
address
;
QString
clientId
;
...
...
@@ -299,6 +305,8 @@ struct responseConfig {
UniformConfig
uniformConfig
;
Camera
camera
;
MqttConfig
mqttConfig
;
HumanConfig
humanConfig
;
};
struct
responseMqttData
{
...
...
mainwindow.cpp
View file @
e2bbbbe3
...
...
@@ -170,7 +170,7 @@ void MainWindow::divParameterUpdate(vides_data::responseConfig &cloudConfig,QStr
cloudConfig
.
mqttConfig
.
topic
=
config
.
mqttConfig
.
topic
;
runOrRebootMqtt
(
cloudConfig
.
mqttConfig
,
httpUrl
,
serialNumber
);
}
__uint8_t
alg
=
this
->
intToUint8t
(
faceAlgorithm
,
licensePlateAlgorithm
,
uniformAlgorithm
)
;
__uint8_t
alg
=
this
->
intToUint8t
(
faceAlgorithm
,
licensePlateAlgorithm
,
uniformAlgorithm
,
false
)
;
vides_data
::
DetectionParams
params
;
...
...
@@ -556,7 +556,7 @@ void MainWindow::startCamera(const QString &httpurl){
reStatus
.
camera_info_list
.
push_front
(
camera_info
);
__uint8_t
new_algorithm
=
intToUint8t
(
devConfig
.
faceConfig
.
isOn
,
devConfig
.
licensePlateConfig
.
isOn
,
devConfig
.
uniformConfig
.
isOn
);
__uint8_t
new_algorithm
=
intToUint8t
(
devConfig
.
faceConfig
.
isOn
,
devConfig
.
licensePlateConfig
.
isOn
,
devConfig
.
uniformConfig
.
isOn
,
devConfig
.
humanConfig
.
isOn
);
offlineCameraHandle
->
cameraParameterUpdate
(
devConfig
);
offlineCameraHandle
->
initAlgorithmPermissions
(
new_algorithm
);
...
...
@@ -961,9 +961,10 @@ void MainWindow::initRecordingToString(QString &recorJson){
recorJson
=
QString
::
fromUtf8
(
jsonDocument
.
toJson
());
}
__uint8_t
MainWindow
::
intToUint8t
(
bool
faceAlgorithm
,
bool
licensePlateAlgorithm
,
bool
uniformAlgorithm
)
{
__uint8_t
MainWindow
::
intToUint8t
(
bool
faceAlgorithm
,
bool
licensePlateAlgorithm
,
bool
uniformAlgorithm
,
bool
humanAlgorithm
)
{
__uint8_t
result
=
0
;
//人形识别对应最高高位(第3位)
result
|=
(
humanAlgorithm
?
1
:
0
)
<<
3
;
// 工服识别对应最高位(第2位)
result
|=
(
uniformAlgorithm
?
1
:
0
)
<<
2
;
...
...
@@ -1013,7 +1014,7 @@ void MainWindow::initCameras(vides_data::cameraParameters ¶meter,vides_data:
cameraHandle
->
findFirmwareVersion
(
camera_info
.
firmware_version
);
camera_info_list
.
push_front
(
camera_info
);
__uint8_t
new_algorithm
=
intToUint8t
(
devConfig
.
faceConfig
.
isOn
,
devConfig
.
licensePlateConfig
.
isOn
,
devConfig
.
uniformConfig
.
isOn
);
__uint8_t
new_algorithm
=
intToUint8t
(
devConfig
.
faceConfig
.
isOn
,
devConfig
.
licensePlateConfig
.
isOn
,
devConfig
.
uniformConfig
.
isOn
,
devConfig
.
humanConfig
.
isOn
);
cameraHandle
->
initAlgorithmPermissions
(
new_algorithm
);
cameraHandle
->
initParkingSpaceInfo
(
areas
);
...
...
mainwindow.h
View file @
e2bbbbe3
...
...
@@ -44,7 +44,7 @@ public:
void
initCameras
(
vides_data
::
cameraParameters
&
parameter
,
vides_data
::
responseConfig
&
devConfig
,
const
std
::
list
<
vides_data
::
responseArea
>&
areas
,
std
::
list
<
vides_data
::
requestCameraInfo
>&
camera_info_list
);
__uint8_t
intToUint8t
(
bool
faceAlgorithm
,
bool
licensePlateAlgorithm
,
bool
uniformAlgorithm
);
__uint8_t
intToUint8t
(
bool
faceAlgorithm
,
bool
licensePlateAlgorithm
,
bool
uniformAlgorithm
,
bool
humanAlgorithm
);
//盒子参数更新
void
divParameterUpdate
(
vides_data
::
responseConfig
&
cloudConfig
,
QString
&
httpUrl
,
QString
&
serialNumber
);
...
...
moc_predefs.h
100644 → 100755
View file @
e2bbbbe3
File mode changed from 100644 to 100755
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