Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
F
FaceDetection
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
guanghui.cui
FaceDetection
Commits
13f5f3ca
Commit
13f5f3ca
authored
Feb 22, 2018
by
guanghui.cui
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
多线程处理用户信息,解决卡顿问题
parent
d34be2f7
Show whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
63 additions
and
21 deletions
+63
-21
FaceDetection/CommonStruct.h
+1
-0
FaceDetection/FaceDetection.cpp
+62
-21
No files found.
FaceDetection/CommonStruct.h
View file @
13f5f3ca
...
...
@@ -7,6 +7,7 @@ struct TargetInfo
std
::
string
strPhone
;
//手机号
dlib
::
rectangle
rc
;
//头像位置
int
iCode
=
0
;
//用户编码
bool
bSuccess
=
false
;
//是否成功获取到用户信息
};
struct
sReqCertificate
...
...
FaceDetection/FaceDetection.cpp
View file @
13f5f3ca
...
...
@@ -20,6 +20,7 @@
#include "utility/utilCommonAPI.h"
#include "utility/jsonAnalysis.h"
#include "curl/curl.h"
#include "utility/threadpool.h"
INITIALIZE_EASYLOGGINGPP
//using namespace cv;
using
namespace
std
;
...
...
@@ -44,7 +45,9 @@ using namespace std;
#endif
std
::
string
strUrl
=
"http://139.196.195.9:8788/facesearch/search4File"
;
std
::
string
postResponseStr
;
std
::
vector
<
TargetInfo
>
track_dets
;
//跟踪目标所在位置
std
::
vector
<
dlib
::
rectangle
>
_get_rc_detectors
(
std
::
vector
<
TargetInfo
>
&
vecTargets
)
{
...
...
@@ -144,6 +147,40 @@ CURLcode curl_post_req(const string &url, const string imgPath, string &response
return
res
;
}
void
reqUserInfoByImg
(
int
index
,
string
&
imgPath
)
{
std
::
string
postResponseStr
;
bool
rlt
=
false
;
auto
res
=
curl_post_req
(
strUrl
,
imgPath
,
postResponseStr
);
if
(
res
!=
CURLE_OK
)
{
LOG
(
INFO
)
<<
"curl_easy_perform() failed: "
+
string
(
curl_easy_strerror
(
res
));
}
else
{
postResponseStr
=
UnicodeToAscii
(
Utf8ToUnicode
(
postResponseStr
));
LOG
(
INFO
)
<<
"utf8 to ascii:"
<<
postResponseStr
;
rlt
=
true
;
}
sServerResponse
response
=
GetServerResultData
(
postResponseStr
.
data
());
//更新查询到的信息
for
(
auto
&
target
:
track_dets
)
{
if
(
target
.
iCode
==
index
)
{
if
(
rlt
&&
response
.
vecUser
.
size
()
>
0
)
{
float
fNum
=
0.00
;
fNum
=
atof
(
response
.
vecUser
[
0
].
confidence
.
data
());
if
(
fNum
>
80.000
)
{
target
.
strName
=
response
.
vecUser
[
0
].
memberName
;
target
.
strPhone
=
response
.
vecUser
[
0
].
memberTel
;
}
}
target
.
bSuccess
=
rlt
;
break
;
}
}
}
int
main
()
{
try
...
...
@@ -169,12 +206,14 @@ int main()
std
::
string
strFilePath
=
GetProcDir
();
//std::string strPathImg = strFilePath + "tmpimg.jpg";
std
::
threadpool
pool
;
//线程池
int
frame_count
=
0
;
std
::
vector
<
dlib
::
rectangle
>
dets
;
std
::
vector
<
TargetInfo
>
temp_dets
;
//缓存位置信息
std
::
vector
<
TargetInfo
>
track_dets
;
//跟踪目标所在位置
std
::
vector
<
dlib
::
correlation_tracker
>
vecTracker
;
//跟踪目标
unsigned
int
iReqServerCount
=
0
;
//服务器请求计数,同时也是目标唯一标识
unsigned
int
iReqServerCount
=
1
;
//服务器请求计数,同时也是目标唯一标识
int
max_target
=
4
;
//最大目标数量
for
(
int
i
=
0
;
i
<
max_target
;
i
++
)
{
dlib
::
correlation_tracker
tracker
;
...
...
@@ -242,7 +281,7 @@ int main()
}
}
if
(
!
bTargetFind
)
{
if
(
!
bTargetFind
||
!
track_dets
[
i
].
bSuccess
)
{
track_dets
[
i
].
rc
=
new_position
;
track_dets
[
i
].
iCode
=
iReqServerCount
;
//启动查询线程,查询用户信息
...
...
@@ -251,23 +290,25 @@ int main()
_save_target_img
(
temp
,
new_position
,
strPathImg
.
data
());
postResponseStr
.
clear
();
auto
res
=
curl_post_req
(
strUrl
,
strPathImg
,
postResponseStr
);
if
(
res
!=
CURLE_OK
)
LOG
(
INFO
)
<<
"curl_easy_perform() failed: "
+
string
(
curl_easy_strerror
(
res
));
else
{
postResponseStr
=
UnicodeToAscii
(
Utf8ToUnicode
(
postResponseStr
));
LOG
(
INFO
)
<<
"utf8 to ascii:"
<<
postResponseStr
;
}
sServerResponse
response
=
GetServerResultData
(
postResponseStr
.
data
());
if
(
response
.
vecUser
.
size
()
>
0
)
{
track_dets
[
i
].
strName
=
response
.
vecUser
[
0
].
memberName
;
track_dets
[
i
].
strPhone
=
response
.
vecUser
[
0
].
memberTel
;
}
cout
<<
"cols:"
<<
temp
.
cols
<<
" rows:"
<<
temp
.
rows
<<
endl
;
cout
<<
"new_position.height():"
<<
new_position
.
height
()
<<
" new_position.width():"
<<
new_position
.
width
()
<<
endl
;
pool
.
commit
(
reqUserInfoByImg
,
iReqServerCount
,
strPathImg
);
//std::string postResponseStr;
//auto res = curl_post_req(strUrl, strPathImg, postResponseStr);
//if (res != CURLE_OK)
// LOG(INFO) << "curl_easy_perform() failed: " + string(curl_easy_strerror(res));
//else {
// postResponseStr = UnicodeToAscii(Utf8ToUnicode(postResponseStr));
// LOG(INFO) << "utf8 to ascii:" << postResponseStr;
//}
//sServerResponse response = GetServerResultData(postResponseStr.data());
//if (response.vecUser.size() > 0) {
// track_dets[i].strName = response.vecUser[0].memberName;
// track_dets[i].strPhone = response.vecUser[0].memberTel;
//}
//
//cout << "cols:" << temp.cols << " rows:" << temp.rows << endl;
//cout << "new_position.height():" << new_position.height() << " new_position.width():" << new_position.width() << endl;
cout
<<
"iReqServerCount:"
<<
iReqServerCount
<<
endl
;
iReqServerCount
++
;
}
...
...
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